2014-05-01 3 views
0

Я пытаюсь получить цены с игры и амазонки для личного проекта, но у меня есть 2 проблемы. Во-первых, у меня есть игра для работы, но она выбирает неправильную цену, а во-вторых, amazon не получает никаких результатов.file_get_contents не получает правильные результаты

Вот код, который я пытался получить.

$playdotcom = file_get_contents('http://www.play.com/Search.html?searchstring=".$getdata[getlist_item]."&searchsource=0&searchtype=r2alldvd'); 
$amazoncouk = file_get_contents('http://www.amazon.co.uk/gp/search?search-alias=dvd&keywords=".$getdata[getlist_item]."'); 

preg_match('#<span class="price">(.*)</span>#', $playdotcom, $pmatch); 
$newpricep = $pmatch[1]; 
preg_match('#used</a> &nbsp;from&nbsp; <strong>(.*)</strong>#', $playdotcom, $pmatch); 
$usedpricep = $pmatch[1]; 

preg_match('#<span class="bld lrg red"> (.*)</span>#', $amazoncouk, $amatch); 
$newpricea = $amatch[1]; 
preg_match('#<span class="price bld">(.*)</span> used#', $amazoncouk, $amatch); 
$usedpricea = $amatch[1]; 

затем повторяют результаты:

echo "Play :: New: $newpricep - Used: $usedpricep"; 
echo "Amazon :: New: $newpricea - Used: $usedpricea"; 

Точно так же вы знаете, что происходит на

$getdata[getlist_item] = "American Pie 5: The Naked Mile"; 

который работает нормально.

Любая идея, почему они не работают правильно?

EDIT: Я только что понял, что $getdata[getlist_item] в файле_get_contents не использует переменную, просто распечатывая переменную как есть ... почему она это делает ???

+2

* Sidenote * [Dont использовать регулярное выражение для HTML разбора] (http://stackoverflow.com/ вопросы/1732348/regex-match-open-tags-except-xhtml-self-contains-tags), используйте соответствующий парсер, например [DOMDocument] (http://www.php.net/manual/en/class.domdocument. php) или такой инструмент, как [simplehtmldom] (http://simplehtmldom.sourceforge.net/) –

+0

Возможный дубликат [Интерполяция (двойная кавычка) ассоциативных массивов в PHP] (http://stackoverflow.com/questions/4738850/interpolation-double-quoted-string-of-associative-arrays-in-php) –

ответ

1

Кавычки, которые вы используете, несовместимы! Оба кавычки открытия и закрытия должны быть одинаковыми.

Попробуйте это:

$playdotcom = file_get_contents("http://www.play.com/Search.html?searchstring=".$getdata['getlist_item']."&searchsource=0&searchtype=r2alldvd"); 
$amazoncouk = file_get_contents("http://www.amazon.co.uk/gp/search?search-alias=dvd&keywords=".$getdata['getlist_item']); 

Как это было "$ GetData [getlist_item]." считался частью строки, так как вы никогда не закрывали ни одну строчку, которую вы инициировали.

+0

Спасибо, теперь он работает отлично. – FoxyFish

+0

Рад, что я мог бы помочь :) –

+0

@FoxyFish Вы действительно должны помещать кавычки вокруг ключа массива, например '$ getdata ['getlist_item']'. Необязательные строковые литералы являются реликвией старых версий PHP. Кроме того, нет необходимости использовать конкатенацию вообще, вы можете сделать «http://www.play.com/Search.html?searchstring={$getdata['getlist_item']}&searchsource=0&searchtype=r2alldvd» ' –

1

Использование curl Функция с правильными заголовками. Ниже код будет читать любой веб-страницу, а затем использовать правильный анализатор DOMDocument или simpleHTMLDomParser инструмента для чтения цены от содержания HTML

$playdotcom = getPage("http://www.play.com/Search.html?searchstring=".$getdata['getlist_item']."&searchsource=0&searchtype=r2alldvd"); 
$amazoncouk = getPage("http://www.amazon.co.uk/gp/search?search-alias=dvd&keywords=".$getdata['getlist_item']); 

function getPage($url){ 
$user_agent='Mozilla/5.0 (Windows NT 6.1; rv:8.0) Gecko/20100101 Firefox/8.0'; 
$options = array(
    CURLOPT_CUSTOMREQUEST =>"GET", 
    CURLOPT_POST   =>false, 
    CURLOPT_USERAGENT  => $user_agent, 
    CURLOPT_RETURNTRANSFER => true, 
    CURLOPT_HEADER   => false, 
    CURLOPT_FOLLOWLOCATION => true, 
    CURLOPT_ENCODING  => 'gzip', 
    CURLOPT_AUTOREFERER => true, 
    CURLOPT_CONNECTTIMEOUT => 30000, 
    CURLOPT_TIMEOUT  => 30000, 
    CURLOPT_MAXREDIRS  => 10, 
); 
$ch = curl_init($url); 
curl_setopt_array($ch, $options); 
$content = curl_exec($ch); 
curl_close($ch); 
return $content; 
} 
+0

Введите ключи массива: '$ getdata [getlist_item]' должен быть '$ getdata ['getlist_item']'. –

+0

Спасибо @TomFenech – Manibharathi

Смежные вопросы