SOAP Code Samples (News SourceType)
This topic contains code samples that produces a SOAP request for the News SourceType. For more information, see News 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
' News SourceType over the SOAP Protocol.
Class NewsSample
' 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 = "msn moneycentral"
.Sources = New SourceType() {SourceType.News}
' Common request fields (optional)
.Version = "2.0"
.Market = "en-us"
.Options = New SearchOption() {SearchOption.EnableHighlighting}
.News = New NewsRequest
With .News
' News-specific request fields (optional)
.Offset = 0
.OffsetSpecified = True
' The following request fields are mutually exclusive.
' Uncomment the lines corresponding to the request field you
' wish to use.
''.LocationOverride = "US.WA"
''.Category = "rt_Political"
.SortBy = NewsSortOption.Relevance
.SortBySpecified = True
End With
End With
Return request
End Function
Shared Sub DisplayResponse(ByVal response As SearchResponse)
' Display the results header.
With response
Console.WriteLine("Bing API Version " & .Version)
Console.WriteLine("News results for " & .Query.SearchTerms)
With .News
Console.WriteLine( _
"Displaying {0} to {1} of {2} results", _
.Offset + 1, _
.Offset + .Results.Length, _
.Total)
Console.WriteLine()
End With
End With
' Display the News results.
Dim builder As New System.Text.StringBuilder
Dim result As NewsResult
For Each result In response.News.Results
With result
builder.Length = 0
builder.AppendLine(.Title)
builder.AppendLine(.Url)
builder.AppendLine(.Source)
builder.AppendLine(.Date)
builder.AppendLine(.Snippet)
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 the
// News SourceType over the SOAP Protocol.
static class NewsSample
{
// 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 = "msn moneycentral";
request.Sources = new SourceType[] { SourceType.News };
// Common request fields (optional)
request.Version = "2.0";
request.Market = "en-us";
request.Options = new SearchOption[]
{
SearchOption.EnableHighlighting
};
// News-specific request fields (optional)
request.News = new NewsRequest();
request.News.Offset = 0;
request.News.OffsetSpecified = true;
// The following request fields are mutually exclusive.
// Uncomment the lines corresponding to the request field you wish
// to use.
////request.News.LocationOverride = "US.WA";
////request.News.Category = "rt_Political";
request.News.SortBy = NewsSortOption.Relevance;
request.News.SortBySpecified = true;
return request;
}
static void DisplayResponse(SearchResponse response)
{
// Display the results header.
Console.WriteLine("Bing API Version " + response.Version);
Console.WriteLine("News results for " + response.Query.SearchTerms);
Console.WriteLine(
"Displaying {0} to {1} of {2} results",
response.News.Offset + 1,
response.News.Offset + response.News.Results.Length,
response.News.Total);
Console.WriteLine();
// Display the News results.
System.Text.StringBuilder builder = new System.Text.StringBuilder();
foreach (NewsResult result in response.News.Results)
{
builder.Length = 0;
builder.AppendLine(result.Title);
builder.AppendLine(result.Url);
builder.AppendLine(result.Source);
builder.AppendLine(result.Date);
builder.AppendLine(result.Snippet);
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();
}
}
}
}