Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Wyświetlanie części innej strony w iframe
Forum PHP.pl > Forum > Przedszkole
Xart
Witam mam pewien problem nad którym się zastanawiam, czy jest on możliwy do zrealizowania wink.gif

Załóżmy że jest strona, która posiada informację o pogodzie np: http://pogoda.interia.pl (to tylko przykład) i chcę wyświetlić na innej stronie w iframe zawartość części tej strony (w tym przypadku sam widget z pogodą) z tego diva <div class="main-special">.
Da się to zrobić jakoś za pomocą PHP / ew jakoś inaczej ? Zakładamy, że div jest zawsze w dokładnie tym samym miejscu..
Turson
Skoro wiesz jaki to div, to sparsuj HTML jakąś klasą HTML DOM
Michael2318
Zakładając, że ten div jest jakoś specjalnie wyróżniony na tej stronie (ma przypisaną indywidualną klasę/id/name), pobierasz całość kodu html do zmiennej jako string:

  1. $code_html = file_get_contents('http://pogoda.interia.pl');


teraz już zwyczajne operacje wykonujesz na wyrażeniach regularnych.

Tutaj jest przykład jak pobrać zawartość diva, który ma przypisaną klasę o nazwie lot-price-block: http://stackoverflow.com/questions/1527225...-div-with-class

Drugą metodą może być to: http://simplehtmldom.sourceforge.net/
Xart
Da się to zrobić str_get_html ?
Możesz podać jakis przykład ?
Turson
W tym linku jest przykład
Michael2318
http://simplehtmldom.sourceforge.net/manual.htm
Xart
A nie da się jakoś tego określonego diva wyświetlić w iframe ?
Michael2318
Ale po co tak kombinujesz, przecież podałem Ci praktycznie gotowca:

  1. $code = file_get_contents('http://strona.pl/');
  2.  
  3. $value = preg_match_all('/<div class=\"lot\-price\-block\">(.*?)<\/div>/s', $code, $matches);
  4.  
  5. print_r($matches);
Xart
Bo takim sposobem coś nie działa...

  1. <?php
  2. $code = file_get_contents('http://pogoda.interia.pl/');
  3. $value = preg_match_all('/<div class=\"main-special\">(.*?)<\/div>/s', $code, $matches);
  4. print_r($matches);
  5. ?>


wyświetla

Array ( [0] => Array ( [0] =>
Zgłoś uwagi do serwisu POGODA
Powered byAccuWeather.com
) [1] => Array ( [0] => Zgłoś uwagi do serwisu POGODA
Powered byAccuWeather.com ) )

w dodatku bez obrazków itp... i jakieś tablice w tablicy


jeszcze kwestia tego że nie wie do którego </div> się odwołać.. bo tam są divy w divie

a nawet gdy dam do </html> to wyświetla to wszystko w formie tekstu bez ładnego ułożenia ITP...
Michael2318
Nie wiem jak wygląda ten div bo mi nie powiedziałeś na jakiej stronie bazujesz i jaki div konkretnie chcesz wyciągnąć ze strony.

Wyświetla Ci tablicę bo to jest własnie efekt funkcji print_r...
Xart
Podałem dla przykładu tą stronę ale to tylko przykład: http://pogoda.interia.pl/
Próbuję wyświetlić to: http://screenshooter.net/2455104/jaojike
johny_s
no to pobierz jeszcze style i zdjęcia
Xart
A file_get_contents nie pobiera automatycznie ?
johny_s
nie
Michael2318
Zauważ, że w kodzie jest np. coś takiego:

Kod
<img id="weather-currently-wind-icon" class="weather-currently-wind-icon" src="/i/icons-wind-header/1.png" alt="S"/>


Czy u Ciebie na serwerze pod taką lokalizacją znajduje się takie zdjęcie? Raczej wątpię, dlatego musisz sobie jeszcze dopisać wyrażenie, które będzie dopisywać pełną ścieżkę do tych obrazków:

Kod
<img id="weather-currently-wind-icon" class="weather-currently-wind-icon" src="http://pogoda.interia.pl/i/icons-wind-header/1.png" alt="S"/>


albo musisz pobrać te obrazki do siebie na FTP i zapisać je i podmienić ścieżkę, chyba, że zapiszesz je dokładnie pod taką samą ścieżką.

To samo dotyczy styli .css, jeśli nie masz u siebie klasy weather-currently-wind-icon, a ona np. jest odpowiedzialna za pogrubienie to nie licz, że w widoku u Ciebie na stronie tekst będzie pogrubiony.
.css też musisz stworzyć.
Xart
No właśnie zapisywanie tego wszystkiego na FTP nie ma raczej sensu a parsowanie tego kodu nie będzie proste...
Nie da się tego zrobić jakoś za pomocą np JS ?
johny_s
nie prościej poszukać jakieś api udostępniające prognozy pogody?
Xart
tak ale prognoza pogody to tylko przykład ja będę potrzebował wyświetlać zupełnie coś innego...
Chodzi mi tylko o sam sposób rozwiązania tego
johny_s
taki sposób jest wysoce ryzykowny, bo przestaje działać po zmianie na stronie z której się coś kradnie,
można napisać do właściciela serwisu czy by nie wystawił jakiegoś api
Michael2318
W ten sposób, który Ci przedstawiłem pobiera się najczęściej jakieś dane tekstowe, które co jakiś czas ulegają zmianie, a Ty sam nie jesteś w stanie tych danych odtworzyć. Dla przykładu chcesz wiedzieć ile wynosi kurs funta brytyjskiego. Wchodzisz na http://waluty.onet.pl/gbp-pln-kurs-funta-b...e-waluta-online, pobierasz sobie wartość diva, który ma przypisaną klasę o nazwie "cena":

Kod
<div class="cena">
                                             5,2043
                                       </div>


znalezisko sobie echujesz u siebie i stylizujesz według uznania. Żadnych zdjęć itp. tutaj nie potrzeba.
Xart
Ale ja właśnie nie chcę wyświetlać żadnej wartości a uzyskanie api nie jest możliwe że tak powiem...
Potrzebuję konkretnej części strony (zakładając nawet ułożenie dokładne itp) może w zależności od pixeli da się to jakoś zrobić ?


Zawsze jest takie rozwiązanie:

  1. #my-div
  2. {
  3. width : 400px;
  4. height : 400px;
  5. overflow : hidden;
  6. position : relative;
  7. }
  8.  
  9. #my-iframe
  10. {
  11. position : absolute;
  12. top : -800px;
  13. left : -600px;
  14. width : 1280px;
  15. height : 1200px;
  16. }
  17. <div id="my-div">
  18. <iframe src="http://www.wp.pl/" id="my-iframe" scrolling="no"></iframe>
  19. </div>


ale jest ono bardzo mało wygodne...
Michael2318
Cały czas wracamy do punktu wyjścia... Wyrażenia regularne + przerobienie tamtejszych grafik na konkretne/docelowe urle z tamtej strony.

Jeśli chcesz się bawić z tym iframe to tutaj masz jakiś badziew: http://www.webdeveloper.com/forum/showthre...433#post1241433

gość ukrywa część strony, na podstawie overflow:hidden, bawi się z position:absolute, ogólnie kombinuje jak koń pod górę, a ciekawe co będzie jak nagle strona się wydłuży bo admin doda dwa nowe zdania gdzieś i całość strony się powiększy, wtedy te sztuczki na nic się zdają, ale jeśli chcesz to baw się i tak smile.gif
ZaXaZ
@Xart, zapomniałeś dać backslasha przed minusem w pregu.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.