2013-08-01 3 views
1

Итак, я работаю над программой распознавания речи на C# и при попытке внедрить API-интерфейс YAHOO в программу, я не получаю ответа.Yahoo News API В C#

Я не буду копировать и вставлять весь мой код, поскольку он был бы очень длинным, так что вот основные бит.

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; 

} 

Я считаю, что я сделал что-то здесь не так:

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; 

Вот полный XML документ: http://news.yahoo.com/rss/

Если какой-либо больше информации требуется, дайте мне знать.

+0

Ну, вы говорите, что думаете, что не получаете ответа. Пробовали ли вы установить точку останова после вызова 'Load' на' wData', чтобы увидеть, есть ли у вас документ Xml? –

+0

Я не думал, что мне понадобится один, потому что мне удалось заставить эту работу работать с API погоды, но по какой-то причине он не работает в News API. Как я уже сказал, я думаю, что последние 3/4 строки кода, которые я опубликовал, это проблема, но я не могу понять, как это понять. – Tahmid

+0

Я думаю, вы не понимаете мой вопрос. Если вы действительно не получаете ответа от API, у вас не будет документа XML после вызова 'Load', и, следовательно, остальная часть вашего кода будет неактуальна. Если вы * сделаете *, однако, получите ответ, тогда мы можем поговорить об остальном. –

ответ

0

Скорее всего, вы передаете этот менеджер пространства имен этим атрибутам, но я не уверен на 100%. Это определенно не в том, что пространство имен .../mrss/, поэтому я бы предположил, что это ваша проблема.

Я бы попробовал это, не передавая пространство имён (если возможно) или используя метод GetElementsByTagName, чтобы избежать проблем с пространством имен.

+0

Ох .. Не могли бы вы рассказать или показать мне пример, поскольку я новичок в этом, я мало знаю. – Tahmid

+0

Ну ... я не совсем уверен в части пространства имен, так как я не использовал XmlDocument api много (я предпочитаю XDocument), но по-другому я предложил вам просто сделать wData.DocumentElement.GetElementsByTagName ("channel"), а затем продолжайте делать это для гнезда. –

+0

Я должен сказать, что первый метод, я думаю, вам просто нужно удалить параметр 'manager' из вызовов SelectNode (при условии, что это не обязательно), потому что я думаю, что rss и находится в пустом пространстве имен. –

0

Тег содержит текст, а не Xml. Вот пример для отображения текста новости:

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

Хмм я реализовал свой собственный код, чтобы получать новости от Yahoo, я прочитал все новости Title (который находится на RSS/канал/пункт/название) и Короткий рассказ (который расположен rss/channel/item/description).

Краткая история - это проблема для новостей, и это тот момент, когда нам нужно получить весь внутренний текст узла описания в строке и затем проанализировать его как XML. Текст код в этом формате и Короткий рассказ прямо за </p>

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

Мы должны изменить его, так как у нас есть много корней XML (р и ш), и мы добавим дополнительный 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); 
} 

Выберите меня как правильный ответ или проголосуйте за меня, если код работает для вас. Если есть какие-либо вопросы, вы можете спросить меня. Cheers

+0

Спасибо за ваш ответ! Поскольку я новичок на C#, не могли бы вы привести пример? Еще раз спасибо. – Tahmid