SOAP Code Samples (Multiple SourceTypes)
This topic contains code samples that produces a SOAP request for Multiple SourceTypes. For more information, see Working with SourceTypes (Bing, Version 2).
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 multiple
' SourceTypes over the SOAP Protocol.
Class MultipleSourceTypesSample
' 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 = "microsoft"
.Sources = New SourceType() _
{ _
SourceType.Web, _
SourceType.RelatedSearch _
}
' Common request fields (optional)
.Version = "2.0"
.Market = "en-us"
.Adult = AdultOption.Moderate
.AdultSpecified = True
.Options = New SearchOption() {SearchOption.EnableHighlighting}
End With
Return request
End Function
Shared Sub DisplayResponse(ByVal response As SearchResponse)
' Display the RelatedSearch 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 relatedSearchResult As RelatedSearchResult
For Each relatedSearchResult In response.RelatedSearch.Results
builder.Length = 0
builder.AppendLine(relatedSearchResult.Title)
builder.AppendLine(relatedSearchResult.Url)
DisplayTextWithHighlighting(builder.ToString)
Console.WriteLine()
Next
' Display the Web results header.
With response
Console.WriteLine()
Console.WriteLine()
Console.WriteLine("Web results for " & .Query.SearchTerms)
With .Web
Console.WriteLine( _
"Displaying {0} to {1} of {2} results", _
.Offset + 1, _
.Offset + .Results.Length, _
.Total)
Console.WriteLine()
End With
End With
' Display the Web results.
Dim webResult As WebResult
For Each webResult In response.Web.Results
With webResult
builder.Length = 0
builder.AppendLine(.Title)
builder.AppendLine(.Description)
builder.AppendLine(.Url)
builder.Append("Last Crawled: ")
builder.AppendLine(.DateTime)
DisplayTextWithHighlighting(builder.ToString)
Console.WriteLine()
End With
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 multiple
// SourceTypes over the SOAP Protocol.
static class MultipleSourceTypesSample
{
// 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 = "microsoft";
request.Sources = new SourceType[]
{
SourceType.Web,
SourceType.RelatedSearch
};
// Common request fields (optional)
request.Version = "2.0";
request.Market = "en-us";
request.Adult = AdultOption.Moderate;
request.AdultSpecified = true;
request.Options = new SearchOption[]
{
SearchOption.EnableHighlighting
};
return request;
}
static void DisplayResponse(SearchResponse response)
{
// Display the RelatedSearch 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();
}
// Display the Web results header.
Console.WriteLine();
Console.WriteLine();
Console.WriteLine("Web results for " + response.Query.SearchTerms);
Console.WriteLine(
"Displaying {0} to {1} of {2} results",
response.Web.Offset + 1,
response.Web.Offset + response.Web.Results.Length,
response.Web.Total);
Console.WriteLine();
// Display the Web results.
foreach (WebResult result in response.Web.Results)
{
builder.Length = 0;
builder.AppendLine(result.Title);
builder.AppendLine(result.Description);
builder.AppendLine(result.Url);
builder.Append("Last Crawled: ");
builder.AppendLine(result.DateTime);
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();
}
}
}
}