PHP, cURL i google

Na początek po długiej przerwie lekko, szybko i przyjemnie, głównie żeby się przełamać i zacząć coś jednak pisać ;)

Tak więc podstawy cURL w PHP na przykładzie dość oklepanym, ale też użytecznym, czyli odczytanie podstawowych danych z google.

$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_URL, "http://www.google.pl");
$google = curl_exec($curl);
curl_close($curl);

Pierwsza linijka to otwarcie sesji cURL, następne 2 linijki to ustawienie opcji, pierwsza informuje, że będziemy chcieli odczytać zwrotną informację z danej strony, a druga ustawia jaki adres chcemy odwiedzić. 4. linijka to wykonanie połączenia i przypisanie zwrotnej informacji do zmiennej, gdybyśmy nie ustawili w 2. linijce opcji, że chcemy odczytać informację zwrotną wówczas 4. linijka wykonałaby tylko połączenie. Ostatnia linijka to zamknięcie sesji cURL.

Jak by nie patrzeć nic szczególnego, proste połączenie, teraz jednak lekka modyfikacja i stworzymy już w miarę przydatny skrypt, który będzie pobierał z google 2 chyba najczęściej sprawdzane informacje (przynajmniej przeze mnie ;)) czyli ilość podstron za indeksowanych przez google i pozycje naszej witryny na daną frazę.

$q = trim($_GET['q']);
$q = strip_tags($q);
$q = str_replace(" ", "+", $q);

$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_URL, "http://www.google.pl/search?q=".$q);
$google = curl_exec($curl);
curl_close($curl);

Zmienna q przyjmować będzie frazę, jaką wpisujemy normalnie w wyszukiwarce (u mnie dla prostoty bez formularzy zmienna pobierana metodą GET), usunięte tagi i następnie zamiana spacji na znak „+” jak to ma miejsce w google. Gdy już mamy zapytanie, tworzymy połączenie, jak w poprzednim przykładzie z odpowiednio zmodyfikowanym adresem. Teraz nie pozostaje nam już nic innego jak przetworzyć tekst ze zmiennej google.

function ilePodstron($google) {
	$tmp = strpos($google, "resultStats") + 11;
	$start = strpos($google, " ", $tmp) + 1;
	$koniec = strpos($google, " ", $start);
	$wynik = substr($google, $start, $koniec - $start);
	$wynik = str_replace(",", "", $wynik);
	return $wynik;
}

Powyższa funkcja wyświetli nam ilość podstron za indeksowanych na daną frazę, 2. linia sprawdza pozycję wystąpienia ciągu „resultStats”, po którym następuje wypisanie ilość wyników w google, następnie szukamy pierwszej spacji po tym ciągu (dokładne określenie miejsca w którym zaczyna się liczba), potem wyszukanie kolejnej spacji (miejsce gdzie kończy się liczba ;)), 5. linia to już pobranie ze zmiennej google tylko fragmentu zawierającego liczbę, później jeszcze usuwam zbędny przecinek i zwracam wynik, prawda że proste ;) (co do informacji, ile mamy za indeksowanych podstron naszej konkretnej witryny frazę należy zmodyfikować do postaci „site:adres_strony”)
Teraz troszkę trudniejsza funkcja, czyli sprawdzenie miejsca naszej witryny w google pod daną frazą.

function ktoraPozycja($google) {
	$s = trim($_GET['s']);
	$s = strip_tags($s);
	$s = strtolower($s);
	if(!$s)
		return;
	$start = 0;
	$wynik = 1;
	while(true) {
		$start = strpos($google, "<cite>", $start);
		if($start === false)
			return;
		$start += 6;
		$koniec = strpos($google, "</cite>", $start);
		$strona = strip_tags(strtolower(substr($google, $start, $koniec - $start)));
		if(strpos($strona, $s) !== false)
			return $wynik;
		$wynik++;
	}
}

Jak wcześniej, tak i teraz dla prostoty adres interesującej nas strony pobieram metodą GET do zmiennej s. Aby nie mieć problemów później, to od razu zmieniam sobie adres na małe litery (4. linia), później sprawdzenie, czy w ogóle chce się sprawdzać stronę (czy w adresie jest zmienna s ;)). Teraz już najważniejsza część, czyli pętla, która wykonuje się, do puki w zmiennej google znajdujemy ciąg „<cite>” (w tych tagach google umieszcza adresy kolejnych witryn), linie 10. i 11. to sprawdzają i jeżeli ciąg taki nie występuje wychodzi z funkcji. Linia 13. to ustawienie zmiennej start po ciągu „<cite>”, czyli w miejscu rozpoczęcia występowania adresu witryny, linia 14. to ustawienie końca występowania adresu strony, linia 15. to wycięcie adresu strony ze zmiennej google, zamienienie adresu na małe litery i usunięcie zbędnych tagów (czasem zdarza się tag <b>). 16. linia sprawdza czy pobrany przed chwilą adres pasuje do tego jaki szukamy i jeżeli tak, to zwraca pozycję naszej strony i kończy działanie funkcji.

No to by było na tyle po powrocie ;)

A i jeżeli by ktoś nie zauważył, zaszła też zmiana w adresie bloga ;)

27 września 2010 | PHP

Jedna odpowiedź do wpisu “PHP, cURL i google”

  1. Robert napisał(a):

    Proste obejście wpływu stron addwords na wynik pozycji naszej strony:

    function ileplatnych($google){
    $ile = 0;
    for($i=1;$i<5;$i++){
    if(strpos($google, 'id=pa'.$i) !== false)
    $ile++;
    else{
    return $ile;
    break;
    }
    }
    }

    potem wstawiamy do funkcji ktoraPozycja():

    $ile_pl = ileplatnych($google); (linijka 2)

    oraz podmieniamy:

    return $wynik; na return $wynik-$ile_pl;

Zostaw odpowiedź