Obtener valor del dolar con ASP (2 metodos)
Buscando en varios lugares y despues de usar la primera de las 2 soluciones que muestro a continuacion decidi a intentarlo usando un webservice como el del Banco de Mexico pero al parecer hay un error con su servicio, asi que usare los datos proporcionados via RSS por el DOF (Diario oficial de la Federacion).Como comente, usaremos 2 metodos para que puedan utilizar el que mejor les acomode, el primero sera usando informacion de HSBC y usando un lector de codigo tomado con XMLHTTP, el segundo es usando el metodo MSXML2.DOMDocument y recorriendo un RSS con el.
Primer metodo, usando como fuente HSBC de Mexico necesitaremos crear una funcion muy simple:
Function tipo_cambio()Este metodo lee todo el codigo de la pagina indicada y busca un punto de inicio y otro de final para la lectura de la informacion, aqui sacamos el tipo de compra y de venta.
' on error resume next
Set xml = Server.CreateObject("Microsoft.XMLHTTP")
xml.Open "GET", "http://www.hsbc.com.mx/1/2/es/personas/divisas", False
xml.Send
Cadena = CSTR(xml.responseText)
PosIni1 = InStr(Cadena,"Americano")
PosIni2 = InStr(PosIni1,Cadena,"$")
PosFin = InStr(PosIni2, Cadena,"<")
DolarCompra = MID(Cadena, PosIni2-2, PosFin-PosIni2)
PosIni1 = PosFin
PosIni2 = InStr(PosIni1,Cadena,"$")
PosFin = InStr(PosIni2, Cadena,"<")
DolarVenta = MID(Cadena, PosIni2-2, PosFin-PosIni2)
Set xml = Nothing
if instr(DolarCompra,chr(32)) then DolarCompra=replace(DolarCompra,chr(32),"")
dolar_compra=CDbl(MID(DolarCompra,InStr(DolarCompra,">")+1,LEN(DolarCompra)))
dolar_venta=CDbl(MID(DolarVenta,InStr(DolarVenta,">")+1,LEN(DolarVenta)))
end function
Para obtener el valor simplemente lo llamamos asi: dolar=tipo_cambio()
En lo personal lo que hago es crear un archivo donde guardo todas las funciones y lo incluyo en el top de mis paginas y ya nada mas llamo a la funcion que necesito,
El segundo metodo es usando RSS (Repito que intente usar un webservice pero no encontre uno "oficial")
La funcion para este metodo es un poco mas larga pero haciendo algunos ajustes puede servirte para muchas mas cosas ;-)
Function LeeXml(responseText)A este metodo falta agregarle en el archivo donde llamaras la funcion algo asi:
Dim xmlResponse
Dim xnodelist
Dim indicadores
Dim id, uf, usd, euro, utm, tcm, fecha
indicadores = ""
If Len(responseText) <> 0 Then
Set xmlResponse = CreateObject("MSXML2.DOMDocument")
xmlResponse.async = false
xmlResponse.loadXml responseText
Set xnodelist = xmlResponse.documentElement.selectNodes("/rss/channel/item")
Dim objItem
For Each objItem In xnodelist
titulo = objItem.selectSingleNode("title").Text
descripcion = objItem.selectSingleNode("description").Text
pubDate = objItem.selectSingleNode("pubDate").Text
if titulo="DOLAR" then dolar=descripcion
Next
indicadores = dolar
End If
LeeXml = indicadores
End Function
Function InvocarWebService (strSoap, strSOAPAction, strURL, ByRef xmlResponse)
Dim xmlhttp
Dim blnSuccess
Set xmlhttp = server.CreateObject("WinHttp.WinHttpRequest.5.1")
xmlhttp.Open "POST", strURL
xmlhttp.setRequestHeader "Man", "POST " & strURL & " HTTP/1.1"
xmlhttp.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
xmlhttp.setRequestHeader "SOAPAction", strSOAPAction
call xmlhttp.send(strSoap)
If xmlhttp.Status = 200 Then
blnSuccess = True
Else
blnSuccess = False
End If
xmlResponse = xmlhttp.ResponseText
InvocarWebService = blnSuccess
Set xmlhttp = Nothing
End Function
<%strFecha = Request.Form("fecha")Y lo llamas asi:
strSoap = "<?xml version='1.0' encoding='utf-8'?>"& _
"<soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'>"& _
"</soap:Envelope>"
strSOAPAction = "Indicadores/Indicadores"
%>
<%En este caso, tomo el valor resultante en la variable dolar, le doy formato con 2 decimales y luego lo imprimo
Dim xmlResponse
If InvocarWebService (strSoap, strSOAPAction, "http://www.dof.gob.mx/indicadores.xml", xmlResponse) Then
'Response.Write(LeeXml(xmlResponse))
dolar=formatcurrency(LeeXml(xmlResponse),2)
response.write dolar
Else
Response.Write "*** Ha ocurrido un Error ***"
End If
Set xmlResponse = Nothing
%>

0 comentarios:
Publicar un comentario