Snabbstart: Sök på webben med hjälp av REST API för webbsökning i Bing och C#
Varning
Den 30 oktober 2020 flyttades Bing-sökning-API:erna från Azure AI-tjänster till Bing-sökning Services. Den här dokumentationen tillhandahålls endast som referens. Uppdaterad dokumentation finns i dokumentationen för API:et för Bing-sökning. Anvisningar om hur du skapar nya Azure-resurser för Bing-sökning finns i Skapa en Bing-sökning resurs via Azure Marketplace.
Använd den här snabbstarten för att göra ditt första anrop till API:et för webbsökning i Bing. Det här C#-programmet skickar en sökbegäran till API:et och visar JSON-svaret. Även om det här programmet är skrivet i C# är API:et en RESTful-webbtjänst som är kompatibel med de flesta programmeringsspråk.
Det här exempelprogrammet i den här snabbstarten använder endast .NET Core-klasser.
Förutsättningar
Här följer några saker som du behöver innan du kör den här snabbstarten:
- Windows: Visual Studio 2017 eller senare
- Linux/macOS: Visual Studio Code och .NET Core
- En kostnadsfri Azure-prenumeration
Skapa en Azure-resurs
Börja använda API:et för webbsökning i Bing genom att skapa någon av följande Azure-resurser:
- Tillgänglig via Azure Portal tills du tar bort resursen.
- Använd den kostnadsfria prisnivån för att prova tjänsten och uppgradera senare till en betald nivå för produktion.
- Tillgänglig via Azure Portal tills du tar bort resursen.
- Använd samma nyckel och slutpunkt för dina program i flera Azure AI-tjänster.
Skapa ett projekt och deklarera beroenden
Skapa ett konsolprojekt i Visual Studio eller VS Code. Använd följande kod för att importera de nödvändiga namnrymderna och typerna:
using System;
using System.Text;
using System.Net;
using System.IO;
using System.Collections.Generic;
Deklarera en namnrymd och en klass för programmet
I den här snabbstarten lägger vi det mesta av koden i klassen Program
. Börja med att skapa namnområdet BingSearchApiQuickstart
och klassen Program
i projektet.
namespace BingSearchApisQuickstart
{
class Program
{
// The code in the following sections goes here.
}
}
Definiera variabler
Några variabler måste anges innan vi kan fortsätta. Lägg till den här koden i klassen Program
som du skapade i föregående avsnitt:
För värdet
uriBase
kan du använda den globala slutpunkten i följande kod eller använda den anpassade underdomänslutpunkten som visas i Azure Portal för din resurs.Bekräfta att är
uriBase
giltigt och ersättaccessKey
värdet med en prenumerationsnyckel från ditt Azure-konto.Du kan också anpassa sökfrågan genom att ersätta värdet för
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";
Deklarera Main-metoden
Metoden Main()
krävs och är den första metoden som anropas när du startar programmet. I det här programmet validerar accessKey
huvudmetoden , gör en begäran och skriver ut svaret.
Metoden main()
är beroende av metoder som du skapar i nästa avsnitt.
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();
}
Skapa en struct för sökresultat
Skapa en struct som returnerar sökresultat med relevanta rubriker. Du anropar det när du skickar en begäran till API:et för webbsökning i Bing för att skapa ett resultatobjekt.
// Returns search results with headers.
struct SearchResult
{
public String jsonResult;
public Dictionary<String, String> relevantHeaders;
}
Skapa en begäran
Använd den här koden för att konstruera sökfrågan, utföra GET-begäran och hantera svaret.
/// <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;
}
Formatera svaret
Den här metoden formaterar JSON-svaret, främst genom att dra in och lägga till radbrytningar.
/// <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();
}
Färdigställa allt
Det sista steget är att köra koden. Om du vill jämföra din kod med vår kan du läsa exempelkoden på GitHub.
Exempel på JSON-svar
Svar från API för webbsökning i Bing returneras som JSON. Det här exempelsvaret har trunkerats för att visa ett enskilt resultat.
{
"_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"
}
}
]
}
}
}