Schnellstart: Suchen im Internet unter Verwendung von Bing-Websuche-REST-API und GoQuickstart: Search the web using the Bing Web Search REST API and Go

In dieser Schnellstartanleitung erfahren Sie, wie Sie die Bing-Websuche-API erstmals aufrufen und die JSON-Antwort empfangen.Use this quickstart to make your first call to the Bing Web Search API and receive the JSON response. Diese Go-Anwendung sendet eine Suchanforderung an die API und zeigt die Antwort an.This Go application sends a search request to the API, and shows the response. Diese Anwendung ist zwar in Go geschrieben, die API ist aber ein RESTful-Webdienst, der mit den meisten Programmiersprachen kompatibel ist.While this application is written in Go, the API is a RESTful Web service compatible with most programming languages.

VoraussetzungenPrerequisites

Im Folgenden sind die Tools aufgeführt, die Sie zum Ausführen dieser Schnellstartanleitung benötigen:Here are a few things that you'll need before running this quickstart:

In dieser Schnellstartanleitung werden nur Kernbibliotheken benötigt, da keine externen Abhängigkeiten vorhanden sind.This quickstart only requires core libraries, there are no external dependencies.

Erstellen einer Azure-RessourceCreate an Azure resource

Beginnen Sie mit der Verwendung der Bing-Websuche-API, indem Sie eine der unten aufgeführten Azure-Ressourcen erstellen.Start using the Bing Web Search API by creating one of the Azure resources below.

  • Erstellen einer Testressource:Create a trial resource:

    • Kein Azure-Abonnement erforderlich.No Azure subscription needed.
    • Kostenlos und sieben Tage lang gültig.Valid for seven days, for free. Nach der Registrierung stehen ein Testschlüssel und ein Endpunkt auf der Azure-Website zur Verfügung.After signing up, a trial key and endpoint will be available on the Azure website.
  • Erstellen einer Ressource für Bing-Suche v7:Create a Bing Search v7 resource:

    • Verfügbar über das Azure-Portal, bis Sie die Ressource löschen.Available through the Azure portal until you delete the resource.
    • Verwenden Sie den Tarif „Free“, um den Dienst zu testen, und führen Sie später für die Produktion ein Upgrade auf einen kostenpflichtigen Tarif durch.Use the free pricing tier to try the service, and upgrade later to a paid tier for production.
  • Erstellen einer Ressource für mehrere Dienste:Create a Multi-Service resource:

    • Verfügbar über das Azure-Portal, bis Sie die Ressource löschen.Available through the Azure portal until you delete the resource.
    • Verwenden Sie für Ihre Anwendungen den gleichen Schlüssel und Endpunkt über mehrere Cognitive Services-Instanzen hinweg.Use the same key and endpoint for your applications, across multiple Cognitive Services.

Erstellen eines Projekts und Importieren von KernbibliothekenCreate a project and import core libraries

Erstellen Sie in Ihrer bevorzugten IDE oder in einem Editor ein neues Go-Projekt.Create a new Go project in your favorite IDE or editor. Importieren Sie anschließend net/http für Anforderungen, ioutil zum Lesen der Antwort, time und encoding/json zum Verarbeiten des JSON-Codes und fmt zum Ausgeben der Ausgabedaten.Then import net/http for requests, ioutil to read the response, time and encoding/json to handle the JSON, and fmt to print the output.

package main
import (
    "fmt"
    "net/http"
    "io/ioutil"
    "time"
    "encoding/json"
)

Erstellen einer Struktur zum Formatieren der SuchergebnisseCreate a struct to format the search results

Mit der BingAnswer-Struktur werden die in der Antwort bereitgestellten Daten formatiert.The BingAnswer struct formats the data provided in the response.

// This struct formats the answers provided by the Bing Web Search API.
type BingAnswer struct {
        Type         string `json:"_type"`
        QueryContext struct {
                OriginalQuery string `json:"originalQuery"`
        } `json:"queryContext"`
        WebPages struct {
                WebSearchURL          string `json:"webSearchUrl"`
                TotalEstimatedMatches int    `json:"totalEstimatedMatches"`
                Value                 []struct {
                        ID               string    `json:"id"`
                        Name             string    `json:"name"`
                        URL              string    `json:"url"`
                        IsFamilyFriendly bool      `json:"isFamilyFriendly"`
                        DisplayURL       string    `json:"displayUrl"`
                        Snippet          string    `json:"snippet"`
                        DateLastCrawled  time.Time `json:"dateLastCrawled"`
                        SearchTags       []struct {
                                Name    string `json:"name"`
                                Content string `json:"content"`
                        } `json:"searchTags,omitempty"`
                        About []struct {
                                Name string `json:"name"`
                        } `json:"about,omitempty"`
                } `json:"value"`
        } `json:"webPages"`
        RelatedSearches struct {
                ID    string `json:"id"`
                Value []struct {
                        Text         string `json:"text"`
                        DisplayText  string `json:"displayText"`
                        WebSearchURL string `json:"webSearchUrl"`
                } `json:"value"`
        } `json:"relatedSearches"`
        RankingResponse struct {
                Mainline struct {
                        Items []struct {
                                AnswerType  string `json:"answerType"`
                                ResultIndex int    `json:"resultIndex"`
                                Value       struct {
                                        ID string `json:"id"`
                                } `json:"value"`
                        } `json:"items"`
                } `json:"mainline"`
                Sidebar struct {
                        Items []struct {
                                AnswerType string `json:"answerType"`
                                Value      struct {
                                        ID string `json:"id"`
                                } `json:"value"`
                        } `json:"items"`
                } `json:"sidebar"`
        } `json:"rankingResponse"`
}

Deklarieren der main-Funktion und Definieren der VariablenDeclare the main function and define variables

Dieser Code dient zum Deklarieren der main-Funktion und Festlegen der erforderlichen Variablen.This code declares the main function and sets required variables. endpoint kann der unten angegebene globale Endpunkt oder der Endpunkt der benutzerdefinierten Unterdomäne sein, der im Azure-Portal für Ihre Ressource angezeigt wird.endpoint can be the global endpoint below, or the custom subdomain endpoint displayed in the Azure portal for your resource. Vergewissern Sie sich, dass der Endpunkt korrekt ist, und ersetzen Sie den Wert token durch einen gültigen Abonnementschlüssel aus Ihrem Azure-Konto.Confirm that the endpoint is correct and replace the token value with a valid subscription key from your Azure account. Sie können die Suchabfrage auch anpassen, indem Sie den Wert für searchTerm ersetzen.Feel free to customize the search query by replacing the value for searchTerm.

// Declare the main function. This is required for all Go programs.
func main() {
// Verify the endpoint URI and replace the token string with a valid subscription key.  
    const endpoint = "https://api.cognitive.microsoft.com/bing/v7.0/search"
    token := "YOUR-ACCESS-KEY"
    searchTerm := "Microsoft Cognitive Services"

// The remaining code in this quickstart goes in the main function.

}

Erstellen einer AnforderungConstruct a request

Mit diesem Code wird die HTTP-Anforderung deklariert, der Header und die Nutzlast eingefügt und der Client instanziiert.This code declares the HTTP request, inserts the header and payload, and instantiates the client.

// Declare a new GET request.
req, err := http.NewRequest("GET", endpoint, nil)
if err != nil {
    panic(err)
}

// Add the payload to the request.  
param := req.URL.Query()
param.Add("q", searchTerm)
req.URL.RawQuery = param.Encode()

// Insert the request header.  
req.Header.Add("Ocp-Apim-Subscription-Key", token)

// Instantiate a client.  
client := new(http.Client)

Erstellen einer AnforderungMake a request

Verwenden Sie diesen Code, um die Bing-Websuche-API aufzurufen und die Verbindung zu schließen, nachdem eine Antwort zurückgegeben wurde.Use this code to call the Bing Web Search API and close the connection after a response is returned.

// Send the request to Bing.  
resp, err := client.Do(req)
if err != nil {
    panic(err)
}

// Close the connection.
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
    panic(err)
}

Verarbeiten der AntwortHandle the response

Erinnern Sie sich an die Struktur, die wir zuvor erstellt haben?Remember the struct we created earlier? Wir verwenden sie, um die Antwort zu formatieren und die Suchergebnisse auszugeben.We're going to use it to format the response and print the search results.

// Create a new answer.  
ans := new(BingAnswer)
err = json.Unmarshal(body, &ans)
if err != nil {
    fmt.Println(err)
}
// Iterate over search results and print the result name and URL.
for _, result := range ans.WebPages.Value {
    fmt.Println(result.Name, "||", result.URL)
}

Korrektes ZusammenfügenPut it all together

Der letzte Schritt ist das Überprüfen Ihres Codes und dessen Ausführung!The last step is to validate your code and run it! Hier ist das vollständige Programm angegeben, falls Sie Ihren Code mit unserem Code vergleichen möchten:If you'd like to compare your code with ours, here's the complete program:

package main
import (
    "fmt"
    "net/http"
    "io/ioutil"
    "time"
    "encoding/json"
)

// The is the struct for the data returned by Bing.
type BingAnswer struct {
        Type         string `json:"_type"`
        QueryContext struct {
                OriginalQuery string `json:"originalQuery"`
        } `json:"queryContext"`
        WebPages struct {
                WebSearchURL          string `json:"webSearchUrl"`
                TotalEstimatedMatches int    `json:"totalEstimatedMatches"`
                Value                 []struct {
                        ID               string    `json:"id"`
                        Name             string    `json:"name"`
                        URL              string    `json:"url"`
                        IsFamilyFriendly bool      `json:"isFamilyFriendly"`
                        DisplayURL       string    `json:"displayUrl"`
                        Snippet          string    `json:"snippet"`
                        DateLastCrawled  time.Time `json:"dateLastCrawled"`
                        SearchTags       []struct {
                                Name    string `json:"name"`
                                Content string `json:"content"`
                        } `json:"searchTags,omitempty"`
                        About []struct {
                                Name string `json:"name"`
                        } `json:"about,omitempty"`
                } `json:"value"`
        } `json:"webPages"`
        RelatedSearches struct {
                ID    string `json:"id"`
                Value []struct {
                        Text         string `json:"text"`
                        DisplayText  string `json:"displayText"`
                        WebSearchURL string `json:"webSearchUrl"`
                } `json:"value"`
        } `json:"relatedSearches"`
        RankingResponse struct {
                Mainline struct {
                        Items []struct {
                                AnswerType  string `json:"answerType"`
                                ResultIndex int    `json:"resultIndex"`
                                Value       struct {
                                        ID string `json:"id"`
                                } `json:"value"`
                        } `json:"items"`
                } `json:"mainline"`
                Sidebar struct {
                        Items []struct {
                                AnswerType string `json:"answerType"`
                                Value      struct {
                                        ID string `json:"id"`
                                } `json:"value"`
                        } `json:"items"`
                } `json:"sidebar"`
        } `json:"rankingResponse"`
}

// Verify the endpoint URI and replace the token string with a valid subscription key.  
func main() {
    const endpoint = "https://api.cognitive.microsoft.com/bing/v7.0/search"
    token := "YOUR-ACCESS-KEY"
    searchTerm := "Microsoft Cognitive Services"

    // Declare a new GET request.
    req, err := http.NewRequest("GET", endpoint, nil)
    if err != nil {
        panic(err)
    }

    // Add the payload to the request.  
    param := req.URL.Query()
    param.Add("q", searchTerm)
    req.URL.RawQuery = param.Encode()

    // Insert the request header.  
    req.Header.Add("Ocp-Apim-Subscription-Key", token)

    // Create a new client.  
    client := new(http.Client)

    // Send the request to Bing.  
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }

    // Close the response.
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        panic(err)
    }

    // Create a new answer.  
    ans := new(BingAnswer)
    err = json.Unmarshal(body, &ans)
    if err != nil {
         fmt.Println(err)
    }

    // Iterate over search results and print the result name and URL.
    for _, result := range ans.WebPages.Value {
         fmt.Println(result.Name, "||", result.URL)
    }

}

Beispiel für eine AntwortSample response

Antworten der Bing-Websuche-API werden im JSON-Format zurückgegeben.Responses from the Bing Web Search API are returned as JSON. Diese Beispielantwort wurde mit der Struktur BingAnswer formatiert und zeigt die Elemente result.Name und result.URL an.This sample response has been formatted using the BingAnswer struct and shows the result.Name and result.URL.

Microsoft Cognitive Services || https://www.microsoft.com/cognitive-services
Cognitive Services | Microsoft Azure || https://azure.microsoft.com/services/cognitive-services/
Cognitive Service Try experience | Microsoft Azure || https://azure.microsoft.com/try/cognitive-services/
What is Microsoft Cognitive Services? | Microsoft Docs || https://docs.microsoft.com/azure/cognitive-services/Welcome
Microsoft Cognitive Toolkit || https://www.microsoft.com/en-us/cognitive-toolkit/
Microsoft Customers || https://customers.microsoft.com/en-us/search?sq=%22Microsoft%20Cognitive%20Services%22&ff=&p=0&so=story_publish_date%20desc
Microsoft Enterprise Services - Microsoft Enterprise || https://enterprise.microsoft.com/en-us/services/
Microsoft Cognitive Services || https://westus.dev.cognitive.microsoft.com/docs/services/563879b61984550e40cbbe8d/operations/563879b61984550f30395236
Cognitive Services - msdn.microsoft.com || https://msdn.microsoft.com/magazine/mt742868.aspx  

Nächste SchritteNext steps

Weitere InformationenSee also