Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Wyciąganie danych z obcej strony
Forum PHP.pl > Forum > Przedszkole
Matax
Witam. Mam pewien problem, otóż potrzebuję wyciągnąć pewne informacje z innej strony (chodzi mi tu dokładnie o pogodę), lecz nie wiem jak wyciągnąć informacje, które są mi potrzebne.

Doszłem do momentu gdzie mam file_get_contents i mam pod zmienną cały kod strony z pogodą, tylko jak teraz wyciągnąć potrzebne mi informacje?
  1. <?php
  2.  
  3. $fgc=file_get_contents("http://www.pogoda.wp.pl");
  4. echo $fgc;
  5. ?>


Gorąca prośba o pomoc leci do was. Próbowałem za pomocą substr() ale nie potafię wyciągnąć tych znaków.
bełdzio
poczytaj o wyrazeniach regularnych + preg_match( ) / preg_match_all( )
Foxx
Poszukaj też na forum, wyciąganie danych ze strony było 1000 razy a danych o pogodzie 1001 razy smile.gif
Matax
Czytałem, ale nie o taką pomoc mi chodziło. Nadal nie potrafię tego znaleźć ponieważ na stronie nie mam napisanego czegoś takiego :

Wtorek, Temperatura : ileśtam stopni Celsjusza

Jeśli miałbym tak jak wyżej to bym sobie raczej poradził, a tak to nie wiem czego mam szukać w kodzie. Przecież nie mogę szukać wartości "słonecznie" Bo jeśli będzie "pochmurnie" To nie znajdzie...
bełdzio
ale mozesz za to szukac tego co sie znajduje miedzy tagami <div class="opis">, <div class="temp"> etc
RafaelX
moze koles nie czai...
zerknij w kod źródłowy masz tam ten cały div co pod mapą jest:
  1. <div class="chmurka">
  2. <img src="http://i.wp.pl/a/i/pogoda2/weather_pict06/dsun4.png" title="Zmienne zachmurzenie - deszcz" alt="Zmienne zachmurzenie - deszcz" border="0" width="83" height="83"><br/>
  3. </div>
  4. <div class="opis">
  5.  
  6. Zmienne zachmurzenie i czasami deszcz. </div>
  7.  
  8. <div class="temp">
  9. temp. max: <strong>5 °C</strong><br/>temp. min: <strong>3 °C</strong>
  10. </div>
  11.  
  12. <div class="wiatr">
  13.  
  14. <img src="http://i.wp.pl/a/i/pogoda2/weather_pict06/wiatr_w.gif" alt="zachodni">Wiatr zachodni<br/><strong>18 km/h</strong>
  15. </div>
  16.  
  17. <div class="czynnik">
  18. Temp. odczuwalna (wiatr):<br/> <strong>-2.28°C</strong>
  19. </div>

wystarczy ze w wyrażenie regularne np preg_match_all()" title="Zobacz w manualu PHP" target="_manual wrzucisz ro co chcesz wyświetlić np wiatr to dajesz w wyrażeniu
Kod
<img src="http://i.wp.pl/a/i/pogoda2/weather(tu obojętne znaki) [poczytaj o wyrażeniach to będziesz wiedział jak się je oznacza]) '>(tu tez wszystkie znaki[będziesz je później wyświetlał])</div>
i koniec oczywiście musisz pamietać o znakach specjalnych, jak czegoś nie rozumiesz to pisz jaśniej, bo nie wiadomo czy wiesz czy nie....
roobik
Witam!
Odświeżę nieco temat. Chodzi o rozmiar obrazka - za nic w świecie nie mogę go pomniejszyć - próbuję na kilka sposobów, ale wyskakują mi wszystkie informacje o pogodzie (i to na kilka dni, co może się przydać winksmiley.jpg ).
Moim zdaniem to jest ten kawałek:
//edit: zmiana kodu na inny
Bardzo proszę o pomoc.... początkuję w wyrażeniach regularnych...
erix
A którego kodu używasz...?
roobik
Zmieniłem parę rzeczy, by zarówno pobieranie jak i wyświetlanie było bardziej czytelne. Niestety, nie pokazuje mi się teraz ani temperatura, ani "chmurka"... sad.gif Pomóżcie plis... gdzie mam błąd?
Oto prawie (bo jeszcze nieskończony) pełny kod:
  1. <?
  2. //$miasto = $_SERVER['argv'][1];
  3. $miasto = 1201305;
  4. $x = $_SERVER['argv'][2];
  5.  
  6. $d = (int)$x - 1;
  7. if ($d > 3)
  8.    {
  9.    $d = (int) 2;
  10.    }
  11.  
  12. $site = file_get_contents("http://pogoda.wp.pl/mi.html?mid=".$miasto);
  13. $site = preg_replace("/(<div class=\"box3Hd\">Godz.</div>.*)/s", "", $site);
  14.  
  15. // ikonka
  16.  
  17. preg_match('/<div class="chmurka">
  18.            <img src=\"http://i.wp.pl/a/i/pogoda2/weather_pict06/([^.]*).png\" title/',$site,$icon);
  19.  
  20.  
  21. // prognoza
  22. $site = strip_tags($site, '<div><br>');
  23.  
  24. // pogoda dzis
  25. preg_match('/<div style=\"float:right;[^>]*>([^<]*)</div>/',$site,$data1); //data
  26.  
  27. preg_match('/<div class=\"opis\">([^<]*)</div>/',$site,$prog1); //prognoza dzis
  28.  
  29. preg_match('/<div class=\"temp\">([^<]*<br>[^<]*)</div>/',$site,$temp1); //temp dzis
  30.        
  31. preg_match('/<div class=\"wiatr\">([^<]*<br>[^<]*)</div>/',$site,$wiatr1); //wiatr dzis
  32.  
  33. preg_match('/<div class=\"czynnik\">([^<]*<br>[^<]*)</div>/',$site,$czynnik1); //czynnik dzis
  34.  
  35. preg_match('/<div class=\"slonce\">([^<]*)</div>/',$site,$slonce1); //slonce dzis
  36.  
  37.  
  38.  
  39. preg_match('/<div class=\"chmurka\">([^<]*)width/',$site,$icon1); //obrazek dzis!!!!!!!!
  40.  
  41.        
  42. $data1[1] = iconv("iso-8859-2", "windows-1250", $data1[1]);
  43. $prog1[1] = iconv("iso-8859-2", "windows-1250", $prog1[1]);
  44. $temp1[1] = iconv("iso-8859-2", "windows-1250", $temp1[1]);
  45. $wiatr1[1] = iconv("iso-8859-2", "windows-1250", $wiatr1[1]);
  46. $czynnik1[1] = iconv("iso-8859-2", "windows-1250", $czynnik1[1]);
  47. $slonce1[1] = iconv("iso-8859-2", "windows-1250", $slonce1[1]);
  48. $temp1[1]= str_replace("&nbsp;","",$temp1[1]);
  49. $temp1[1]= str_replace("<br>","\n",$temp1[1]);
  50. $wiatr1[1]= str_replace("<br>"," ",$wiatr1[1]);
  51. $czynnik1[1]= str_replace("<br>","",$czynnik1[1]);
  52. $slonce1[1]= str_replace("    ","",$slonce1[1]);
  53.  
  54.  
  55. // pogoda jutro
  56. preg_match_all('/<div class=\"box3Hd\">([^<]*)</div>/',$site,$data2); //data jutro
  57.  
  58. preg_match_all('/<div style=\"font-size:10px\">([^<]*)</div>/',$site,$prog2); //prognoza jutro
  59.  
  60. preg_match_all('/<div style=\"padding:5px;\"><br class=\"b5\"/>(temp[^<]*<br />[^<]*)</div>/',$site,$temp2); //temp jutro
  61.  
  62. preg_match_all('/<div style=\"padding:5px; padding-top:0;\">(wiatr:[^<]*)</div>/',$site,$wiatr2); //wiatr jutro
  63.  
  64. for( $i = 0; $i <= $d; $i++ ){
  65. $data2[1][$i] = iconv("iso-8859-2", "windows-1250", $data2[1][$i]);
  66. $prog2[1][$i] = iconv("iso-8859-2", "windows-1250", $prog2[1][$i]);
  67. $temp2[1][$i] = iconv("iso-8859-2", "windows-1250", $temp2[1][$i]);
  68. $wiatr2[1][$i] = iconv("iso-8859-2", "windows-1250", $wiatr2[1][$i]);
  69. $temp2[1][$i]= str_replace("&nbsp;","",$temp2[1][$i]);
  70. $temp2[1][$i]= str_replace("<br />","\n",$temp2[1][$i]);
  71. }
  72.  
  73.  
  74. // DZIS
  75. echo trim($data1[1]).":";            // dzien i data
  76. echo "\n".trim($prog1[1]);        // prognoza
  77. echo "\n".trim($temp1[1]);        // temp.max i temp.min
  78. echo "\n".trim($wiatr1[1]);        // predkosc i kierunek wiatru
  79. echo "\n".trim($czynnik1[1]);        // czynnik chlodzacy wiatru
  80. echo "\n".trim($slonce1[1]);        // wschod i zachod slonca
  81. echo "\n".$icon1[1];        // chmurka
  82.  
  83.  
  84.  
  85. // JUTRO, POJUTRZE, POPOJUTRZE
  86. for( $i = 0; $i <= $d; $i++ )
  87. {
  88. echo "\n";
  89. echo "\n".trim($data2[1][$i]).":";        // dzien
  90. echo "\n".trim($prog2[1][$i]);            // prognoza
  91. echo "\n".trim($temp2[1][$i]);            // temp.max i temp.min
  92. echo "\n".trim($wiatr2[1][$i]);            // predkosc i kierunek wiatru
  93. }
  94. echo "\n"
  95.  
  96. // ikonka
  97.  
  98. if ($icon[1] == dsun1){
  99. echo '<img src="gfx/dsun1.png" height=15 border=0>';
  100. //echo '123';
  101. }
  102. elseif ($icon[1] == dsun3){
  103. echo '<img src="gfx/dsun3.png" height=15 border=0>';
  104. }
  105. elseif ($icon[1] == dsun2){
  106. echo '<img src="gfx/dsun2.png" height=15 border=0>';
  107. }
  108. elseif ($icon[1] == dsun4){
  109. echo '<img src="gfx/dsun4.png" height=15 border=0>';
  110. }
  111. elseif ($icon[1] == dsun5){
  112. echo '<img src="gfx/dsun5.png" height=15 border=0>';
  113. }
  114. elseif ($icon[1] == dsun6){
  115. echo '<img src="gfx/dsun6.png" height=15 border=0>';
  116. }
  117. elseif ($icon[1] == dcloud1){
  118. echo '<img src="gfx/dcloud1.png" height=15 border=0>';
  119. }
  120. elseif ($icon[1] == dcloud5){
  121. echo '<img src="gfx/dcloud5.png" height=15 border=0>';
  122. }
  123. elseif ($icon[1] == dcloud2){
  124. echo '<img src="gfx/dcloud2.png" height=15 border=0>';
  125. }
  126. elseif ($icon[1] == dcloud3){
  127. echo '<img src="gfx/dcloud3.png" height=15 border=0>';
  128. }
  129. elseif ($icon[1] == dcloud4){
  130. echo '<img src="gfx/dcloud4.png" height=15 border=0>';
  131. }
  132. else {
  133. echo 'brak';
  134. }
  135. echo '<hr>'.$temp1[1].'';
  136. ?>
Wicepsik
Nie zrobiłeś średnika przy 96 linijce.

W preg_match zrób w każdym </div> na <\/div>


Po poprawkach u mnie coś takiego wyszło winksmiley.jpg

Kod
Czwartek, 18 czerwca 2009: Przewa�nie pochmurno ale bez opad�w. Wsch. s�o�ca: 04:36 Zach. s�o�ca: 21:10 brak


Czytaj błędy i poprawiaj je.
roobik
Dokładnie mam to samo smile.gif (błąd naprawiony)
Lecz wydaje mi się, ze źle zrobiłem "chmurkę", za którą odpowiada ta część:
  1. <?php
  2. preg_match('/<div class="chmurka">
  3.           <img src=\"http://i.wp.pl/a/i/pogoda2/weather_pict06/([^.]*).png\" title/',$site,$icon);
  4. ?>

czyli linia 12-14
Dziś dla wrocka jest chmurka "gfx/dsun3.png" wszystkie pliki mam na serwerze, lecz skrypt jej nie pokazuje sad.gif Podobnie jak z temperaturą min i max sad.gif
Wicepsik
  1. <?php
  2. preg_match('/<img src="http://i.wp.pl/a/i/pogoda2/weather_pict06/([a-zA-z0-9]+).png" title/',$site,$icon);
  3. ?>



Zamiast

  1. <?php
  2. if ($icon[1] == dsun1){
  3. echo '<img src="gfx/dsun1.png" height=15 border=0>';
  4. //echo '123';
  5. }
  6. elseif ($icon[1] == dsun3){
  7. echo '<img src="gfx/dsun3.png" height=15 border=0>';
  8. }
  9. elseif ($icon[1] == dsun2){
  10. echo '<img src="gfx/dsun2.png" height=15 border=0>';
  11. }
  12. elseif ($icon[1] == dsun4){
  13. echo '<img src="gfx/dsun4.png" height=15 border=0>';
  14. }
  15. elseif ($icon[1] == dsun5){
  16. echo '<img src="gfx/dsun5.png" height=15 border=0>';
  17. }
  18. elseif ($icon[1] == dsun6){
  19. echo '<img src="gfx/dsun6.png" height=15 border=0>';
  20. }
  21. elseif ($icon[1] == dcloud1){
  22. echo '<img src="gfx/dcloud1.png" height=15 border=0>';
  23. }
  24. elseif ($icon[1] == dcloud5){
  25. echo '<img src="gfx/dcloud5.png" height=15 border=0>';
  26. }
  27. elseif ($icon[1] == dcloud2){
  28. echo '<img src="gfx/dcloud2.png" height=15 border=0>';
  29. }
  30. elseif ($icon[1] == dcloud3){
  31. echo '<img src="gfx/dcloud3.png" height=15 border=0>';
  32. }
  33. elseif ($icon[1] == dcloud4){
  34. echo '<img src="gfx/dcloud4.png" height=15 border=0>';
  35. }else {
  36. echo 'brak';
  37. }
  38. ?>


To

  1. <?php
  2. if(!empty($icon[1])){
  3. echo '<img src="gfx/'.$icon[1].'.png" height=15 border=0>';
  4. }else{
  5. echo 'brak';
  6. }
  7. ?>


Moim zdaniem mniej kodu.
roobik
sad.gif Nie wiem czemu, ale po zmianie chmurki (kod dłuższy zamieniony na krótszy), wyskakuje Array (w źródle, a zamiast obrazka jest tylko "miejsce" na niego).
I z temperaturą jes tto samo... nie mam jej - czy u Ciebie jest?
Wicepsik
  1. <?php
  2. //$miasto = $_SERVER['argv'][1];
  3. $miasto = 1201305;
  4. $x = $_SERVER['argv'][2];
  5.  
  6. $d = (int)$x - 1;
  7. if ($d > 3)
  8.   {
  9.   $d = (int) 2;
  10.   }
  11.  
  12. $site = file_get_contents("http://pogoda.wp.pl/mi.html?mid=".$miasto);
  13. $site = preg_replace("/(<div class=\"box3Hd\">Godz.</div>.*)/s", "", $site);
  14.  
  15. // ikonka
  16.  
  17. preg_match('/http://i.wp.pl/a/i/pogoda2/weather_pict06/([a-zA-z0-9]+).png/',$site,$icon);
  18.  
  19.  
  20. // prognoza
  21. $site = strip_tags($site, '<div><br>');
  22.  
  23. // pogoda dzis
  24. preg_match('/<div style=\"float:right;[^>]*>([^<]*)</div> /',$site,$data1); //data
  25.  
  26. preg_match('/<div class=\"opis\">([^<]*)</div>/',$site,$prog1); //prognoza dzis
  27.  
  28. preg_match('/<div class=\"temp\">([^<]*<br>[^<]*)</div>/',$site,$temp1); //temp dzis
  29.      
  30. preg_match('/<div class=\"wiatr\">([^<]*<br>[^<]*)</div>/',$site,$wiatr1); //wiatr dzis
  31.  
  32. preg_match('/<div class=\"czynnik\">([^<]*<br>[^<]*)</div>/',$site,$czynnik1); //czynnik dzis
  33.  
  34. preg_match('/<div class=\"slonce\">([^<]*)</div>/',$site,$slonce1); //slonce dzis
  35.  
  36.  
  37.  
  38. preg_match('/<div class=\"chmurka\">([^<]*)width/',$site,$icon1); //obrazek dzis!!!!!!!!
  39.  
  40.      
  41. $data1[1] = iconv("iso-8859-2", "windows-1250", $data1[1]);
  42. $prog1[1] = iconv("iso-8859-2", "windows-1250", $prog1[1]);
  43. $temp1[1] = iconv("iso-8859-2", "windows-1250", $temp1[1]);
  44. $wiatr1[1] = iconv("iso-8859-2", "windows-1250", $wiatr1[1]);
  45. $czynnik1[1] = iconv("iso-8859-2", "windows-1250", $czynnik1[1]);
  46. $slonce1[1] = iconv("iso-8859-2", "windows-1250", $slonce1[1]);
  47. $temp1[1]= str_replace("&nbsp;","",$temp1[1]);
  48. $temp1[1]= str_replace("<br>","\n",$temp1[1]);
  49. $wiatr1[1]= str_replace("<br>"," ",$wiatr1[1]);
  50. $czynnik1[1]= str_replace("<br>","",$czynnik1[1]);
  51. $slonce1[1]= str_replace("    ","",$slonce1[1]);
  52.  
  53.  
  54. // pogoda jutro
  55. preg_match_all('/<div class=\"box3Hd\">([^<]*)</div>/',$site,$data2); //data jutro
  56.  
  57. preg_match_all('/<div style=\"font-size:10px\">([^<]*)</div>/',$site,$prog2); //prognoza jutro
  58.  
  59. preg_match_all('/<div style=\"padding:5px;\"><br class=\"b5\"/>(temp[^<]*<br />[^<]*)</div>/',$site,$temp2); //temp jutro
  60.  
  61. preg_match_all('/<div style=\"padding:5px; padding-top:0;\">(wiatr:[^<]*)</div>/',$site,$wiatr2); //wiatr jutro
  62.  
  63. for( $i = 0; $i <= $d; $i++ ){
  64. $data2[1][$i] = iconv("iso-8859-2", "windows-1250", $data2[1][$i]);
  65. $prog2[1][$i] = iconv("iso-8859-2", "windows-1250", $prog2[1][$i]);
  66. $temp2[1][$i] = iconv("iso-8859-2", "windows-1250", $temp2[1][$i]);
  67. $wiatr2[1][$i] = iconv("iso-8859-2", "windows-1250", $wiatr2[1][$i]);
  68. $temp2[1][$i]= str_replace("&nbsp;","",$temp2[1][$i]);
  69. $temp2[1][$i]= str_replace("<br />","\n",$temp2[1][$i]);
  70. }
  71.  
  72.  
  73. // DZIS
  74. echo trim($data1[1]).":";            // dzien i data
  75. echo "\n".trim($prog1[1]);        // prognoza
  76. echo "\n".trim($temp1[1]);        // temp.max i temp.min
  77. echo "\n".trim($wiatr1[1]);        // predkosc i kierunek wiatru
  78. echo "\n".trim($czynnik1[1]);        // czynnik chlodzacy wiatru
  79. echo "\n".trim($slonce1[1]);        // wschod i zachod slonca
  80. echo "\n".$icon1[1];        // chmurka
  81.  
  82.  
  83.  
  84. // JUTRO, POJUTRZE, POPOJUTRZE
  85. for( $i = 0; $i <= $d; $i++ )
  86. {
  87. echo "\n";
  88. echo "\n".trim($data2[1][$i]).":";        // dzien
  89. echo "\n".trim($prog2[1][$i]);            // prognoza
  90. echo "\n".trim($temp2[1][$i]);            // temp.max i temp.min
  91. echo "\n".trim($wiatr2[1][$i]);            // predkosc i kierunek wiatru
  92. }
  93. echo "\n";
  94.  
  95. // ikonka
  96.  
  97. if(!empty($icon[1])){
  98. echo '<img src="gfx/'.$icon[1].'.png" height=15 border=0>';
  99. }else{
  100. echo 'brak';
  101. }
  102. echo '<hr>'.$temp1[1].'';
  103. ?>
roobik
Nie chcę zostać odebrany źle, ale nadal "chmurka" się nie pokazuje jak i brak temperatury sad.gif
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.