SOAP Code Samples (Web SourceType)
This topic contains code samples that produces a SOAP request for the Web SourceType. For more information, see Web SourceType (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.1 code sample demonstrating the use of the
' Web SourceType over the SOAP Protocol.
Class WebSample
' 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 = "msdn blogs"
.Sources = New SourceType() {SourceType.Web}
' Common request fields (optional)
.Version = "2.0"
.Market = "en-us"
.Adult = AdultOption.Moderate
.AdultSpecified = True
.Options = New SearchOption() {SearchOption.EnableHighlighting}
.Web = New WebRequest
With .Web
' Web-specific request fields (optional)
.Count = 10
.CountSpecified = True
.Offset = 0
.OffsetSpecified = True
.Options = New WebSearchOption() _
{ _
WebSearchOption.DisableHostCollapsing, _
WebSearchOption.DisableQueryAlterations _
}
End With
End With
Return request
End Function
Shared Sub DisplayResponse(ByVal response As SearchResponse)
With response
' Display the results header.
Console.WriteLine("Bing API Version " & .Version)
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 builder As New System.Text.StringBuilder
Dim result As WebResult
For Each result In response.Web.Results
With result
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.1 code sample demonstrating the use of the
// Web SourceType over the SOAP Protocol.
static class WebSample
{
// 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 = "msdn blogs";
request.Sources = new SourceType[] { SourceType.Web };
// 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
};
// Web-specific request fields (optional)
request.Web = new WebRequest();
request.Web.Count = 10;
request.Web.CountSpecified = true;
request.Web.Offset = 0;
request.Web.OffsetSpecified = true;
request.Web.Options = new WebSearchOption[]
{
WebSearchOption.DisableHostCollapsing,
WebSearchOption.DisableQueryAlterations
};
return request;
}
static void DisplayResponse(SearchResponse response)
{
// Display the results header.
Console.WriteLine("Bing API Version " + response.Version);
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.
System.Text.StringBuilder builder = new System.Text.StringBuilder();
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();
}
}
}
}