Wer suchet, der findet (mehr)

Bing als Entwickler-Plattform der Möglichkeiten
Kommentare

Bing ist eine Suchmaschine. Man kann also auch mit Bing googeln, das ist aber den wenigsten bekannt. Noch Wenigere wissen: Bing ist mehr als eine Suchmaschine. Vor knapp einem Jahr wurden einige Services der Bing-Plattform für Entwickler freigegeben – und Sie werden überrascht sein, wie wenig diese mit der klassischen Internetsuche gemeinsam haben.

Die Arbeit von Suchmaschinen hat sich in den letzten fünfzehn Jahren massiv verändert: Früher waren wir begeistert, wenn Google uns aus der schier unendlich großen Menge an Daten innerhalb kürzester Zeit relevante Ergebnisse serviert hat. Wenn Sie in alten Zeiten schwelgen möchten, öffnen Sie die englischsprachige Google-Seite und tippen Sie „Google in 1998“ in das Suchfeld ein (Abb. 1).

Abb. 1: Google im Jahr 1998

Heute beschränken sich Suchmaschinen nicht mehr auf das Auflisten von Webseiten: Die Verknüpfung zu anderen Informationsquellen und eine intelligente Verbindung von Wissen ist das A und O. Wenn Sie heute nach „Google“ bingen, erhalten Sie in der englischsprachigen Variante den aktuellen Aktienkurs, aufbereitete Informationen über das Unternehmen, Bilder, verwandte Suchergebnisse, aktuelle News und den letzten Twitter-Post (Abb. 2). Je nach Suche erscheinen auch interaktive Landkarten, relevante Persönlichkeiten, Musik, Wikipedia-Ausschnitte oder ein Countdown zu wichtigen Ereignissen und Feiertagen.

Abb. 2: Bing im Jahr 2014

Microsoft hat in den letzten Jahren enorm viel Zeit und Geld in die Entwicklung von Bing gesteckt. Neben dem klassischen Webindex und der Bewertung von Relevanz wird plötzlich viel Wissen über die echte Welt benötigt: geografische Informationen, Verkehrsdaten, Synonymdatenbanken, Sprachübersetzung, Bilderkennung – um nur einige zu nennen. Eine Suchmaschine muss die Welt verstehen, um gute Ergebnisse liefern zu können.

Und genau dieses Verständnis der Welt ist die Brücke zu einem zweiten Fokus des Bing-Teams: natürliche Benutzeroberflächen. Sämtliche Gestensteuerungen und Spracherkennungen von Windows 8, Windows Phone oder der Xbox One wurden von Bing mitentwickelt.

Bing-Services für Entwickler

Das Bing-Team hat in den vergangenen Jahren also viel Know-how gesammelt. Know-how, das uns Entwicklern seit dem letzten Jahr zur Verfügung steht, um reichhaltige Apps und Anwendungen bauen zu können. Sie möchten in Ihrer App auch Spracheingabe zulassen? Sie haben Geokoordinaten und möchten diese visualisieren? Sie bieten eine Suche an und würden auch gerne Synonyme finden? Alles Themen, die für sich betrachtet viel zu aufwändig wären, um sie im Zuge einer kleinen App-Entwicklung abdecken zu können – die Bing-Services ermöglichen hier einen einfachen Zugang zu einer teils futuristischen Welt.

Der Einstiegspunkt wurde auf der Build-Konferenz des letzten Jahres vorgestellt: das Bing Developer Center ist der zentrale Ort für alle Services. Hier finden Sie sämtliche Ressourcen inklusive Beispielcode, Dokumentation und Downloadlink:

  • Maps: API für Geoabfragen und Steuerelemente für die Kartendarstellung
  • Speech: Spracherkennung und Text-to-Speech
  • Translator: Übersetzung zwischen mehr als vierzig Sprachen
  • App Linking: Anzeige von Apps im Suchergebnis inklusive Deep Linking in die App
  • Search API: Suche nach Webseiten, Bildern etc.
  • Contextual Awareness: Metainformationen in Mails für Microsoft Cortana
  • Knowledge Widget: Reichert eine bestehende Webseite durch Bing-Informationen an
  • App Producer: Tool zur Erstellung einer Newsreader-App
  • Webmaster API: Programmatischer Zugriff auf Trackinginformation von Webseiten
  • Synonyms API: Synonyme für Produkte, Menschen und Orte
  • Ads SDK: Einbindung von Werbung in Apps
  • Ads API: Programmatischer Zugriff auf die Verwaltung von Werbeeinschaltungen

Diese Auflistung zeigt, wie unterschiedlich die unter dem Namen Bing zusammengefassten Dienste sind. Die Einheitlichkeit endet meist mit der gemeinsamen Startseite: Eine Ebene tiefer sind sowohl die Darstellung, die Dokumentationsqualität als auch die Zielplattform von Ressource zu Ressource sehr unterschiedlich.

Registrierung und Kosten

Für die Verwendung der meisten Services ist ein Azure-Marketplace-Konto erforderlich. Die Registrierung ist hier einfach und kostenlos möglich, neben den Bing-Services stehen hier auch zahlreiche andere (teilweise kostenpflichtige) Datendienste zur Verfügung.

Um die Dienste ansprechen zu können, müssen Sie einen Key erstellen, mit dem Sie sich bei Serviceaufrufen identifizieren müssen. Zu guter Letzt müssen Sie auch für den Großteil der Dienste selbst eine Registrierung durchführen – und damit sind wir beim Thema Kosten: Abgerechnet wird meist nach der Anzahl durchgeführter Transaktionen (z. B. Suchabfragen), manchmal aber auch aufgrund anderer Kriterien (z. B. die Zeichenanzahl beim Translator). Die Preise sind dabei von Service zu Service unterschiedlich, für 10 000 Suchabfragen pro Monat sind knapp über 15 Euro fällig. Bei jedem Service gibt es aber auch eine bestimmte Anzahl an kostenlosen Abfragen pro Monat, meist werden die ersten 5 000 Transaktionen nicht verrechnet. Abhängig von der Größe Ihres Szenarios werden Sie damit möglicherweise hinkommen. Um den Überblick über bereits verbrauchte Kontingente nicht zu verlieren, kann der aktuelle Status abgerufen und kontrolliert werden (Abb. 3).

Abb. 3: Transaktionsstatistik im Azure Marketplace

Bing Search API

Mithilfe des Bing Search API können Sie die klassische Bing-Suche als Service konsumieren. Gesucht werden kann in vier Kategorien: Web, Bilder, News und Videos. Außerdem können Sie verwandte Suchbegriffe oder Suchvorschläge (z. B. für Autocomplete-Felder) abfragen.

Der REST-basierte Service liefert die Daten entweder im XML- oder JSON-Format und kann somit sowohl in klassischen Desktopanwendungen als auch in Apps Verwendung finden. Listing 1 zeigt die Abfrage von Bildern, achten Sie bei der Angabe des Suchtexts im Querystring auf die umschließenden %27-Zeichen (Hexadezimalcode für einfaches Hochkomma). Um die JSON-Antwort zu deserialisieren, wurde im Beispiel eine eigene Klasse ImageSearchResponse verwendet, diese lässt sich am einfachsten durch Visual Studio und das von mir schon öfter erwähnte Feature „Edit, Paste Special, Paste JSON As Classes“ erzeugen. Die Suche kann darüber hinaus noch verfeinert werden: Wie auf bing.com können beispielsweise nur Bilder ab einer gewissen Größe gesucht werden. Alle gültigen Parameter für die unterschiedlichen Kategorien finden Sie hier, auf derselben Seite können Sie auch die erforderliche Registrierung des Bing Search API durchführen.

private async Task> SearchImages(string query)
{
  var accountKey = "";
  var baseUrl = "h ttps://api.datamarket.azure.com/Bing/Search";

  var filter = new HttpBaseProtocolFilter();
  filter.ServerCredential = new PasswordCredential()
  {
    UserName = accountKey,
    Password = accountKey
  };

  var client = new HttpClient(filter);
  var url = string.Format("{0}/Image?$format=json&Query=%27{1}%27", baseUrl, query);

  var json = await client.GetStringAsync(new Uri(url));
  var response = JsonConvert.DeserializeObject(json);

  return response.Data.Results.Select(p => p.Thumbnail.MediaUrl).ToList();
}

[ header = Seite 2: Translation ]

Bing Translation

Das Translation API übersetzt einzelne Wörter oder ganze Texte zwischen vierzig Sprachen und liefert dabei eine Qualität, wie man sie von guten, automatischen Übersetzungstools erwarten kann. Einfache Texte werden nahezu fehlerfrei übersetzt (Abb. 4), lustige Übersetzungs-Hoppalas sind aber auch nie ganz ausgeschlossen. Zusätzlich dazu kann auch die Sprache eines Texts automatisiert erkannt werden.

Die Abfrage erfolgt wie beim Search API durch einen REST-Service, die Antwort wird als XML geliefert. Listing 2 zeigt, wie der Service aus einer Windows-Store-App angesprochen werden kann, weitere Informationen zu den Parametern sind hier ersichtlich. Vergessen Sie nicht, Microsoft Translator im Azure Marketplace zu registrieren.

private async Task Translate(string text, string fromLanguage, string toLanguage)
{
  var accountKey = "";
  var baseUrl = "h ttps://api.datamarket.azure.com/Bing/MicrosoftTranslator/Translate()";

  var filter = new HttpBaseProtocolFilter();
  filter.ServerCredential = new PasswordCredential()
  {
    UserName = accountKey,
    Password = accountKey
  };

  text = WebUtility.UrlEncode(text);
  var url = string.Format("{0}?Text='{1}'&From='{2}'&To='{3}'", baseUrl, text, fromLanguage, toLanguage);

  var client = new HttpClient(filter);
  string response = await client.GetStringAsync(new Uri(url));

  var document = XDocument.Parse(response);
  XNamespace ns = "h ttp://schemas.microsoft.com/ado/2007/08/dataservices";
  var translated = document.Descendants(ns + "Text").First();

  return translated.Value;
}

Abb. 4: Der untere Text wurde automatisch generiert

Text-to-Speech

Die Möglichkeit, geschriebenen Text in gesprochene Sprache umzuwandeln, steht nicht als Service zur Verfügung, sondern wurde direkt in die WinRT integriert und kann in Windows-Store-Apps daher kostenlos und offline verwendet werden. Im Windows.Media.SpeechSynthesis Namespace steht die Klasse SpeechSynthesizer zur Verfügung, die mithilfe der in Windows installierten Stimmen eine Sprachausgabe durchführen kann. Sind mehrere Stimmen installiert, kann über die statische SpeechSynthesizer.AllVoices-Auflistung eine Auswahl getroffen werden.

Die Generierung der Sprachausgabe ist getrennt von der tatsächlichen Wiedergabe: Die SpeechSynthesizer-Klasse erzeugt lediglich einen Stream – ob Sie diesen (z. B. mittels eines MediaElement-Controls) wiedergeben oder für die spätere Verwendung als Audiodatei abspeichern, bleibt Ihnen überlassen.

private async Task SpeakText()
{
  var speech = new SpeechSynthesizer();
  speech.Voice = SpeechSynthesizer.AllVoices.First(p => p.Language.StartsWith("de"));

  var stream = await speech.SynthesizeTextToStreamAsync("Herzlich willkommen");

  mediaElement.SetSource(stream, stream.ContentType);
  mediaElement.Play();
}

Um eine noch natürlichere Sprachausgabe zu erzeugen, können Sie den Text durch Hinweise hinsichtlich Betonung, Lautstärke und Tempo anreichern. Das dafür verwendete Format nennt sich SSML (Speech Synthesis Markup Language) und wurde vom W3C standardisiert. Die Methode SynthesizeSsmlToStreamAsync nimmt ein derartiges SSML-Fragment entgegen.

Speech Recognition

Die gegenteilige Funktionalität ist die Erkennung von gesprochener Sprache und ihre Umwandlung in Text. So richtig gut funktioniert diese Art der Eingabe nur in Hollywoodfilmen, aber die Technik holt mit großen Schritten auf. Sofern der zu erkennende Wortschatz eingegrenzt werden kann (z. B. nur auf Ziffern oder auf die Auswahl „Ja“ oder „Nein“), ist die Trefferquote schon sehr beachtlich. Einige Frameworks, die meisten davon kostenpflichtig, haben sich dem Thema auf professionelle Art und Weise angenommen.

Bing stellt ebenfalls einen Service zur Verfügung, um Spracherkennung zu unterstützen. Derzeit sind sechs Sprachen (Deutsch, Englisch/US, Englisch/GB, Spanisch, Französisch, Italienisch und Chinesisch) verfügbar, eine Einschränkung der erkennbaren Grammatik ist aber nicht möglich. Für Windows-Store-Apps gibt es auch ein eigenes Bing Speech Recognition Control, das über die Visual Studio Gallery heruntergeladen werden kann.

Die Verwendung ist zum aktuellen Zeitpunkt (Juni 2014) aber leider im deutschsprachigen Raum kaum möglich: Der Service steht im Moment nur für amerikanische Marketplace-Konten zur Verfügung (Abb. 5). Warum der bereits funktionierende Zugriff vorübergehend eingeschränkt wurde, ist nicht bekannt – Interessierte finden hier die gezeigte Schritt-für-Schritt-Anleitung.

Abb. 5: Speech Recognition derzeit nicht verfügbar

Bing Maps

Die Bereitstellung von Bing Maps als Service bzw. als interaktives Steuerelement gibt es schon viel länger – und das sieht man diesem Bereich auch an. Die Komponente erscheint zwar unter dem Bing Developer Center, gleich danach wird man aber auf eine (gut aussehende) Bing-Maps-Infoseite mit vielen Ressourcen bzw. auf ein (schlecht aussehendes) Bing-Maps-Portal umgeleitet. Letzteres benötigt man, um Zugriffsschlüssel zu erzeugen – die bei den anderen Services gebräuchliche Variante über den Azure Marketplace wird hier nicht verwendet.

Die Möglichkeiten sind vielfältig: REST Services ermöglichen u. a. Geocoding (Koordinaten für eine Adresse finden) und Reverse Geocoding (das Gegenteil), das Abrufen von Kartenausschnitten als Bild, die programmatische Routenplanung oder die Abfrage von aktuellen Verkehrsinformationen. Die Datenqualität ist vor allem im amerikanischen Raum sehr gut; im asiatischen Raum gibt es durchaus noch Aufholbedarf. Die vollständige Dokumentation der REST Services finden Sie hier.

Zusätzlich gibt es Steuerelemente, die mit diesen Services interagieren und eine Kartenintegration ohne großen Aufwand ermöglichen. Von Web über Windows Store und Windows Phone bis hin zur WPF sind die Controls als Download verfügbar und mit einem gültigen Lizenzschlüssel einsetzbar.

Stichwort Lizenz: Die Kosten variieren abhängig von der gewünschten Nutzung stark. Öffentliche Anwendungen, wie beispielsweise Windows-Store-Apps, können bis zu 50 000 Transaktionen pro Tag kostenlos durchführen. Sollten Sie aber eine Bing-Integration in die interne Unternehmensanwendung planen, kann es schnell auch teuer werden. Erste Richtwerte bieten die Lizenzoptionen, die Sie hier finden können.

Resümee

Unser Werkzeugkoffer hat sich dank Bing wieder einmal erweitert. Allerdings mit Werkzeugen, die wir nicht täglich brauchen: eher ausgefallenere Kreationen, bei denen wir auf den ersten Blick teilweise noch gar nicht sagen können, wofür sie einmal gut sein werden. Umso wichtiger, dass wir die Komponenten in unserem Hinterkopf behalten und bei Bedarf zugreifen: den englischen Twitter-Post automatisch übersetzen oder durch Sprachausgabe einen zusätzlichen Sinn ins Spiel bringen, ist plötzlich ein Aufwand von wenigen Zeilen. Bedenken Sie aber von Beginn an die zu erwartenden Transaktionen, damit keine unliebsamen Überraschungen finanzieller Natur auf Sie zukommen.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -