2013-02-23 1 views
0

Когда я запускаю этот скрипт из cmd.exe [командной строки] на WAMP я получаю:Когда вы получаете доступ к OpenAmplify из QueryPath, мой HTTP-запрос терпит неудачу/время ожидания. Зачем?

Could not retrieve data from OpenAmplify.file_get_contents(http://portal 
tnx.openamplify.com/AmplifyWeb/AmplifyThis?apiKey=MY_API_KEY_GOES_HERE): failed to open stream: HTTP request failed! (C:\wamp\www\Learning_Query_Pa 
th\src\QueryPath\QueryPath.php: 4053) 

Когда я запускаю этот скрипт из локального хоста с помощью браузера Firefox [V 19,0] я получаю:

Fatal error: Maximum execution time of 30 seconds exceeded in C:\wamp\www\Learning_Query_Path\src\QueryPath\QueryPath.php on line 4525 

Вот сценарий я использовал:

<?php 

require 'src/QueryPath/QueryPath.php'; 

$url = 'http://portaltnx.openamplify.com/AmplifyWeb/AmplifyThis?'; 
$key = 'I_PUT_MY_API_KEY_HERE'; 
$text = 'I_PUT_TEXT_HERE'; 

$params = array(
    'apiKey' => $key, 
); 

$url .= http_build_query($params); 

$options = array(
    'http' => array(
    'method' => 'POST', 
    'user_agent' => 'QueryPath/2.0', 
    'header' => 'Content-type: application/x-www-form-url-encoded', 
    'content' => http_build_query(array('inputText' => $text)), 
), 
); 

$context = stream_context_create($options); 
try { 
    $qp = qp($url, NULL, array('context' => $context)); 
} 
catch (Exception $e) { 
    print "Could not retrieve data from OpenAmplify." . $e->getMessage(); 
    exit; 
} 

    $qp->find('ProperNouns>TopicResult>Topic>Name')->slice(0, 20); 


$out = qp(QueryPath::HTML_STUB, 'body')->append('<ul/>')->find('ul'); 


foreach ($qp as $name) { 
    $out->append('<li>' . $name->text() . '</li>'); 
} 

$out->writeHTML(); 


?> 

Как я могу сделать эту работу?

P.S. Open Amplify - это веб-сервис, который берет текст и после его анализа возвращает много интересного. Я очень заинтересован в том, чтобы сделать эту работу и большим поклонником QueryPath, поэтому меня интересуют только предложения о том, как заставить ее работать с QueryPath!

ответ

0

Чтобы увеличить тайм-аут, вы можете использовать пару «имя/значение» тайм-аута внутри опций «http». Например. поставить его под здесь:

 
'content' => ... 
'timeout' => 120.0

(Справка: http://www.php.net/manual/en/context.http.php)

Мое предположение, однако, заключается в том, что еще что-то неладно. Вы можете использовать file_get_contents() вместо qp(), чтобы получить файл, а затем передать строку в QueryPath. По крайней мере, с этого момента вы будете отлаживать сетевую проблему, а не QueryPath.

Для работы с OpenAmplify мне также повезло с использованием CURL API, но это немного сложнее, чем встроенная оболочка потока PHP (Reference: http://www.php.net/manual/en/book.curl.php).

+0

Когда я заменяю [$ qp = qp ($ url, NULL, array ('context' => $ context));] с [$ qp1 = file_get_contents ($ url, false, $ context); $ qp = qp ($ qp1);] в приведенном выше коде и запустить скрипт из CLI, я получаю: [PHP Warning: file_get_contents (http://portaltnx.openamplify.com/AmplifyWeb/A mplifyThis? ApiKey = MY_API): не удалось открыть поток: HTTP запрос не выполнен! в C: \ wamp \ www \ Learning_Query_Path \ querypath1.php в строке 43 PHP Трассировка стека: PHP 1. {main}() C: \ wamp \ www \ Learning_Query_Path \ querypath1.php: 0 PHP 2. file_get_contents () C: \ wamp \ www \ Learning_Query_Path \ querypath1.php: 43] Продолжение следует ... – codepreneur

+0

[Call Stack: 0.0006 241600 1. {main}() C: \ wamp \ www \ Learning_Query_Path \ querypath1.p л.с.: 0 0,0149 1451840 2. file_get_contents() C: \ WAMP \ WWW \ Learning_Query_Path \ д uerypath1.php: 43 Untitled

    ] Любые предложения? Я вернусь к вам относительно CURL, потому что я нету узнал, что это еще не тот, что я пытался избежать, но я предполагаю, что его неизбежно , – codepreneur

    0

    попробуйте использовать этот URL. Это должно работать http://portaltnx20.openamplify.com/AmplifyWeb_v21/AmplifyThis

    +0

    Когда я попробовать этот адрес с кодом выше, я получаю: Не удалось получить данные из OpenAmplify.file_get_contents (http://portaltnx20.openamplify.com/AmplifyWeb_v21/AmplifyThis?apiKey=MY_API_KEY): не удалось открыть поток: Ошибка HTTP-запроса! HTTP/1.1 406 недопустимо (C: \ wamp \ www \ Learning_Query_Path \ src \ QueryPath \ QueryPath.php: 4053) – codepreneur

    +0

    Если я использую этот URL [Web_v21 изменен на Web_v20], я получаю: Не удалось получить данные из OpenAmplify .file_get_contents (http://portaltnx20.openamplify.com/AmplifyWeb_v20/AmplifyThis?apiKey=MY_API_KEY): не удалось открыть поток: HTTP-запрос не удался! HTTP/1.0 403 Forbidden (C: \ wamp \ www \ Learning_Query_Path \ src \ QueryPath \ QueryPath.php: 4053) – codepreneur