XML Code Samples (News SourceType)

This topic contains code samples that produces an XML 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 Hyper Text Transfer Protocol (HTTP 1.1)

  • The ability to parse XML

Demonstrates

These code samples demonstrate how to:

  • Send a request to the Bing XML interface and the News SourceType

  • Display the Bing response as results

The samples are written in both Visual Basic and C#.

Example

Imports System
Imports System.Net
Imports System.Xml

' Bing API 2.0 code sample demonstrating the use of the
' News SourceType over the XML 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()
        Dim request As HttpWebRequest = BuildRequest()
        Try
            ' Send the request; display the response.
            Dim response As HttpWebResponse = DirectCast( _
                request.GetResponse, _
                HttpWebResponse)
            DisplayResponse(response)
        Catch ex As WebException
            ' An exception occurred while accessing the network.
            Console.WriteLine(ex.Message)
        End Try
    End Sub

    Shared Function BuildRequest() As HttpWebRequest
        Dim requestString As String = "http://api.bing.net/xml.aspx?"

        ' Common request fields (required)
        requestString &= _
              "AppId=" & AppId _
            & "&Query=msn moneycentral" _
            & "&Sources=News"

        ' Common request fields (optional)
        requestString &= _
              "&Version=2.0" _
            & "&Market=en-us" _
            & "&Options=EnableHighlighting"

        ' News-specific request fields (optional)
        requestString &= "&News.Offset=0"

        ' The following request fields are mutually exclusive.
        ' Uncomment the line corresponding to the request field you wish
        ' to use.
        ''requestString &= "&News.LocationOverride=US.WA"
        ''requestString &= "&News.Category=rt_Political"
        requestString &= "&News.SortBy=Relevance"

        ' Create and initialize the request.
        Dim request As HttpWebRequest = DirectCast( _
            WebRequest.Create(requestString), HttpWebRequest)

        Return request
    End Function

    Shared Sub DisplayResponse(ByVal response As HttpWebResponse)
        ' Load the response into an XmlDocument.
        Dim document As New XmlDocument
        document.Load(response.GetResponseStream)

        ' Add the default namespace to the namespace manager.
        Dim nsmgr As New XmlNamespaceManager(document.NameTable)
        nsmgr.AddNamespace( _
            "api", _
            "http://schemas.microsoft.com/LiveSearch/2008/04/XML/element")

        Dim errors As XmlNodeList = document.DocumentElement.SelectNodes( _
            "./api:Errors/api:Error", _
            nsmgr)

        If (errors.Count > 0) Then
            ' There are errors in the response. Display error details.
            DisplayErrors(errors)
        Else
            ' There were no errors in the response. Display the
            ' News results.
            DisplayResults(document.DocumentElement, nsmgr)
        End If
    End Sub

    Shared Sub DisplayResults(ByVal root As XmlNode, _
        ByVal nsmgr As XmlNamespaceManager)

        ' Add the News SourceType namespace to the namespace manager.
        nsmgr.AddNamespace( _
            "news", _
            "http://schemas.microsoft.com/LiveSearch/2008/04/XML/news")

        Dim news As XmlNode = root.SelectSingleNode("./news:News", nsmgr)
        Dim results As XmlNodeList = news.SelectNodes( _
            "./news:Results/news:NewsResult", _
            nsmgr)

        Dim version As String = root.SelectSingleNode( _
            "./@Version", _
            nsmgr).InnerText
        Dim searchTerms As String = root.SelectSingleNode( _
            "./api:Query/api:SearchTerms", _
            nsmgr).InnerText
        Dim offset As Integer
        Integer.TryParse( _
            news.SelectSingleNode("./news:Offset", nsmgr).InnerText, _
            offset)
        Dim total As Integer
        Integer.TryParse( _
            news.SelectSingleNode("./news:Total", nsmgr).InnerText, _
            total)

        ' Display the results header.
        Console.WriteLine("Bing API Version " & version)
        Console.WriteLine("News results for " & searchTerms)
        Console.WriteLine( _
            "Displaying {0} to {1} of {2} results", _
            offset + 1, _
            offset + results.Count, _
            total)
        Console.WriteLine()

        ' Display the News results.
        Dim builder As New System.Text.StringBuilder
        Dim result As XmlNode
        For Each result In results
            With result
                builder.Length = 0
                builder.AppendLine( _
                    .SelectSingleNode("./news:Title", nsmgr).InnerText)
                builder.AppendLine( _
                    .SelectSingleNode("./news:Url", nsmgr).InnerText)
                builder.AppendLine( _
                    .SelectSingleNode("./news:Source", nsmgr).InnerText)
                builder.AppendLine( _
                    .SelectSingleNode("./news:Date", nsmgr).InnerText)
                builder.AppendLine( _
                    .SelectSingleNode("./news:Snippet", nsmgr).InnerText)

                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 errors As XmlNodeList)
        ' 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 Sub

End Class
using System;
using System.Net;
using System.Xml;

// Bing API 2.0 code sample demonstrating the use of the
// News SourceType over the XML 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()
    {
        HttpWebRequest request = BuildRequest();

        try
        {
            // Send the request; display the response.
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            DisplayResponse(response);
        }
        catch (WebException ex)
        {
            // An exception occurred while accessing the network.
            Console.WriteLine(ex.Message);
        }
    }

    static HttpWebRequest BuildRequest()
    {
        string requestString = "http://api.bing.net/xml.aspx?"

            // Common request fields (required)
            + "AppId=" + AppId
            + "&Query=msn moneycentral"
            + "&Sources=News"

            // Common request fields (optional)
            + "&Version=2.0"
            + "&Market=en-us"
            + "&Options=EnableHighlighting"

            // News-specific request fields (optional)
            + "&News.Offset=0"

            // The following request fields are mutually exclusive.
            // Uncomment the line corresponding to the request field you wish
            // to use.
            ////+ "&News.LocationOverride=US.WA";
            ////+ "&News.Category=rt_Political";
            + "&News.SortBy=Relevance";

        // Create and initialize the request.
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(
            requestString);

        return request;
    }

    static void DisplayResponse(HttpWebResponse response)
    {
        // Load the response into an XmlDocument.
        XmlDocument document = new XmlDocument();
        document.Load(response.GetResponseStream());
        
        // Add the default namespace to the namespace manager.
        XmlNamespaceManager nsmgr = new XmlNamespaceManager(
            document.NameTable);
        nsmgr.AddNamespace(
            "api",
            "http://schemas.microsoft.com/LiveSearch/2008/04/XML/element");

        XmlNodeList errors = document.DocumentElement.SelectNodes(
            "./api:Errors/api:Error",
            nsmgr);

        if (errors.Count > 0)
        {
            // There are errors in the response. Display error details.
            DisplayErrors(errors);
        }
        else
        {
            // There were no errors in the response. Display the
            // News results.
            DisplayResults(document.DocumentElement, nsmgr);
        }
    }

    static void DisplayResults(XmlNode root, XmlNamespaceManager nsmgr)
    {
        // Add the News SourceType namespace to the namespace manager.
        nsmgr.AddNamespace(
            "news",
            "http://schemas.microsoft.com/LiveSearch/2008/04/XML/news");

        XmlNode news = root.SelectSingleNode("./news:News", nsmgr);
        XmlNodeList results = news.SelectNodes(
            "./news:Results/news:NewsResult",
            nsmgr);

        string version = root.SelectSingleNode("./@Version", nsmgr).InnerText;
        string searchTerms = root.SelectSingleNode(
            "./api:Query/api:SearchTerms",
            nsmgr).InnerText;
        int offset;
        int.TryParse(
            news.SelectSingleNode("./news:Offset", nsmgr).InnerText,
            out offset);
        int total;
        int.TryParse(
            news.SelectSingleNode("./news:Total", nsmgr).InnerText,
            out total);

        // Display the results header.
        Console.WriteLine("Bing API Version " + version);
        Console.WriteLine("News results for " + searchTerms);
        Console.WriteLine(
            "Displaying {0} to {1} of {2} results",
            offset + 1,
            offset + results.Count,
            total);
        Console.WriteLine();

        // Display the News results.
        System.Text.StringBuilder builder = new System.Text.StringBuilder();
        foreach (XmlNode result in results)
        {
            builder.Length = 0;
            builder.AppendLine(
                result.SelectSingleNode("./news:Title", nsmgr).InnerText);
            builder.AppendLine(
                result.SelectSingleNode("./news:Url", nsmgr).InnerText);
            builder.AppendLine(
                result.SelectSingleNode("./news:Source", nsmgr).InnerText);
            builder.AppendLine(
                result.SelectSingleNode("./news:Date", nsmgr).InnerText);
            builder.AppendLine(
                result.SelectSingleNode("./news:Snippet", nsmgr).InnerText);

            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(XmlNodeList errors)
    {
        // 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();
        }
    }
}