Amazon izdelki - scrape podatkov s PHP

Kako bi iz Amazon strani za določen izdelek izluščil podatke o:

Povprečni oceni (x stars out of 5)
Številu ocenjevalcev (customer reviews)

Sam sem uporabil tole kodo:

<?php
$source=file_get_contents("http://www.amazon.com/dp/B002FQJT3Q/");
preg_match("/title=\"(.*?) out of 5 stars/",$source, $result);
$par1=$result[1];
echo '<u>Rating on Amazon.com:    '.$par1.' out of 5 stars</u><br>';
?>

Stvar je delovala 1 dan, sedaj pa se izpiše napaka:

Warning: filegetcontents(http://www.amazon.com/dp/B002FQJT3Q/) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 503 Service Temporarily Unavailable

Blokada s strani Amazona?

18 odgovorov

Kako pogosto pa si posodabljal ta 1 dan ko ti je še delalo?

Probaj najprej ponovno iz drugega IP naslova. Če bo delalo potem je bilo to zaradi blokade, kar je tudi najverjetnejši razlog, da ne deluje.

Pa naredi eno cachiranje.
Ne moreš kar vedno, ko pride obiskovalec parsat sajta

OvcaX:
Pa naredi eno cachiranje.
Ne moreš kar vedno, ko pride obiskovalec parsat sajta

Ali jih shranjuj v bazo in z nekim cronjobom osvežuj na X časa, če hočeš ažurirane podatke.

@SlimDelux Probal sem ene 10 - 20 krat. Ko sem pisal kodo sem pač preverjal če in kako deluje izpis.

@OvcaX saj ideja je da bi skripta shranila vrednosti v MySql bazo in se osveževala samo 1 x dnevno. Samo zdaj mi pač ne deluje več.

@mtance ja to je v bistvu tudi moja ideja.

Skripto - Joomla PHP modul sem testiral na eni od mojih strani. Po mojem je IP ki ga zazna Amazon enak IP-ju kjer stran gostuje. Bom poizkusil še z druge strani ki je pri drugem ponudniku gostovanja. Če skripto zaženem na lokalnem pcju z XAMP-om mi namreč javi isto napako.

@jazzfunk Isto napako mi javi tudi če zaženem skripto s strani ki je pri drugem ponudniku gostovanja.

Najbrž je napaka v nastavitvah PHP-ja. Probi dobit podatke s PHP cURL.

Primer CURL

Probaj

$s = @fsockopen('www.amazon.com',80, $errno, $errstr);
if(!$s)
{
    echo "napaka: $errno : $errstr";
}
else
{
    echo "ok";
    fclose($s);
}

da vidiš, če je site sploh dosegljiv.

2

Tvoj primer, realiziran s cURL-om.

<?php
//$source=filegetcontents("http://www.amazon.com/dp/B002FQJT3Q/", true);

if (functionexists('curlinit')) {
// initialize a new curl resource
$ch = curlinit();
curl
setopt($ch, CURLOPTURL, 'http://www.amazon.com/dp/B002FQJT3Q/');
curl
setopt($ch, CURLOPTHEADER, 0);
curl
setopt($ch, CURLOPTRETURNTRANSFER, 1);
curl
setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0');

$source = curl_exec($ch);

curl_close($ch);
} else {
echo "Error, you don't have support for cURL";
}

preg_match("/title=\"(.*?) out of 5 stars/",$source, $result);
$par1=$result[1];
echo '<u>Rating on Amazon.com: '.$par1.' out of 5 stars</u><br>';
?>

5

@ SlimDelux
Če uporabim: www.amazon.com dobim: ok
Če pa uporabim http://www.amazon.com/dp/B002FQJT3Q mi vrne:

napaka: 0 : phpnetworkgetaddresses: getaddrinfo failed: Name or service not known

@mtance s cURL kot si ga napisal DELA !

V čem je štos?