Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][HTML] jak wstawić fragment strony?
Forum PHP.pl > Forum > Przedszkole
komanch
Chce na moją stronę wstawić fragment innej strony, ale tylko fragment, w moim przypadku chcę samą tabelę ze strony z zewnątrz.
Użyłem:
Kod
<iframe name="demo" src="http://hockey.powerplaymanager.com/pl/liga.html?data=a-ow-iv-28" width="530" height="300" frameborder="0" marginwidth="0" marginheight="0" scrolling="auto"></iframe>

Co moge zrobić żeby wyświetlał mi się tylko taki fragment strony który chcę? czyli np samą tabelę.
peter13135
proponuje curl
komanch
Dzięki, mógłbys mi napisać jakąś przykładową linijkę z użyciem curl?
peter13135
prosze bardzo




  1. <?php
  2. $curl = curl_init();
  3. curl_setopt($curl, CURLOPT_URL, "http://www.google.pl/");
  4. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  5. $strona = curl_exec($curl);
  6. ?>





teraz $strona to źródło strony google.pl, za pomocą wyrażen regularnych możesz wyodrębnić np tabelkę ;]
komanch
Dzięki, ale chyba jednak to dla mnie za trudne sad.gif
Mam coś takiego, index.php:
  1.  
  2. <meta http-equiv="Content-Language" content="pl">
  3. <meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
  4. <title>Strona w budowie</title>
  5. </head>
  6.  
  7. <body bgcolor="#000000">
  8.  
  9. <p><font color="#CCCCCC" face="Verdana">Strona w budowie ........</font></p>
  10.  
  11.  
  12. <?php $curl = curl_init();
  13. curl_setopt($curl, CURLOPT_URL, "http://hockey.powerplaymanager.com/pl/liga.html?data=a-ow-iv-28");
  14. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  15. $strona = curl_exec($curl);
  16. ?>
  17.  
  18.  
  19.  
  20. </body>
  21.  
  22. </html>


i nie widzę efektu sad.gif dlaczego?
http://www.hdt.unl.pl/
webdevil
daj przed ?> :
echo $strona;

musisz wyświetlić to co pobrałeś.
erix
Cytat
musisz wyświetlić to co pobrałeś.

Albo wywalić:
  1. <?php
  2. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  3. ?>
peter13135
no ale on chce tylko fragment, a więc ma zmienną $strona, potem trzeba ją przelecieć przez wyrażenie regularne, ale niewiem jaki to ma być fragment strony
komanch
Cytat(peter13135 @ 16.02.2009, 22:53:27 ) *
no ale on chce tylko fragment, a więc ma zmienną $strona, potem trzeba ją przelecieć przez wyrażenie regularne, ale niewiem jaki to ma być fragment strony

Super, działa smile.gif
http://www.hdt.unl.pl/
a co do fragmentu, to interesuje mnie sama tabela, tak jak poniżej, jak ją wyłuskać? worriedsmiley.gif

peter13135
np preg match all '/<table>[[:print:]]</table>/'
komanch
coś takiego?
chyba źle wstawiłem bo nie działa worriedsmiley.gif
  1. <?php
  2. $curl = curl_init();
  3. curl_setopt($curl, CURLOPT_URL, "http://hockey.powerplaymanager.com/pl/liga.html?data=a-ow-iv-28");
  4. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  5. $strona = curl_exec($curl);
  6. echo $strona;
  7. preg match all '/<table>[[:print:]]</table>/';
  8. ?>
zegarek84
  1. <?php
  2. $curl = curl_init();
  3. curl_setopt($curl, CURLOPT_URL, "http://hockey.powerplaymanager.com/pl/liga.html?data=a-ow-iv-28");
  4. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  5. $strona = curl_exec($curl);
  6. $wyr='/<tr class=[^<]+?<td class=[^>]+?>([0-9]+?) </td>[^<]+?<td class='name'><img[^<]+?<a href=[^>]+?>([^<]+?)</a>(?: <img[^<]+?)?</td>[^<]+?<td class=[^>]+?> ([0-9]+?)</td>[^<]+?<td> ([0-9]+?)</td>[^<]+?<td class=[^>]+?> ([0-9]+?)</td>[^<]+?<td> ([0-9]+?)</td>[^<]+?<td class=[^>]+?> ([0-9]+?)</td>[^<]+?<td> ([0-9]+?)</td>[^<]+?<td class=[^>]+?> ([0-9]+?)</td>[^<]+?<td> ([^<]+?)</td>[^<]+?<td class=[^>]+?>([^<]+?)</td>/i';
  7. preg_match_all ($wyr,$strona,$matches);
  8. $ile_dopasowan=count($matches);
  9. $ile_razy=count($matches[1]);
  10. echo '<table style="text-align: right;">';
  11. for($i=0;$i<$ile_razy;++$i){echo '<tr>';
  12. for($j=1;$j<$ile_dopasowan;++$j){echo '<td>'.$matches[$j][$i].'</td>';}
  13. echo '</tr>';}
  14. echo '</table>';
peter13135
Cytat(komanch @ 18.02.2009, 17:33:51 ) *
coś takiego?
chyba źle wstawiłem bo nie działa worriedsmiley.gif
  1. <?php
  2. $curl = curl_init();
  3. curl_setopt($curl, CURLOPT_URL, &#092;"http://hockey.powerplaymanager.com/pl/liga.html?data=a-ow-iv-28\");
  4. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  5. $strona = curl_exec($curl);
  6. echo $strona;
  7. preg match all '/[[:print:]]/';
  8. ?>


oczywiście że źle, ja ci dałem tylko przykładową nazwę funkcji, oraz oraz ten ciąg znaków do wyodrębniania tabeli, poczytaj o funkcji preg_match_all to to łatwo skminisz se kod
komanch
Wstawiłem to co polecił kolega @zegarek84
efekt: http://www.hdt.unl.pl/ blink.gif
  1.  
  2. <meta http-equiv="Content-Language" content="pl">
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  4. <title>Strona w budowie</title>
  5. </head>
  6.  
  7. <body bgcolor="#000000">
  8. <p><font color="#CCCCCC" face="Verdana">Strona w budowie ........</font></p>
  9.  
  10. <?php $curl = curl_init();
  11. curl_setopt($curl, CURLOPT_URL, "http://hockey.powerplaymanager.com/pl/liga.html?data=a-ow-iv-28");
  12. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  13. $strona = curl_exec($curl);
  14.  
  15. $wyr='/<tr class=[^<]+?<td class=[^>]+?>([0-9]+?) <\/td>[^<]+?<td class=\'name'><img[^<]+?<a href=[^>]+?>([^<]+?)<\/a>(?:
  16. <img[^<]+?)?<\/td>[^<]+?<td class=[^>]+?> ([0-9]+?)<\/td>[^<]+?<td> ([0-9]+?)<\/td>[^<]+?<td class=[^>]+?> ([0-9]+?)<\/td>[^<]+?<td>
  17. ([0-9]+?)<\/td>[^<]+?<td class=[^>]+?> ([0-9]+?)<\/td>[^<]+?<td> ([0-9]+?)<\/td>[^<]+?<td class=[^>]+?> ([0-9]+?)<\/td>[^<]+?<td>
  18. ([^<]+?)<\/td>[^<]+?<td class=[^>]+?>([^<]+?)<\/td>/i';
  19.  
  20. preg_match_all ($wyr,$strona,$matches);
  21. $ile_dopasowan=count($matches);
  22. $ile_razy=count($matches[1]);
  23. echo '<table style="text-align: right;">';
  24. for($i=0;$i<$ile_razy;++$i){echo '<tr>';
  25. for($j=1;$j<$ile_dopasowan;++$j){echo '<td>'.$matches[$j][$i].'</td>';};
  26. echo '</tr>';};
  27. echo '</table>';
  28. ?>
  29.  
  30. </body>
  31.  
  32. </html>
zegarek84
a czy na localhost to działa u Ciebie?? - u mnie działa... jeśli działa na localhost to zrób buforowanie wyjścia...

ps wyniki zapisz do jakiejś bazy danych i aktualizuj ją okresowo i na strone z niej wrzucaj to będziesz miał duuużo szybciej - mogą to być pliki tekstowe...

EDIT
http://pl.wikibooks.org/wiki/PHP/Obsł...ia_wyj.C5.9Bcia
POCZĄTEK I KONIEC BUFORU TAK JAK NA TEJ STRONIE W PRZYKŁADZIE:
http://www.mnms.pl/problem-z-buforowaniem-...lready-sent-by/

cały skrypt się dłuuuugo wykonuje więc na 99% trzeba to zbuforować....

czyli:
Kod
<?php
ob_start();
?>

<html>
<head>
<meta http-equiv="Content-Language" content="pl">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Strona w budowie</title>
</head>

<body bgcolor="#000000">
<p><font color="#CCCCCC" face="Verdana">Strona w budowie ........</font></p>

<?php $curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "http://hockey.powerplaymanager.com/pl/liga.html?data=a-ow-iv-28");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$strona = curl_exec($curl);

$wyr='/<tr class=[^<]+?<td class=[^>]+?>([0-9]+?) <\/td>[^<]+?<td class=\'name\'><img[^<]+?<a href=[^>]+?>([^<]+?)<\/a>(?:
<img[^<]+?)?<\/td>[^<]+?<td class=[^>]+?> ([0-9]+?)<\/td>[^<]+?<td> ([0-9]+?)<\/td>[^<]+?<td class=[^>]+?> ([0-9]+?)<\/td>[^<]+?<td>
([0-9]+?)<\/td>[^<]+?<td class=[^>]+?> ([0-9]+?)<\/td>[^<]+?<td> ([0-9]+?)<\/td>[^<]+?<td class=[^>]+?> ([0-9]+?)<\/td>[^<]+?<td>
([^<]+?)<\/td>[^<]+?<td class=[^>]+?>([^<]+?)<\/td>/i';

preg_match_all ($wyr,$strona,$matches);
$ile_dopasowan=count($matches);
$ile_razy=count($matches[1]);
echo '<table style="text-align: right;">';
for($i=0;$i<$ile_razy;++$i){echo '<tr>';
for($j=1;$j<$ile_dopasowan;++$j){echo '<td>'.$matches[$j][$i].'</td>';};
echo '</tr>';};
echo '</table>';
?>

</body>
</html><?php
ob_end_flush();
?>
DREEMus
Cytat(komanch @ 18.02.2009, 16:33:51 ) *
  1. <?php
  2. preg match all '/<table>[[:print:]]</table>/';
  3. ?>

A od kiedy funkcje piszemy bez _ questionmark.gif
komanch
Cytat(zegarek84 @ 20.02.2009, 15:57:15 ) *
a czy na localhost to działa u Ciebie??


Niestety na localhost (krasnal) efekt taki jak na stronie http://www.hdt.unl.pl/
czyli nie działa sadsmiley02.gif

Czuję, że nie poradze sobie z tym, chciałbym spróbować inaczej jesli mozna.
Chciałem wrócić do iframe
Kod
<iframe name="demo" src="http://hockey.powerplaymanager.com/pl/liga.html?data=a-ow-iv-28" width="530" height="300" frameborder="0" marginwidth="0" marginheight="0" scrolling="auto"></iframe>

Teraz moje pytanie, czy można tak wpisać w kodzie, żeby belki przesuwające okienko (importowanej strony) w pionie i w poziomie ustawić od razu w takim położeniu, aby w okienku było widoczne to co chcę, np moja w/w tabela?
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.