Не удалось получить цену

Я пытаюсь получить цену из интернет-магазина.

Здесь я использую этот код..

<?php
function getPrice($site){
    $html = file_get_contents($site);
    $dom = new DOMDocument();
    $dom->loadHTML($html);
    $contents = $dom->document.getElementsByTagName("span");        

    $price = "";
    for($i = 0; $i < $contents->length; $i++){
        $content= $contents->item($i);
        if($content->getAttribute('class') == "fk-font-verybig pprice vmiddle fk-bold"){
            $price = $content->getAttribute('value');
        }
    }
    echo $price;
}

$website = "http://www.flipkart.com/sogo-ss-5365-750-w-pop-up-toaster/p/itmdz3hgfjzgfp4v?pid=PUTDYWT2UHPCDCG8&offer=DOTDOnPopUpToaster_Sep2.&icmpid=hp_dotd_3_DOTDOnPopUpToaster_Sep2.";

getPrice($website);


?>

мой скрипт возвращает ошибку

Предупреждение: DOMDocument::loadHTML(): неожиданный конечный тег: span в Entity, строка: 261 в E:\Local server\htdocs\store\scripts\getprice.php в строке 5

Warning: DOMDocument::loadHTML(): htmlParseEntityRef: no name in Entity, line: 293 in E:\Local server\htdocs\store\scripts\getprice.php on line 5

...................................................................

Warning: DOMDocument::loadHTML(): htmlParseEntityRef: expecting ';' in Entity, line: 6160 in E:\Local server\htdocs\store\scripts\getprice.php on line 5

Notice: Undefined property: DOMDocument::$document in E:\Local server\htdocs\store\scripts\getprice.php on line 6

Fatal error: Call to undefined function getElementsByTagName() in E:\Local server\htdocs\store\scripts\getprice.php on line 6

Можно ли получать такую ​​​​цену, потому что магазин постоянно меняет цену своего продукта. Есть ли другой альтернативный способ сделать это?

Повлияет ли этот сценарий на производительность моего сервера, потому что каждый раз, когда пользователь посещает страницу продукта на моем веб-сайте, он будет получать цены из 5 разных магазинов для сравнения цен.


person user3811305    schedule 02.09.2014    source источник
comment
Если у вас есть официальное юридическое разрешение на получение цены с их веб-сайта, вам следует связаться с ними, чтобы получить информацию о ценах в формате xml или csv. И да, это влияет на загрузку страницы. Вы должны кэшировать цены (memcache, redis, sql).   -  person Daniel W.    schedule 02.09.2014
comment
Вы можете просто удалить точку и попробовать один раз DOTDOnPopUpToaster_Sep2.&icmpid=hp_dotd_3_DOTDOnPopUpToaster_Sep2.?   -  person Punitha Subramani    schedule 02.09.2014
comment
Думаем хранить цены в MySQL, чтобы сократить время повторной загрузки с сервера.   -  person user3811305    schedule 02.09.2014
comment
Пробовали удалить DOTDOnPopUpToaster_Sep2.&icmpid=hp_dotd_3_DOTDOnPopUpToaster_Sep2.? все еще получаю те же ошибки   -  person user3811305    schedule 02.09.2014
comment
Вам просто нужно отключить предупреждения, так как неверный HTML-код является распространенным явлением. См. этот ответ stackoverflow .com/questions/11819603/   -  person Steve    schedule 02.09.2014
comment
Будет ли тогда он обеспечивать выход?   -  person user3811305    schedule 02.09.2014
comment
Пытался удалить предупреждение, но получил последние две ошибки. Примечание: свойство Undefined: DOMDocument::$document в E:\Local server\htdocs\store\scripts\getprice.php в строке 7. Неустранимая ошибка: вызов неопределенной функции getElementsByTagName() в E: \Локальный сервер\htdocs\store\scripts\getprice.php в строке 7   -  person user3811305    schedule 02.09.2014


Ответы (1)


$contents = $dom->document.getElementsByTagName("span");

Ваш документ $dom-> не работает, потому что класс DOMDocument не имеет свойства с именем «документ».

Notice: Undefined property: DOMDocument::$document in E:\Local server\htdocs\store\scripts\getprice.php on line 6

Так что это может сработать

$contents = $dom->getElementsByTagName("span");

Вышеуказанное должно работать.

Я рекомендую перебирать $contents вместо echo.

Даже print_r поможет вам увидеть структуру узлов в $contents.

person MontrealDevOne    schedule 02.09.2014
comment
Спасибо, это помогло, но теперь я просто получаю предупреждения, но ничего не выводит - person user3811305; 02.09.2014
comment
Какие предупреждения? - person MontrealDevOne; 02.09.2014
comment
Предупреждение: DOMDocument::loadHTML(): Неожиданный конечный тег: span в Entity, строка: 261 в E:\Local server\htdocs\store\scripts\getprice.php, строка 6 Предупреждение: DOMDocument::loadHTML(): htmlParseEntityRef: нет имени в Entity, строка: 293 в E:\Local server\htdocs\store\scripts\getprice.php в строке 6 Предупреждение: DOMDocument::loadHTML(): htmlParseEntityRef: нет имени в Entity, строка: 293 в E:\ Локальный сервер\htdocs\store\scripts\getprice.php в строке 6.... Предупреждение: DOMDocument::loadHTML(): htmlParseEntityRef: ожидается ';' в Entity, строка: 6125 в E:\Local server\htdocs\store\scripts\getprice.php в строке 6 - person user3811305; 02.09.2014
comment
@user3811305 user3811305 отключите предупреждения, как я предлагал ранее - person Steve; 02.09.2014
comment
Я имею в виду, что мой скрипт ничего не возвращает. - person user3811305; 02.09.2014
comment
@user3811305 user3811305 ты знаешь какой-нибудь PHP? - person MontrealDevOne; 02.09.2014