Bing API поиска и Azure

Я пытаюсь выполнить программный поиск в поисковой системе Microsoft Bing.

Вот мое понимание:

  • Был Bing Search API 2.0, который скоро будет заменен (1 августа 2012 г.)
  • Новый API известен как Windows Azure Marketplace.
  • Вы используете другой URL для этих двух.

В старом API (Bing Search API 2.0) вы указываете ключ (идентификатор приложения) в URL-адресе, и такой ключ будет использоваться для аутентификации запроса. Пока у вас есть ключ в качестве параметра в URL-адресе, вы можете получить результаты.

В новом API (Windows Azure Marketplace) вы не включаете ключ (ключ учетной записи) в URL-адрес. Вместо этого вы помещаете URL-адрес запроса, а затем сервер запрашивает ваши учетные данные. При использовании браузера появится всплывающее окно с запросом имени и пароля. Инструкция заключалась в том, чтобы оставить имя учетной записи пустым и вставить свой ключ в поле пароля.

Хорошо, я сделал все это, и я могу видеть результаты моего поиска в формате JSON на странице моего браузера.

Как это сделать программно в PHP? Я попытался найти документацию и образец кода из библиотеки Microsoft MSDN, но я либо искал не то место, либо там были крайне ограниченные ресурсы.

Кто-нибудь сможет рассказать мне, как вы делаете «введите ключ в поле пароля во всплывающем» в PHP, пожалуйста?

Заранее большое спасибо.

Related of "Bing API поиска и Azure"

Документация на новые услуги может стать немного интересной – особенно в кроличьих учениях MSDN. Наиболее ясное объяснение, которое я могу найти, находится в Руководстве по миграции с этой страницы поиска Bing Search . Лучшее из всего руководства по миграции имеет хороший простой пример в PHP к концу.

EDIT: Хорошо, руководство по миграции является отправной точкой, но это не лучший пример. Вот два метода, которые работают для меня (без посредников, межсетевых экранов и т. Д.):

Использование file_get_contents

Примечание: для этого необходимо включить функцию allow_url_fopen . Вы можете использовать ini_set (или изменить php.ini и т. Д.), Если это не так.

if (isset($_POST['submit'])) { // Replace this value with your account key $accountKey = 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA='; $ServiceRootURL = 'https://api.datamarket.azure.com/Bing/Search/'; $WebSearchURL = $ServiceRootURL . 'Web?$format=json&Query='; $cred = sprintf('Authorization: Basic %s', base64_encode($accountKey . ":" . $accountKey) ); $context = stream_context_create(array( 'http' => array( 'header' => $cred ) )); $request = $WebSearchURL . urlencode( '\'' . $_POST["searchText"] . '\''); $response = file_get_contents($request, 0, $context); $jsonobj = json_decode($response); echo('<ul ID="resultList">'); foreach($jsonobj->d->results as $value) { echo('<li class="resultlistitem"><a href="' . $value->URL . '">'.$value->Title.'</a>'); } echo("</ul>"); } 

Использование cURL

Если cURL установлен, что нормально в наши дни:

 <?php $query = $_POST['searchText']; $accountKey = 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'; $serviceRootURL = 'https://api.datamarket.azure.com/Bing/Search/'; $webSearchURL = $serviceRootURL . 'Web?$format=json&Query='; $request = $webSearchURL . "%27" . urlencode( "$query" ) . "%27"; $process = curl_init($request); curl_setopt($process, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($process, CURLOPT_USERPWD, "$accountKey:$accountKey"); curl_setopt($process, CURLOPT_TIMEOUT, 30); curl_setopt($process, CURLOPT_RETURNTRANSFER, TRUE); $response = curl_exec($process); $response = json_decode($response); echo "<ol>"; foreach( $response->d->results as $result ) { $url = $result->Url; $title = $result->Title; echo "<li><a href='$url'>$title</a></li>"; } echo "</ol>"; ?> 

[WTS] изменил SearchWeb на поиск.

Ничто из этого не помогло мне. Im работает MAMP, это может быть актуальным. Попробуйте следующее:


 $accountKey = '='; function sitesearch ($query, $site, $accountKey, $count=NULL){ // code from http://go.microsoft.com/fwlink/?LinkID=248077 $context = stream_context_create(array( 'http' => array( 'request_fulluri' => true, 'header' => "Authorization: Basic " . base64_encode($accountKey . ":" . $accountKey) ) )); $ServiceRootURL = 'https://api.datamarket.azure.com/Data.ashx/Bing/Search/v1/News?Market=%27en-GB%27&'; $WebSearchURL = $ServiceRootURL . '$format=json&Query='; $request = $WebSearchURL . urlencode("'$query'"); // note the extra single quotes if ($count) $request .= "&\$top=$count"; // note the dollar sign before $top--it's not a variable! return json_decode(file_get_contents($request, 0, $context), true); } $q = "query"; if ($q){ // get search results $articles = sitesearch ($q, $_SERVER['HTTP_HOST'], $accountKey , 100); foreach($articles['d']['results'] as $article) { echo " <p>".$article['Title'].'</p>'; echo " <p>".$article['Description'].'</p>'; echo " <p>".$article['Source'].'</p>'; echo " <p>".strtotime($article['Date']).'</p>'; } } 

ОТ: http://bililite.com/blog/2012/06/05/new-bing-api/

вы можете использовать следующий код, чтобы получить результаты поиска bing

 $acctKey = 'Your account key here'; $rootUri = 'https://api.datamarket.azure.com/Bing/Search'; $query = 'Kitchen'; $serviceOp ='Image'; $market ='en-us'; $query = urlencode("'$query'"); $market = urlencode("'$market'"); $requestUri = "$rootUri/$serviceOp?\$format=json&Query=$query&Market=$market"; $auth = base64_encode("$acctKey:$acctKey"); $data = array( 'http' => array( 'request_fulluri' => true, 'ignore_errors' => true, 'header' => "Authorization: Basic $auth" ) ); $context = stream_context_create($data); $response = file_get_contents($requestUri, 0, $context); $response=json_decode($response); echo "<pre>"; print_r($response); echo "</pre>"; 

http://www.guguncube.com/2771/python-using-the-bing-search-api

он содержит код python для запроса бинга, и это соответствует последнему новому API (Windows Azure Marketplace)

 # -*- coding: utf-8 -*- import urllib import urllib2 import json def main(): query = "sunshine" print bing_search(query, 'Web') print bing_search(query, 'Image') def bing_search(query, search_type): #search_type: Web, Image, News, Video key= 'YOUR_API_KEY' query = urllib.quote(query) # create credential for authentication user_agent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; FDM; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 1.1.4322)' credentials = (':%s' % key).encode('base64')[:-1] auth = 'Basic %s' % credentials url = 'https://api.datamarket.azure.com/Data.ashx/Bing/Search/'+search_type+'?Query=%27'+query+'%27&$top=5&$format=json' request = urllib2.Request(url) request.add_header('Authorization', auth) request.add_header('User-Agent', user_agent) request_opener = urllib2.build_opener() response = request_opener.open(request) response_data = response.read() json_result = json.loads(response_data) result_list = json_result['d']['results'] print result_list return result_list if __name__ == "__main__": main() 

Не забудьте поставить это:

 base64_encode("ignored:".$accountKey) 

вместо:

 base64_encode($accountKey . ":" . $accountKey) 

Вот рабочий пример API поиска, просто замените «XXXX» на ваш ключ доступа. Даже я потратил немало времени на то, чтобы заставить его работать с использованием cURL, но он не срабатывал из-за «CURLOPT_SSL_VERIFYPEER» на локальном 🙁 – поэтому убедитесь, что ваши настройки cURL установлены правильно.

 $url = 'https://api.datamarket.azure.com/Bing/Search/Web?Query=%27xbox%27'; $process = curl_init($url); curl_setopt($process, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($process, CURLOPT_USERPWD, base64_encode("username:XXXX")); curl_setopt($process, CURLOPT_TIMEOUT, 30); curl_setopt($process, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($process, CURLOPT_SSL_VERIFYPEER, false); $response = curl_exec($process); # Deliver return $response; # Have a great day! curl_close($process); 

Ниже приведен пример вызова Bing / Azure API с использованием библиотеки Unirest .

 require_once '/path/to/unirest-php/lib/Unirest.php'; $accountKey = "xxx"; $searchResults = Unirest::get("https://api.datamarket.azure.com/Bing/Search/v1/Composite", array(), array( 'Query' => '%27Microsoft%27', 'Sources' => '%27web%2Bimage%2Bvideo%2Bnews%2Bspell%27', '$format' => 'json', ), $accountKey, $accountKey ); // Results are here: $objectArray = $searchResults->body->d->results; $rawJson = $searchResults->raw_body; 

Вы можете опустить параметр Source , указав его в URL-адресе: https://api.datamarket.azure.com/Bing/Search/v1/Web или https://api.datamarket.azure.com/Bing/Search/v1/Image

Примечание. Параметры в URL-адресе запроса чувствительны к регистру. Для Bing они начинаются с заглавной буквы.