Avançar para o conteúdo principal

XML - Leitor RSS Feeds

Neste poste vou publicar uma aplicação desenvolvida com o Monodevelop em C# que permitirá fazer o download das feeds de dois sites (BBC e PCMagazine) cujos artigos podem ser lidos no browser.
A janela principal é constituída por duas combobox's, uma que permite escolher qual o site de onde descarregar o XML com a lista de artigos (feed RSS) e a outra que é preenchida com a lista dos artigos depois de clicado o botão Carrega RSS.




Para carregar o ficheiro XML vamos utilizar o código


XmlDocument doc = new XmlDocument();

para criar um documento XML. Para depois ler o ficheiro do site selecionado na combobox1

if (this.combobox1.ActiveText=="BBC")
doc.Load("http://newsrss.bbc.co.uk/rss/newsonline_uk_edition/front_page/rss.xml");
else
if (this.combobox1.ActiveText=="PCMagazine")
doc.Load("http://rssnewsapps.ziffdavis.com/pcmag.xml");

Se não tiver nada selecionado na combobox1 apresentamos uma mensagem ao utilizador, para isto basta o seguinte código


MessageDialog md = new MessageDialog(this,
        DialogFlags.DestroyWithParent, MessageType.Info,
        ButtonsType.Close, "Tem de selecionar uma feed!");
md.Run();
md.Destroy();


Se tudo correu bem, ou seja, o utilizador selecionou um site da combobox1 e carregou no botão para carregar a lista, e este processo concluiu sem erros, devemos então percorrer os nós do XML para adicionar à combobox2 os títulos dos artigos, além disso guardamos em duas listas o texto resumo do artigo e o link para este.
Assim 
//seleciona o primeiro item
XmlNodeList items = doc.SelectNodes("//item");
//Lista de items
foreach (XmlNode item in items){
//titulo
store.AppendValues(item.SelectSingleNode("title").InnerText);
//descricao
//algumas descriçoes tem tags html mas vamos tratar delas
int x=item.SelectSingleNode("description").InnerText.IndexOf("<");
if (x>0)
textos.Add( item.SelectSingleNode("description").InnerText.Substring(0,x));
else
textos.Add( item.SelectSingleNode("description").InnerText);
//link
urls.Add(item.SelectSingleNode("link").InnerText);        
}

Destaco o pormenor de que alguns textos têm links que não têm boa aparência no label assim só adicionamos ao label1 o texto até encontrarmos um <.

Para mostrar o texto do artigo controlamos o evento change da combobox2

protected void OnCombobox2Changed (object sender, System.EventArgs e)
{
if(this.combobox2.Active<0) return;
this.label1.Text=textos[this.combobox2.Active];
}

Depois disto tudo falta somente o clique no botão para ler o artigo

protected void OnButton3Clicked (object sender, System.EventArgs e)
{
string temp;
if (this.combobox2.Active<0) return;
temp=urls[this.combobox2.Active];
System.Diagnostics.Process.Start(temp);
}

Assim está tudo.

Comentários

Mensagens populares deste blogue

Upgrade do Windows Home para Pro sem formatar

 Há algum tempo que tentava fazer o upgrade do meu Windows 10 da versão Home para a versão Pro, mas chegava sempre a um ponto em que me era solicitado para formatar o sistema e não estava para isso. Finalmente conseguinte seguindo estes passos: - seguinte estes passos  utilizei uma das chaves genéricas para o Windows 10 Pro e fui a Settings > Update & Security > Activation > Change the product key; - após inserir uma das chaves o Windows instala as funcionalidades Pro e pede para reiniciar; - agora tem o Windows Pro mas não está ativado, assim fui ao site urcdkeys  onde comprei uma chave para o Windows Pro por menos de €20; - com essa chave voltei a funcionalidade Change the product key e ativei o Windows; - e pronto, Windows Pro ativado sem formatar ou reinstalar. Importante : eu não tenho nada a ver com o site urcdkeys por isso a vossa experiência pode correr de forma diferente da minha.

Encriptar e Desencriptar

Com o .Net podemos facilmente codificar e descodificar mensagens através do namespace Cryptography. Neste post vamos estudar um programa que encripta um texto com base numa palavra passe e posteriormente descodifica a mensagem. Começamos por criar uma função para encriptar: string codifica(string mensagem, string ppasse) {   //este vector vai ficar com a mensagem encriptada   byte [] mensagem_codificada;  //vamos utilizar codificação UTF8   System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding();   // Vamos utilizar o algoritmo MD5 para fazer o Hash da palavra passe   MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider();   //Agora podemos então fazer o hash da palavra passe   byte[] TDESChave = HashProvider.ComputeHash(UTF8.GetBytes(ppasse));   //De seguida vamos escolher o algoritmo de encriptação   TripleDESCryptoServiceProvider TDESAlgoritmo = new TripleDESCryptoServiceProvider();   //Confi...

PONG em Flash AS3.0

Mais um pequeno jogo para demonstrar algumas das funcionalidades do AS3.0. Para este exemplo vamos implementar uma versão do Pong. Para este Pong vamos criar a possibilidade de acelerar a bola com a raqueta e, para tornar o jogo mais difícil, quando se atingir uma determinada pontuação fazemos aparecer uma parede no meio do campo de jogo. O código é muito parecido com o jogo do post anterior, mas um pouco mais complicado. Para controlar a nossa raqueta utilizamos a seguinte função: function teclado(e:KeyboardEvent):void{ dir_j1=0; if (e.keyCode == Keyboard.UP){ if(jogador1.y>0) jogador1.y -=5; dir_j1=-5; } if (e.keyCode == Keyboard.DOWN){ if(jogador1.y<370) jogador1.y +=5; dir_j1=5; } } Agora está mais simples pois só percorremos as linhas, ou seja, a coluna nunca muda. A raqueta que é controlada pelo computador depende do seguinte código: function movepc():void { if (bola.y>jogador2.y) jogador2.y = jogador2.y + velocidade_y; if (bola.y<jogador2.y) joga...