services microsoft cognitive php search bing

php - microsoft - API de búsqueda Bing y Azure



cognitive services azure (7)

Aquí está el ejemplo de cómo llamar a Bing / Azure API usando la biblioteca de 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;

Puede omitir el parámetro Source definiéndolo en la URL: https://api.datamarket.azure.com/Bing/Search/v1/Web o https://api.datamarket.azure.com/Bing/Search/v1/Image

Nota: los parámetros en la URL de solicitud distinguen entre mayúsculas y minúsculas. Para Bing comienzan con una letra mayúscula.

Estoy tratando de realizar programáticamente una búsqueda en el motor de búsqueda de Microsoft Bing.

Aquí está mi entendimiento:

  • Hubo una Bing Search API 2.0, que será reemplazada pronto (1 de agosto de 2012)
  • La nueva API se conoce como Windows Azure Marketplace.
  • Usas diferentes URL para los dos.

En la API anterior (Bing Search API 2.0) , especifica una clave (ID de aplicación) en la URL, y dicha clave se usará para autenticar la solicitud. Siempre que tenga la clave como parámetro en la URL, puede obtener los resultados.

En la nueva API (Windows Azure Marketplace) , NO incluye la clave (clave de cuenta) en la URL. En cambio, pones una URL de consulta, luego el servidor te pedirá tus credenciales. Cuando use un navegador, aparecerá una ventana emergente que le pedirá un nombre / contraseña de a / c. La instrucción era dejar el nombre de la cuenta en blanco e insertar su clave en el campo de la contraseña.

Bien, he hecho todo eso y puedo ver los resultados formateados en JSON de mi búsqueda en la página de mi navegador.

¿Cómo hago esto programáticamente en PHP? Traté de buscar la documentación y el código de muestra de la biblioteca de Microsoft MSDN, pero estaba buscando en el lugar equivocado, o hay recursos extremadamente limitados allí.

¿Alguien podría decirme cómo se hace la parte "ingrese la clave en el campo de contraseña en la ventana emergente" en PHP, por favor?

Muchas gracias por adelantado.


Aquí hay un ejemplo de trabajo de la API de búsqueda, simplemente reemplace "XXXX" con su clave de acceso. Incluso perdí bastantes horas intentando hacer que funcionara usando cURL pero estaba fallando debido a "CURLOPT_SSL_VERIFYPEER" en local :( - así que asegúrese de que sus opcionales de cURL estén configurados correctamente.

$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);


La documentación para nuevos servicios puede ser un poco interesante, especialmente en el conejito de MSDN. La explicación más clara que puedo encontrar está en la Guía de migración de esta página de Bing Search API . Lo mejor de todo es que la guía de migración tiene un buen ejemplo simple en PHP hacia el final.

EDITAR: De acuerdo, la guía de migración es un punto de partida, pero no es el mejor ejemplo. Aquí hay dos métodos que funcionan para mí (sin proxy, firewalls, etc. interfiriendo):

Usando file_get_contents

Nota: '' allow_url_fopen '' debe estar habilitado para que esto funcione. Puedes usar ini_set (o cambiar php.ini etc.) si no es así.

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>"); }

Usando cURL

Si está instalado cURL, lo cual es normal en estos días:

<?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] cambió SearchWeb a Búsqueda.


Ninguno de los anteriores funcionó para mí. Estoy ejecutando MAMP, esto puede ser relevante. Pruebe lo siguiente:

$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>''; } }

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


No te olvides de poner esto:

base64_encode("ignored:".$accountKey)

en lugar de:

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


puedes usar el código de abajo para obtener resultados de búsqueda

$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

contiene código python para consultar el bing y esto está de acuerdo con la última nueva 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()