czwartek, 12 sierpnia 2010

phpQuery

Jakiś czas temu wpadło mi w ręce fajne rozwiązanie - phpowy port jQuery. Długo by tłumaczyć jak i po co; wklejam swoje proste rozwiązanie następującego problemu. Dostałem listę słów kluczowych (prawie 4000 sztuk), dla których należało znaleźć odpowiedni link na google (w moim wypadky wystarczało, że pierwszy :)). Jak ktoś jest dobry, to sobie napisze skrypt z cUrlem, jak komuś sie nie chce to phpQuery daje proste rozwiązanie:

set_time_limit(0);

require_once('phpQuery/phpQuery.php');

$data = file('dane.csv');
$links = array();
$result = array();
$a = 0;

for($a = 0; $a < 200; $a++)
{
    $aLine = explode(";", $data[$a]);
    $keyword = substr($aLine[0], 1, -1);

    phpQuery::$ajaxAllowedHosts = array('http://www.google.pl');
    phpQuery::browserGet('http://www.google.pl', 'success1'); // wywolywana jest funkcja callbackowa succes1()

   sleep(rand(10,20)); // dzięki temu nie dostaniemy bana na Google'u
}

function success1($browser)
{
    global $keyword;
    $fraza = $keyword . ' site:plikus.pl';

    $browser->WebBrowser('success2') // po sukcesie wywoływana jest success2()
->find('input[name=q]')
->val($fraza)
->parents('form')
->submit();
}

function success2($browser)
{
global $links;
global $keyword;
global $data;
global $a;

$addr = $browser->find('div#ires a')->attr('href');

$wynik = fopen("wynik.txt", "a+");
if(!fwrite($wynik, trim($data[$a]) . ";" . $addr . "\r\n")) {
die ("Błąd zapisu");
}
fclose($wynik);

}

Mało eleganckie rozwiązanie z globalami, ale - działa :)

0 komentarzy:

Prześlij komentarz