Podemos darle un gran valor agregado a nuestro web site si le añadimos la funcionalidad de estar mostrando la información de sus stock quotes actualizados…(claro, en el caso que tuviera).
Vamos a mostrar una manera sencilla y simple de cómo podemos mostrar la información de un determnado símbolo de stock quotes en una página ASP.NET… obviamente uds lo pueden mejorar, la idea aquí (como siempre) es que se entienda cómo hacerlo.
0.- Vamos a usar el ajaxcontrol toolkit y ASP.NET ajax 2.0… así que asegúrense de haberlos referenciado en su proyecto.
1.- Añadimos un control de usuario ascx a nuestro proyecto, lo llamamos wucStockQuotes.ascx
1.1.- le añadimos un UpdatePanel, un timer y el código HTML necesario que me permita mostrar el stock quotes en una pequeña tabla, así debiera quedar:
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Timer ID="Timer1" Interval="10000" runat="server">
</asp:Timer>
<table style='width: 85%; text-align: left; width: 200px'>
<tr>
<td>
<span style='font-weight: bold'>
<asp:Literal ID="ltSymbol" runat="server"></asp:Literal></span>
</td>
<td>
<span style='font-weight: bold'>OTC BB</span>
</td>
</tr>
<tr>
<td>
Last
</td>
<td>
<asp:Literal ID="ltLast" runat="server"></asp:Literal>
</td>
</tr>
<tr>
<td>
Change
</td>
<td>
<asp:Literal ID="ltChange" runat="server"></asp:Literal>
</td>
</tr>
<tr>
<td>
Volume
</td>
<td>
<asp:Literal ID="ltVolume" runat="server"></asp:Literal>
</td>
</tr>
<tr>
<td>
Day's Range
</td>
<td>
<asp:Literal ID="ltDaysRange" runat="server"></asp:Literal>
</td>
</tr>
<tr>
<td>
Open
</td>
<td>
<asp:Literal ID="ltOpen" runat="server"></asp:Literal>
</td>
</tr>
<tr>
<td>
Prev. Close
</td>
<td>
<asp:Literal ID="ltPrevClose" runat="server"></asp:Literal>
</td>
</tr>
<tr>
<td>
Market Cap
</td>
<td>
<asp:Literal ID="ltMarketCap" runat="server"></asp:Literal>
</td>
</tr>
</table>
</ContentTemplate>
</asp:UpdatePanel>
El Timer tiene un Interval de 10000 milisegundos, entonces se supone que la información deberá refresacarse cada 10 segundos.
En el code beside:
+ creamos una propiedad pública llamada Symbol, que me permitirá obtener el símbolo del stock quotes desde la página aspx.
+ Creamos un procedimiento llamado StockQuotes() , el cual permitirá mostrar la información recuperada desde YAHOO, vean el código completo:
Public Partial Class wucStockQuotes
Inherits System.Web.UI.UserControl
Private _Symbol As String = "MSFT"
Public Property Symbol() As String
Get
Return _Symbol
End Get
Set(ByVal value As String)
_Symbol = value
End Set
End Property
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
StockQuotes()
End Sub
Protected Sub Timer1_Tick(ByVal sender As Object, ByVal e As EventArgs) Handles Timer1.Tick
StockQuotes()
End Sub
Private Sub StockQuotes()
Dim c As Char = System.Web.UI.Html32TextWriter.DoubleQuoteChar
Dim sq As String = Get_DataFromYahoo(_Symbol)
Dim arrValues() As String = sq.Split(",")
ltSymbol.Text = _Symbol
ltLast.Text = arrValues(1)
ltChange.Text = String.Format("{0}({1})", arrValues(4), arrValues(11).Replace(c, "").Replace("+", ""))
ltVolume.Text = String.Format("{0:#,###}", Convert.ToDouble(arrValues(8)))
ltDaysRange.Text = String.Format("{0}-{1}", arrValues(7), arrValues(6))
ltOpen.Text = arrValues(5)
ltPrevClose.Text = arrValues(10)
ltMarketCap.Text = arrValues(9)
End Sub
Public Shared Function Get_DataFromYahoo(ByVal symbol As String) As String
Dim url As String = "http://download.finance.yahoo.com/d/quotes.csv?s={0}&d=t&f=sl1d1t1c1ohgvj1pp2wern"
Return GetHTMLFromURL(String.Format(url, symbol))
End Function
Public Shared Function GetHTMLFromURL(ByVal URL As String) As String
Dim ASCII As New System.Text.ASCIIEncoding
Dim netWeb As New System.Net.WebClient
Dim lsWeb As String
Dim laWeb As Byte()
Try
laWeb = netWeb.DownloadData(URL)
lsWeb = ASCII.GetString(laWeb)
Catch ex As Exception
Throw New Exception(ex.Message.ToString + ex.ToString)
End Try
Return lsWeb
End Function
End Class
Lo que se hace aquí (a grandes rasgos es):
Yahoo devuelve los datos en un string separado por comas,,, entonces lo que hacemos en splitearlo y luego mostrar los datos que nos interesan, dándole un poco de formato.
2.- Añadimos una página aspx a nuestro proyecto, lo llamamos StockQuotes.aspx y le añadimos un scriptManager, luego arrastramos el control de usuario wucStockQuotes.ascx creado previamente sobre la página aspx, el código final debe verse más o menos así:
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Obtener Stock Quotes</title>
<style type="text/css">
* { font-family: Trebuchet MS; }
</style>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<h3>Obtener stock Quotes cada x segundos</h3>
<uc1:wucStockQuotes ID="wucStockQuotes1" Symbol="IBM" runat="server" />
</form>
</body>
</html>
Dense cuenta que en el control de usuario que acabo de arrastrar hacia la página aspx he puesto Symbol="IBM" lo cual significa que ese será el Stock Quotes a consultar.
Cualquier duda, comentan? ;)
No hay comentarios.:
Publicar un comentario