PHP5 и Microsoft Live Search 2.0
-
22-08-2019 - |
Вопрос
Я пытаюсь использовать Live Search 2.0, но даже простой пример не работает.У Microsoft есть пример кода только для версии 1.1, и они не предоставляют AppID для этой версии.
Вот что я пытаюсь:
<?php
$server = new SoapClient('http://soap.search.msn.com/webservices.asmx?wsdl');
class Search {
public $Request;
}
class SearchRequest {
public $AppID;
public $Query;
public $CultureInfo;
public $SafeSearch;
public $Flags;
public $Location;
public $Requests;
}
class SourceRequest {
public $Source;
public $Offset;
public $Count;
public $FileType;
public $SortBy;
public $ResultFields;
public $SearchTagFilters;
}
$searchRequest = new SourceRequest();
$searchRequest->Source = 'Web';
$searchRequest->Offset = 0;
$searchRequest->Count = 5;
$searchRequest->ResultFields = 'All SearchTagsArray';
$request = new SearchRequest();
$request->AppID = '...';
$request->Query = 'Bill Gates';
$request->CultureInfo = 'en-US';
$request->SafeSearch = 'Off';
$request->Flags = '';
$request->Requests = array($searchRequest);
$search = new Search();
$search->Request = $request;
$server->Search($search);
?>
AppID правильно указан в коде:Я просто удалил это отсюда.Я получаю следующую ошибку:
Array ( [0] => SearchResponse Search(Search $parameters) )
Fatal error: Uncaught SoapFault exception: [soapenv:Client] Client Error in /Users/thardas/Sites/vt9/widgets/ms_livesearch.php:41
Stack trace:
#0 [internal function]: SoapClient->__call('Search', Array)
#1 /Users/thardas/Sites/vt9/widgets/ms_livesearch.php(41): SoapClient->Search(Object(SearchRequest))
#2 /Users/thardas/Sites/vt9/index.php(23): include('/Users/thardas/...')
#3 {main} thrown in /Users/thardas/Sites/vt9/widgets/ms_livesearch.php on line 41
Решение
Вы можете начать с использования правильного URL-адреса API-интерфейса мыла для версии 2.0.Это снег "http://api.search.live.net/search.wsdl?AppID=YourAppId" взято из (http://msdn.microsoft.com/en-us/library/dd250965.aspx )
Вы также можете использовать новый API JSON с php.
$appid = 'Your app id';
$searchitem = 'PHP Manual';
$request = 'http://api.search.live.net/json.aspx?Appid=' . $appid . '&sources=web&query=' . urlencode( $searchitem);
$response = file_get_contents($request);
$jsonobj = json_decode($response);
foreach($jsonobj->SearchResponse->Web->Results as $value)
{
//$value->Url
//$value->Title
//$value->Description
}
И, наконец, есть XML API, который вы также можете найти по ссылке msdn, и его можно получить по существу так же, как и json, вам просто нужно его декодировать по-другому.
Другие советы
Пример кода API 2.0 находится в MSDN, но у нас пока нет полного образца кода PHP.Первый пример кода (очень похожий на тот, который вы уже получили в ответе) включен в сообщение блога. в блоге разработчиков Live Search
Возможно, вы знаете, что в настоящее время существуют некоторые проблемы с SOAP в PHP 5.2.6 - похоже, это влияет на службу Live Search как в 1.1, так и в 2.0.Самый простой обходной путь — использовать другой интерфейс (JSON или XML).