Export (0) Print
Expand All

XML Code Samples (News SourceType)

Bing

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

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();
        }
    }
}

Show:
© 2014 Microsoft