XPath не возвращает результаты в Google App Engine для переполнения стека

У меня проблема с использованием XPath на Google App Engine для PHP.

Итак, у меня есть следующий код:

function getDataXpath($url_str, $xpath_exp_str)
{
$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTMLFile($url_str);
libxml_use_internal_errors(false);

$xpath = new DOMXpath($doc);
$elements = $xpath->query("".$xpath_exp_str."");

if (!is_null($elements)) {
return $elements;
}

return false;
}

А потом я просто запускаю его так, чтобы получить узлы:

getDataXpath($url_str, $xpath_exp_str);

Так что на моей локальной установке PHP (v 5.5.19), когда я запускаю следующее:

$url_str = 'http://www.alexa.com/topsites/category;0/Top/Shopping';
$xpath_exp_str = "//ul/li[@class='site-listing']/div/p/a";
$xpath_data = getDataXpath($url_str, $xpath_exp_str);
print_r($xpath_data);

Я получаю следующий результат:

DOMNodeList Object ( [length] => 25 );

и это правильно.

Однако, когда я запускаю тот же код в Google App Engine для PHP (v 5.5.26), я получаю следующее:

DOMNodeList Object ( [length] => 0 );

У кого-нибудь была эта проблема, и как вы ее исправили?

1

Решение

Похоже, что Amazon может блокировать программный доступ к страницам Alexa TopSites. Я на самом деле подписан на их новый API, но он не позволяет классифицировать ответы (например, топовые сайты электронной коммерции) так, как вы можете на сайте, поэтому я прибегаю к XPath.

Я попробовал тот же скрипт на некоторых других URL, и у меня не было никаких проблем.

В любом случае, он работает, когда я запускаю его локально (в браузере и в командной строке), поэтому мне просто придется пропустить Google App Engine на данный момент. Это нарушенный рабочий процесс, тем более что это было частью гораздо большей автоматизации, но на данный момент это не в моих руках.

1

Другие решения

Других решений пока нет …