Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][cURL]preg_match_all i google
Forum PHP.pl > Forum > PHP
NeRoK
Witam,

Mam taki kod:
  1. <?php
  2. $ch = curl_init();
  3. curl_setopt($ch, CURLOPT_HEADER, false);
  4. curl_setopt($ch, CURLOPT_HTTPGET, true);
  5. curl_setopt($ch, CURLOPT_POST, false);
  6. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  7.  
  8. curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1");
  9. $strona = curl_exec($ch);
  10. curl_close($ch);
  11.  
  12. preg_match_all('@<h3 class=r><a href="(.*)" class=l>(.*)</a></h3>(.*)<div class="s">(.*)<br><cite>@iU', $strona, $wynik);
  13. print_r($wynik);
  14. ?>


Niestety w tablicy nie mam żadnych wyników... Podejrzewam, że "coś jest źle" z wyrażeniem regularnym. Jak mogę poprawić to wyrażenie, żeby działało jak należy?
wookieb
Kod
preg_match_all('@<h3 class=r><a href="(.*)" class=l>(.*)</a></h3>(.*)<div class="s">(.*)<br><cite>@iUs', $strona, $wynik);

Dodać modyfikator s

Po drugie gdzie ty masz w curlu ustawiony URL jaki ma byc wczytany?
NeRoK
Tak, tak. URL Jest oczywiście wczytany, ale wsadzanie go tutaj nie było istotne, bo na 100% jest dobry.
Niestety, bo dodaniu modyfikatora nadal nie zwraca poprawnych wyników... Właściwie nie zwraca nic...
  1. <?php
  2. Array ( [0] => Array ( ) [1] => Array ( ) [2] => Array ( ) [3] => Array ( ) [4] => Array ( ) )
  3. ?>

URL wygląda tak:
  1. <?php
  2. $url = 'http://www.google.pl/search?hl=pl&chs=wui&q='.urlencode($query);
  3. ?>
wookieb
  1. <?php
  2. preg_match_all('/<h3 class=r><a href="(.*?)" class=l(?:.*?)>(.*?)</a></h3>(.*?)<div class="s">(.*?)<br><cite>/is', $strona, $wynik);
  3. ?>
NeRoK
Niestety, nadal nie zwraca wyników... może coś źle z curlem?
wookieb
Wyrażenie na 100% działa bo sprawdzałem. Sprawdź zawartość $strona.
NeRoK
$strona jest... puste? ohmy.gif
Tylko teraz dlaczego nie czyta wyników z google?
wookieb
Pokaż cały kod od inicjacji curla aż do parsowania danych
NeRoK
  1. <?php
  2. $url = 'http://www.google.pl/search?hl=pl&chs=wui&q='.urlencode($zapytanie);
  3.    
  4.    
  5.    #CURL START
  6.    $ch = curl_init();
  7.    curl_setopt($ch, CURLOPT_HEADER, false);
  8.    curl_setopt($ch, CURLOPT_HTTPGET, true);
  9.    curl_setopt($ch, CURLOPT_POST, false);
  10.    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  11.    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1");
  12.    $strona = curl_exec($ch);
  13.    curl_close($ch);
  14.    echo $strona;
  15.    #CURL END
  16.    preg_match_all('/<h3 class=r><a href="(.*?)" class=l(?:.*?)>(.*?)</a></h3>(.*?)<div class="s">(.*?)<br><cite>/is', $strona, $wynik);
  17.    print_r($wynik);
  18. ?>


$zapytanie = $_REQUEST['zapytanie']; z pliku szukaj.php
wookieb
Pytaj się takiego
Cytat
Po drugie gdzie ty masz w curlu ustawiony URL jaki ma byc wczytany?

...
Kod
$ch = curl_init($url);

albo
Kod
curl_setopt($ch, CURLOPT_URL, $url);
NeRoK
A teraz to mi wstyd...
Serdecznie dzięki za pomoc
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.