Tahmid
Tahmid

Reputation: 185

Yahoo News API In C#

So I'm working on a speech recognition program in C# and while trying to implement the YAHOO News API into the program I am getting no response.

I won't copy/paste my whole code as it would be very long so here are the main bits.

private void GetNews()
{
    string query = String.Format("http://news.yahoo.com/rss/");
    XmlDocument wData = new XmlDocument();
    wData.Load(query);

    XmlNamespaceManager manager = new XmlNamespaceManager(wData.NameTable);
    manager.AddNamespace("media", "http://search.yahoo.com/mrss/");

    XmlNode channel = wData.SelectSingleNode("rss").SelectSingleNode("channel");
    XmlNodeList nodes = wData.SelectNodes("rss/channel/item/description", manager);

    FirstStory = channel.SelectSingleNode("item").SelectSingleNode("title", manager).Attributes["alt"].Value;

}

I believe I have done something wrong here:

XmlNode channel = wData.SelectSingleNode("rss").SelectSingleNode("channel");
XmlNodeList nodes = wData.SelectNodes("rss/channel/item/description", manager);

FirstStory = channel.SelectSingleNode("item").SelectSingleNode("title", manager).Attributes["alt"].Value;

Here is the full XML Document: http://news.yahoo.com/rss/

If any more info is required let me know.

Upvotes: 1

Views: 1418

Answers (3)

E-Riddie
E-Riddie

Reputation: 14780

Hmm I have implemented my own code to get news from Yahoo, I read all the news Title ( which is located at rss/channel/item/title ) and Short story ( which is located rss/channel/item/description ).

The short story is the problem for news, and that is the point when we need to get all the inner text of description node in a string and then parse it like XML. The text code is in this format and the Short story is right behind </p>

<p><a><img /></a></p>"Short Story"<br clear="all"/>

We need to modify it since we have many xml roots (p and br) and we add an extra root <me>

string ShStory=null;
string Title = null;

//Creating a XML Document
XmlDocument doc = new XmlDocument();  

//Loading rss on it
doc.Load("http://news.yahoo.com/rss/");

//Looping every item in the XML
foreach (XmlNode node in doc.SelectNodes("rss/channel/item"))
{
    //Reading Title which is simple
    Title = node.SelectSingleNode("title").InnerText;

    //Putting all description text in string ndd
    string ndd =  node.SelectSingleNode("description").InnerText;

    XmlDocument xm = new XmlDocument();

    //Loading modified string as XML in xm with the root <me>
    xm.LoadXml("<me>"+ndd+"</me>");

    //Selecting node <p> which has the text
    XmlNode nodds = xm.SelectSingleNode("/me/p");

   //Putting inner text in the string ShStory
    ShStory= nodds.InnerText;

   //Showing the message box with the loaded data
    MessageBox.Show(Title+ "    "+ShStory); 
}

Choose the me as the right answer or vote me up if the code works for you. If there are any issues you can ask me. Cheers

Upvotes: 1

Deha
Deha

Reputation: 1

Tag contains the text rather than Xml. Here is an example to display text news:

foreach (XmlElement node in nodes)
{
     Console.WriteLine(Regex.Match(node.InnerXml, 
                           "(?<=(/a&gt;)).+(?=(&lt;/p))"));
     Console.WriteLine();
}

Upvotes: 0

Darren Kopp
Darren Kopp

Reputation: 77637

It's likely that you are passing that namespace manager to those attributes, but I'm not 100% certain. Those are definitely not in that .../mrss/ namespace, so I would guess that is your problem.

I would try it without passing the namespace (if possible) or using the GetElementsByTagName method to avoid namespace issues.

Upvotes: 0

Related Questions