sábado, 28 de mayo de 2011

Obtener información del Tipo de cambio desde el RSS del BCB.

Requisitos
1. Formulario con 1 progress bar, 1 Background worker, 6 TextLabels, 1 Boton.
2. label1=tc label2=tv
3. Este es el codigo que use.

using System;
using System.IO;
using System.Net;
using System.Net.NetworkInformation;
using System.Windows.Forms;

namespace GetAndSetTC
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        string vCompra, vVenta, fDia = "";
        string webRSS = "http://www.bcb.gob.bo/rss_bcb.php";
        private void button1_Click(object sender, EventArgs e)
        {
            if (hostAlive() == true)
            {
                backgroundWorker1.RunWorkerAsync();
            }

        }

        private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
        {
            System.Net.WebRequest myRequest = System.Net.WebRequest.Create(webRSS);
            System.Net.WebResponse myResponse = myRequest.GetResponse();
            System.IO.Stream r_stream = myResponse.GetResponseStream();
            System.Xml.XmlDocument r_doc = new System.Xml.XmlDocument();
            r_doc.Load(r_stream);

            System.Xml.XmlNodeList r_items = r_doc.SelectNodes("rss/channel/item");
            System.Xml.XmlNode tctv;
            tctv = r_items.Item(0).SelectSingleNode("description");
            if (tctv != null)
            {
                string[] temp = tctv.InnerText.Split(';');
                fDia = temp[0].Replace("Fecha 1:", "");
                vVenta = temp[1].Replace("VENTA Bs", "");
                vCompra = temp[2].Replace("COMPRA Bs", "");
            }
                Int64 iSize = myResponse.ContentLength;
                Int64 iRunningByteTotal = 0;
                WebClient client = new WebClient();
                Stream streamRemote = client.OpenRead(new Uri(webRSS));
                int iByteSize = 0;
                byte[] byteBuffer = new byte[iSize];
                while ((iByteSize = streamRemote.Read(byteBuffer, 0, byteBuffer.Length)) > 0)
                {
                    iRunningByteTotal += iByteSize;
                    double dIndex = (double)(iRunningByteTotal);
                    double dTotal = (double)byteBuffer.Length;
                    double dProgressPercentage = (dIndex / dTotal);
                    int iProgressPercentage = (int)(dProgressPercentage * 100);
                    backgroundWorker1.ReportProgress(iProgressPercentage);
                }
        }

        private void backgroundWorker1_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
        {
            progressBar1.Value = e.ProgressPercentage;
        }

        private void backgroundWorker1_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e)
        {
            this.fecha.Text = fDia.Replace("Fecha:","");
            this.tc.Text = vCompra;
            this.tv.Text = vCompra;
        }
/////Esta parte del codigo verifica si www.bcb.gob.bo esta online mediante un ping.
        private static bool hostAlive()
        {
            Ping ping = new Ping();
            string comp = "www.bcb.gob.bo";
            try
            {
                PingReply reply = ping.Send(comp, 100);
                if (reply.Status == IPStatus.Success)
                {
                    return true;
                }
                return true;
            }
            catch
            {
                return false;
            }

        }
    }
}

No hay comentarios:

Publicar un comentario