Amazon izdelki - scrape podatkov s PHP
5 naročnikov
5 naročnikov
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
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.
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.
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.
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();
curlsetopt($ch, CURLOPTURL, 'http://www.amazon.com/dp/B002FQJT3Q/');
curlsetopt($ch, CURLOPTHEADER, 0);
curlsetopt($ch, CURLOPTRETURNTRANSFER, 1);
curlsetopt($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>';
?>
@ 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?