Guida introduttiva: Effettuare ricerche sul Web con l'API REST Ricerca Web Bing e C#
Avviso
Il 30 ottobre 2020 le API di Ricerca Bing spostate dai servizi di intelligenza artificiale di Azure ai servizi Ricerca Bing. Questa documentazione viene fornita solo per informazioni di riferimento. Per la documentazione aggiornata, vedere la documentazione dell'API di ricerca Bing. Per istruzioni sulla creazione di nuove risorse di Azure per la ricerca Bing, vedere Creare una risorsa Ricerca Bing tramite la Azure Marketplace.
Usare questa guida di avvio rapido per effettuare la prima chiamata all'API Ricerca Web Bing. Questa applicazione C# invia una richiesta di ricerca all'API e visualizza la risposta JSON. Anche se l'applicazione è scritta in C#, l'API è un servizio Web RESTful compatibile con la maggior parte dei linguaggi di programmazione.
Questo programma di esempio in questa guida di avvio rapido usa solo le classi .NET Core.
Prerequisiti
Prima di eseguire i passaggi illustrati in questa guida introduttiva, verificare di avere quanto segue:
- Windows: Visual Studio 2017 o versioni successive
- Linux/macOS: Visual Studio Code e .NET Core
- Una sottoscrizione gratuita di Azure
Creare una risorsa di Azure
Per iniziare a usare l'API Ricerca Web Bing, creare una delle seguenti risorse di Azure:
- disponibile tramite il portale di Azure fino a quando la risorsa non viene eliminata.
- Usare il piano tariffario gratuito per provare il servizio ed eseguire in un secondo momento l'aggiornamento a un livello a pagamento per la produzione.
- disponibile tramite il portale di Azure fino a quando la risorsa non viene eliminata.
- Usare la stessa chiave e l'endpoint per le applicazioni in più servizi di intelligenza artificiale di Azure.
Creare un progetto e dichiarare le dipendenze
Creare un progetto console in Visual Studio o VS Code. Usare il codice seguente per importare i tipi e gli spazi dei nomi necessari:
using System;
using System.Text;
using System.Net;
using System.IO;
using System.Collections.Generic;
Dichiarare uno spazio dei nomi e una classe per il programma
In questa guida introduttiva, la maggior parte del codice verrà inserita nella classe Program
. Iniziare creando lo spazio dei nomi BingSearchApiQuickstart
e la classe Program
nel progetto.
namespace BingSearchApisQuickstart
{
class Program
{
// The code in the following sections goes here.
}
}
Definire le variabili
Prima di continuare, è necessario impostare alcune variabili. Aggiungere questo codice alla classe Program
creata nella sezione precedente:
Per il valore di
uriBase
, è possibile usare l'endpoint globale nel codice seguente o l'endpoint del sottodominio personalizzato visualizzato nel portale di Azure per la risorsa.Verificare che il valore di
uriBase
sia valido e sostituire il valore diaccessKey
con una chiave di sottoscrizione del proprio account Azure.Se si vuole, personalizzare la query di ricerca sostituendo il valore di
searchTerm
.
// Enter a valid subscription key.
const string accessKey = "enter key here";
/*
* If you encounter unexpected authorization errors, double-check this value
* against the endpoint for your Bing Web search instance in your Azure
* dashboard.
*/
const string uriBase = "https://api.cognitive.microsoft.com/bing/v7.0/search";
const string searchTerm = "Microsoft Cognitive Services";
Dichiarare il metodo Main
Il metodo Main()
è obbligatorio ed è il primo metodo richiamato all'avvio del programma. In questa applicazione il metodo principale convalida accessKey
, effettua una richiesta e stampa la risposta.
Il metodo main()
dipende dai metodi che verranno creati nelle sezioni successive.
static void Main()
{
Console.OutputEncoding = System.Text.Encoding.UTF8;
if (accessKey.Length == 32)
{
Console.WriteLine("Searching the Web for: " + searchTerm);
SearchResult result = BingWebSearch(searchTerm);
Console.WriteLine("\nRelevant HTTP Headers:\n");
foreach (var header in result.relevantHeaders)
Console.WriteLine(header.Key + ": " + header.Value);
Console.WriteLine("\nJSON Response:\n");
Console.WriteLine(JsonPrettyPrint(result.jsonResult));
}
else
{
Console.WriteLine("Invalid Bing Search API subscription key!");
Console.WriteLine("Please paste yours into the source code.");
}
Console.Write("\nPress Enter to exit ");
Console.ReadLine();
}
Creare uno struct per i risultati della ricerca
Creare uno struct che restituisce i risultati della ricerca con le intestazioni pertinenti. Occorre chiamarlo quando si esegue una richiesta all'API Ricerca Web Bing per creare un oggetto risultato.
// Returns search results with headers.
struct SearchResult
{
public String jsonResult;
public Dictionary<String, String> relevantHeaders;
}
Creare una richiesta
Usare questo codice per creare la query di ricerca, eseguire la richiesta GET e gestire la risposta.
/// <summary>
/// Makes a request to the Bing Web Search API and returns data as a SearchResult.
/// </summary>
static SearchResult BingWebSearch(string searchQuery)
{
// Construct the search request URI.
var uriQuery = uriBase + "?q=" + Uri.EscapeDataString(searchQuery);
// Perform request and get a response.
WebRequest request = HttpWebRequest.Create(uriQuery);
request.Headers["Ocp-Apim-Subscription-Key"] = accessKey;
HttpWebResponse response = (HttpWebResponse)request.GetResponseAsync().Result;
string json = new StreamReader(response.GetResponseStream()).ReadToEnd();
// Create a result object.
var searchResult = new SearchResult()
{
jsonResult = json,
relevantHeaders = new Dictionary<String, String>()
};
// Extract Bing HTTP headers.
foreach (String header in response.Headers)
{
if (header.StartsWith("BingAPIs-") || header.StartsWith("X-MSEdge-"))
searchResult.relevantHeaders[header] = response.Headers[header];
}
return searchResult;
}
Formattare la risposta
Questo metodo formatta la risposta JSON, principalmente aggiungendo rientri e interruzioni di riga.
/// <summary>
/// Formats the JSON string by adding line breaks and indents.
/// </summary>
/// <param name="json">The raw JSON string.</param>
/// <returns>The formatted JSON string.</returns>
static string JsonPrettyPrint(string json)
{
if (string.IsNullOrEmpty(json))
return string.Empty;
json = json.Replace(Environment.NewLine, "").Replace("\t", "");
StringBuilder sb = new StringBuilder();
bool quote = false;
bool ignore = false;
char last = ' ';
int offset = 0;
int indentLength = 2;
foreach (char ch in json)
{
switch (ch)
{
case '"':
if (!ignore) quote = !quote;
break;
case '\\':
if (quote && last != '\\') ignore = true;
break;
}
if (quote)
{
sb.Append(ch);
if (last == '\\' && ignore) ignore = false;
}
else
{
switch (ch)
{
case '{':
case '[':
sb.Append(ch);
sb.Append(Environment.NewLine);
sb.Append(new string(' ', ++offset * indentLength));
break;
case ']':
case '}':
sb.Append(Environment.NewLine);
sb.Append(new string(' ', --offset * indentLength));
sb.Append(ch);
break;
case ',':
sb.Append(ch);
sb.Append(Environment.NewLine);
sb.Append(new string(' ', offset * indentLength));
break;
case ':':
sb.Append(ch);
sb.Append(' ');
break;
default:
if (quote || ch != ' ') sb.Append(ch);
break;
}
}
last = ch;
}
return sb.ToString().Trim();
}
Combinare tutti gli elementi
L'ultimo passaggio consiste nell'eseguire il codice. Se si vuole confrontare il proprio codice con quello fornito da Microsoft, vedere il codice di esempio su GitHub.
Risposta JSON di esempio
Le risposte dell'API Ricerca Web Bing vengono restituite in formato JSON. Questa risposta di esempio è stata troncata in modo da visualizzare un singolo risultato.
{
"_type": "SearchResponse",
"queryContext": {
"originalQuery": "Microsoft Cognitive Services"
},
"webPages": {
"webSearchUrl": "https://www.bing.com/search?q=Microsoft+cognitive+services",
"totalEstimatedMatches": 22300000,
"value": [
{
"id": "https://api.cognitive.microsoft.com/api/v7/#WebPages.0",
"name": "Microsoft Cognitive Services",
"url": "https://www.microsoft.com/cognitive-services",
"displayUrl": "https://www.microsoft.com/cognitive-services",
"snippet": "Knock down barriers between you and your ideas. Enable natural and contextual interaction with tools that augment users' experiences via the power of machine-based AI. Plug them in and bring your ideas to life.",
"deepLinks": [
{
"name": "Face",
"url": "https://azure.microsoft.com/services/cognitive-services/face/",
"snippet": "Add facial recognition to your applications to detect, identify, and verify faces using the Face service from Microsoft Azure. ... Cognitive Services; Face service;"
},
{
"name": "Text Analytics",
"url": "https://azure.microsoft.com/services/cognitive-services/text-analytics/",
"snippet": "Cognitive Services; Text Analytics API; Text Analytics API . Detect sentiment, ... you agree that Microsoft may store it and use it to improve Microsoft services, ..."
},
{
"name": "Computer Vision API",
"url": "https://azure.microsoft.com/products/ai-services?activetab=pivot:visiontab",
"snippet": "Extract the data you need from images using optical character recognition and image analytics with Computer Vision APIs from Microsoft Azure."
},
{
"name": "Emotion",
"url": "https://www.microsoft.com/cognitive-services/en-us/emotion-api",
"snippet": "Cognitive Services Emotion API - microsoft.com"
},
{
"name": "Bing Speech API",
"url": "https://azure.microsoft.com/services/cognitive-services/speech/",
"snippet": "Add speech recognition to your applications, including text to speech, with a speech API from Microsoft Azure. ... Cognitive Services; Bing Speech API;"
},
{
"name": "Get Started for Free",
"url": "https://azure.microsoft.com/services/cognitive-services/",
"snippet": "Add vision, speech, language, and knowledge capabilities to your applications using intelligence APIs and SDKs from Cognitive Services."
}
]
}
]
},
"relatedSearches": {
"id": "https://api.cognitive.microsoft.com/api/v7/#RelatedSearches",
"value": [
{
"text": "microsoft bot framework",
"displayText": "microsoft bot framework",
"webSearchUrl": "https://www.bing.com/search?q=microsoft+bot+framework"
},
{
"text": "microsoft cognitive services youtube",
"displayText": "microsoft cognitive services youtube",
"webSearchUrl": "https://www.bing.com/search?q=microsoft+cognitive+services+youtube"
},
{
"text": "microsoft cognitive services search api",
"displayText": "microsoft cognitive services search api",
"webSearchUrl": "https://www.bing.com/search?q=microsoft+cognitive+services+search+api"
},
{
"text": "microsoft cognitive services news",
"displayText": "microsoft cognitive services news",
"webSearchUrl": "https://www.bing.com/search?q=microsoft+cognitive+services+news"
},
{
"text": "ms cognitive service",
"displayText": "ms cognitive service",
"webSearchUrl": "https://www.bing.com/search?q=ms+cognitive+service"
},
{
"text": "microsoft cognitive services text analytics",
"displayText": "microsoft cognitive services text analytics",
"webSearchUrl": "https://www.bing.com/search?q=microsoft+cognitive+services+text+analytics"
},
{
"text": "microsoft cognitive services toolkit",
"displayText": "microsoft cognitive services toolkit",
"webSearchUrl": "https://www.bing.com/search?q=microsoft+cognitive+services+toolkit"
},
{
"text": "microsoft cognitive services api",
"displayText": "microsoft cognitive services api",
"webSearchUrl": "https://www.bing.com/search?q=microsoft+cognitive+services+api"
}
]
},
"rankingResponse": {
"mainline": {
"items": [
{
"answerType": "WebPages",
"resultIndex": 0,
"value": {
"id": "https://api.cognitive.microsoft.com/api/v7/#WebPages.0"
}
}
]
},
"sidebar": {
"items": [
{
"answerType": "RelatedSearches",
"value": {
"id": "https://api.cognitive.microsoft.com/api/v7/#RelatedSearches"
}
}
]
}
}
}