2015-12-14 1 views
1

У меня возникла проблема с использованием XPath в Google App Engine для PHP.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. Я фактически подписался на их new API, но он не позволяет классифицировать ответы (например, верхние сайты электронной коммерции), как вы можете на веб-сайте, поэтому я прибегаю к XPath.

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

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

+0

Эй, я поддерживаю поддержку Google Cloud Platform, и я хотел бы сообщить вам, что что-то вроде этого сделает отличную запись в [Public Issue Tracker for App Engine] (https://code.google .com/р/Google-Appengine/вопросы/список). Просто разместите небольшой фрагмент кода, необходимый для того, чтобы эта проблема проявилась, мы воспроизведем ее и посмотрим, что мы можем сделать. – Nick

+0

Эй @ Ник, спасибо за отзыв. При дальнейшем рассмотрении я не думаю, что это ошибка Google App Engine; У меня была только эта проблема с Alexa Top Sites, поэтому возможно, что они могут блокировать домен appspot.com как часть общей настройки предотвращения веб-очистки. Приветствия. –