/// <summary>
/// Metodo para carregar os dados.
/// </summary>
/// <returns></returns>
public List<YoutubeFeedItem> Listar()
{
string url = String.Format("https://gdata.youtube.com/feeds/api/videos?author={0}&orderby=published&start-index=11&max-results={1}&v=2&fields=entry(title,published,link,media:group(media:thumbnail, media:description))", this.Username, this.Lines);
XmlDocument xmlDoc = this.GetXmlDocument(url);
/// Uma peculiaridade deste codico é que o retorno do XML traz a definição
/// de uma namespace implicita, assim como outras. Ou seja, se não regitrarmos
/// as namespaces e depois as referenciarmos, a engine não irá encontrar
/// os lementos especificados nos xpath.
XmlNamespaceManager nsManager = new XmlNamespaceManager(xmlDoc.NameTable);
nsManager.AddNamespace("atom", "http://www.w3.org/2005/Atom");
nsManager.AddNamespace("media", "http://search.yahoo.com/mrss/");
nsManager.AddNamespace("yt", "http://gdata.youtube.com/schemas/2007");
List<YoutubeFeedItem> resultados = new List<YoutubeFeedItem>();
foreach (XmlNode node in xmlDoc.SelectNodes("//atom:entry", nsManager))
{
resultados.Add(new YoutubeFeedItem()
{
Text = node.SelectSingleNode("atom:title", nsManager).InnerText,
Link = node.SelectSingleNode("atom:link[@type='text/html']", nsManager).Attributes["href"].Value,
Description = node.SelectSingleNode("media:group/media:description", nsManager).InnerText,
Thumbnail = node.SelectSingleNode("media:group/media:thumbnail", nsManager).Attributes["url"].Value,
Published = DateTime.Parse(node.SelectSingleNode("atom:published", nsManager).InnerText)
});
}
return resultados;
}