This topic contains code samples that produces a SOAP request for the RelatedSearch SourceType. For more information, see RelatedSearch SourceType (Bing, Version 2.0).
Requirements
- A deployment computer with an Internet connection
- The ability to send requests using the Simple Object Access Protocol (SOAP) 1.1 and the Hyper Text Transfer Protocol (HTTP 1.1)
- The ability to parse SOAP and XML
Demonstrates
These code samples demonstrate how to:
- Send a request to the Bing SOAP interface and the Web SourceType
- Display the Bing response as results
The samples are written in both Visual Basic and C#.
Example
Imports System
Imports System.Xml
' This Imports statement assumes that the project's root namespace is
' "ApiSamples" and the name of the Bing API web reference is
' "net.bing.api". Modify this Imports statement as necessary.
Imports ApiSamples.net.bing.api
' Bing API 2.0 code sample demonstrating the use of the
' RelatedSearch SourceType over the SOAP Protocol.
Class RelatedSearchSample
' Replace the following string with the AppId you received from the
' Bing Developer Center.
Const AppId As String = "Insert your AppId here"
Shared Sub Main()
' BingService implements IDisposable.
Using service As BingService = New BingService
Try
Dim request As SearchRequest = BuildRequest()
' Send the request; display the response.
Dim response As SearchResponse = service.Search(request)
DisplayResponse(response)
Catch ex As System.Web.Services.Protocols.SoapException
' A SOAP Exception was thrown. Display error details.
DisplayErrors(ex.Detail)
Catch ex As System.Net.WebException
' An exception occurred while accessing the network.
Console.WriteLine(ex.Message)
End Try
End Using
End Sub
Shared Function BuildRequest() As SearchRequest
Dim request As New SearchRequest
With request
' Common request fields (required)
.AppId = AppId
.Query = "free"
.Sources = New SourceType() {SourceType.RelatedSearch}
' Common request fields (optional)
.Version = "2.0"
.Market = "en-us"
.Options = New SearchOption() {SearchOption.EnableHighlighting}
End With
Return request
End Function
Shared Sub DisplayResponse(ByVal response As SearchResponse)
' Display the results header.
Console.WriteLine("Bing API Version " & response.Version)
Console.WriteLine( _
"RelatedSearch results for " & response.Query.SearchTerms)
Console.WriteLine()
' Display the RelatedSearch results.
Dim builder As New System.Text.StringBuilder
Dim result As RelatedSearchResult
For Each result In response.RelatedSearch.Results
builder.Length = 0
builder.AppendLine(result.Title)
builder.AppendLine(result.Url)
DisplayTextWithHighlighting(builder.ToString)
Console.WriteLine()
Next
End Sub
Shared Sub DisplayTextWithHighlighting(ByVal [text] As String)
' Write text to the standard output stream, changing the console
' foreground color as highlighting characters are encountered.
Dim c As Char
For Each c In [text].ToCharArray
If (c = Char.ConvertFromUtf32(&HE000)) Then
' If the current character is the begin highlighting
' character (U+E000), change the console foreground color
' to green.
Console.ForegroundColor = ConsoleColor.Green
ElseIf (c = Char.ConvertFromUtf32(&HE001)) Then
' If the current character is the end highlighting
' character (U+E001), revert the console foreground color
' to gray.
Console.ForegroundColor = ConsoleColor.Gray
Else
Console.Write(c)
End If
Next
End Sub
Shared Sub DisplayErrors(ByVal errorDetails As XmlNode)
' Add the default namespace to the namespace manager.
Dim nsmgr As New XmlNamespaceManager( _
errorDetails.OwnerDocument.NameTable)
nsmgr.AddNamespace( _
"api", _
"http://schemas.microsoft.com/LiveSearch/2008/03/Search")
Dim errors As XmlNodeList = errorDetails.SelectNodes( _
"./api:Errors/api:Error", _
nsmgr)
If (Not errors Is Nothing) Then
' Iterate over the list of errors and display error details.
Console.WriteLine("Errors:")
Console.WriteLine()
Dim [error] As XmlNode
For Each [error] In errors
Dim detail As XmlNode
For Each detail In [error].ChildNodes
Console.WriteLine(detail.Name & ": " & detail.InnerText)
Next
Console.WriteLine()
Next
End If
End Sub
End Class
using System;
using System.Xml;
// This using directive assumes that the project's default namespace is
// "ApiSamples" and the name of the Bing API web reference is
// "net.bing.api". Modify this using directive as necessary.
using ApiSamples.net.bing.api;
// Bing API 2.0 code sample demonstrating the use of the
// RelatedSearch SourceType over the SOAP Protocol.
static class RelatedSearchSample
{
// Replace the following string with the AppId you received from the
// Bing Developer Center.
const string AppId = "Insert your AppId here";
static void Main()
{
// BingService implements IDisposable.
using (BingService service = new BingService())
{
try
{
SearchRequest request = BuildRequest();
// Send the request; display the response.
SearchResponse response = service.Search(request);
DisplayResponse(response);
}
catch (System.Web.Services.Protocols.SoapException ex)
{
// A SOAP Exception was thrown. Display error details.
DisplayErrors(ex.Detail);
}
catch (System.Net.WebException ex)
{
// An exception occurred while accessing the network.
Console.WriteLine(ex.Message);
}
}
}
static SearchRequest BuildRequest()
{
SearchRequest request = new SearchRequest();
// Common request fields (required)
request.AppId = AppId;
request.Query = "free";
request.Sources = new SourceType[] { SourceType.RelatedSearch };
// Common request fields (optional)
request.Version = "2.0";
request.Market = "en-us";
request.Options = new SearchOption[]
{
SearchOption.EnableHighlighting
};
return request;
}
static void DisplayResponse(SearchResponse response)
{
// Display the results header.
Console.WriteLine("Bing API Version " + response.Version);
Console.WriteLine(
"RelatedSearch results for " + response.Query.SearchTerms);
Console.WriteLine();
// Display the RelatedSearch results.
System.Text.StringBuilder builder = new System.Text.StringBuilder();
foreach (RelatedSearchResult result in response.RelatedSearch.Results)
{
builder.Length = 0;
builder.AppendLine(result.Title);
builder.AppendLine(result.Url);
DisplayTextWithHighlighting(builder.ToString());
Console.WriteLine();
}
}
static void DisplayTextWithHighlighting(string text)
{
// Write text to the standard output stream, changing the console
// foreground color as highlighting characters are encountered.
foreach (char c in text.ToCharArray())
{
if (c == '\uE000')
{
// If the current character is the begin highlighting
// character (U+E000), change the console foreground color
// to green.
Console.ForegroundColor = ConsoleColor.Green;
}
else if (c == '\uE001')
{
// If the current character is the end highlighting
// character (U+E001), revert the console foreground color
// to gray.
Console.ForegroundColor = ConsoleColor.Gray;
}
else
{
Console.Write(c);
}
}
}
static void DisplayErrors(XmlNode errorDetails)
{
// Add the default namespace to the namespace manager.
XmlNamespaceManager nsmgr = new XmlNamespaceManager(
errorDetails.OwnerDocument.NameTable);
nsmgr.AddNamespace(
"api",
"http://schemas.microsoft.com/LiveSearch/2008/03/Search");
XmlNodeList errors = errorDetails.SelectNodes(
"./api:Errors/api:Error",
nsmgr);
if (errors != null)
{
// Iterate over the list of errors and display error details.
Console.WriteLine("Errors:");
Console.WriteLine();
foreach (XmlNode error in errors)
{
foreach (XmlNode detail in error.ChildNodes)
{
Console.WriteLine(detail.Name + ": " + detail.InnerText);
}
Console.WriteLine();
}
}
}
}