Mostrando entradas con la etiqueta codigo. Mostrar todas las entradas
Mostrando entradas con la etiqueta codigo. Mostrar todas las entradas

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;
            }

        }
    }
}