Primero tengo que obtener la librería HtmlAgilityPack que nos ayudara a manejar el HTML de la pagina web de SUNAT (http://www.sunat.gob.pe/cl-at-ittipcam/tcS01Alias). Para esto, descargamos la versión 1.4.6 de la pagina web del proyecto https://htmlagilitypack.codeplex.com/. Posteriormente, lo importamos como referencia en nuestro proyecto.
Ahora nos toca implementar el código que se encargará de conectarse a la pagina web y obtener el documento HTML.
string sUrl = "http://www.sunat.gob.pe/cl-at-ittipcam/tcS01Alias"; Encoding objEncoding = Encoding.GetEncoding("ISO-8859-1"); WebProxy objWebProxy = new WebProxy("proxy", 80); CookieCollection objCookies = new CookieCollection(); //USANDO GET HttpWebRequest getRequest = (HttpWebRequest)WebRequest.Create(sUrl); getRequest.Proxy = objWebProxy; getRequest.Credentials = CredentialCache.DefaultNetworkCredentials; getRequest.ProtocolVersion = HttpVersion.Version11; getRequest.UserAgent = ".NET Framework 4.0"; getRequest.Method = "GET"; getRequest.CookieContainer = new CookieContainer(); getRequest.CookieContainer.Add(objCookies);Como se puede ver usamos el Httpwebrequest para realizar la petición a la web de SUNAT y con esto deberíamos obtener una respuesta que se cargara en el Httpwebresponse que se muestra continuación.
string sGetResponse = string.Empty; using (HttpWebResponse getResponse = (HttpWebResponse)getRequest.GetResponse()) { objCookies = getResponse.Cookies; using (StreamReader srGetResponse = new StreamReader(getResponse.GetResponseStream(), objEncoding)) { sGetResponse = srGetResponse.ReadToEnd(); } }
Se ve que el resultado de la consulta se guarda en la variable sGetResponse y esta contendrá el código HTML de la web de tipo de cambio. Con esta información ya podremos saber cuales son los tipos de cambio de este mes pero nos faltaría obtener los valores de día, venta y compra sin los demás datos redundante del HTML. Para ello, usaremos la librería HtmlAgilityPack que ya tenemos en nuestro proyecto.
//Obtenemos Informacion HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument(); document.LoadHtml(sGetResponse);Como se puede apreciar, se ha cargado la variable sGetResponse, que contiene el código HTML, como un objeto de tipo HtmlDocument. Con esto ya podemos navegar entre los TAG'S HTML y poder quitar los datos redundante y solo obtener los que necesitamos. Estos datos los colocaremos en una tabla que contendrá 3 columnas (día, compra y venta).
HtmlNodeCollection NodesTr = document.DocumentNode.SelectNodes("//table[@class='class=\"form-table\"']//tr"); if (NodesTr != null) { DataTable dt = new DataTable(); dt.Columns.Add("Día", typeof(String)); dt.Columns.Add("Compra", typeof(String)); dt.Columns.Add("Venta", typeof(String)); int iNumFila = 0; foreach (HtmlNode Node in NodesTr) { if (iNumFila > 0) { int iNumColumna = 0; DataRow dr = dt.NewRow(); foreach (HtmlNode subNode in Node.Elements("td")) { if (iNumColumna == 0) dr = dt.NewRow(); string sValue = subNode.InnerHtml.ToString().Trim(); sValue = System.Text.RegularExpressions.Regex.Replace(sValue, "<.*?>", " "); dr[iNumColumna] = sValue; iNumColumna++; if (iNumColumna == 3) { dt.Rows.Add(dr); iNumColumna = 0; } } } iNumFila++; } dt.AcceptChanges(); this.dgvHtml.DataSource = dt; this.dgvHtml.ReadOnly = true; }Como se puede apreciar, se filtra por el TAG
, la cual contiene los datos que necesitamos y procedemos a recorrer la pagina web y extraer los datos que necesitamos colocar en nuestra tabla. El resultado final será esto:
Resultado de web de SUNAT
Resultado de la aplicación después de manipular los datos que queremos mostrar.
Espero que sea tan útil como me sirvió a mi y les dejo el link de los archivos para que puedan descargarlo
35 comentarios:
Hola que talme parece muy interesante tu proyecto, quisiera ver si me puedes ayudar con un ejemplo paravisual basic 6.0 o.net te estaria muy agradecido
Hola daniel, te puedo apoyar con cualquier duda q tengas. Slds
Ok muchas gracias por tu disposión la verdad no se por donde empezar no quisiera que pienses que quiero que hagas algo para mi y yo usarlo sin ningun esfuerzo mio pero lo que pasa es que solo soy aficionado a esto de la programacion no tengo estudios .
Y la pregunta en concreto seria como hago lo que tu haz hecho de obtener el tipo de cambio de sunat en C# con codigo de visual basic 6.0 o .net
Hola r3xet disculpa si te causo alguna incomodidad quisera ver si me puedes ayudar con esto:
http://www.lawebdelprogramador.com/foros/Visual_Basic/1441122-Obtener_tipo_de_cambio_de_sunat.html
es sobre mi pregunta anterior estuve avanzando pero creo que ya no e mas a que hacer
Espero tu ayuda
Molestandote y todo, pero funciono xD jaja! Funciono muy bien, tuve que hacerles una modificaciones para que funcione con SDK, pero el codigo es casi lo mismo ! Muy bueno,Gracias!
De nada, que el conocimiento se debe compartir :D
Que tal daniel, bueno le di una ojeada a VB, ya que no me acuerdo, y veo que tienes bien avanzado tu proyecto y te felicito. Ademas, que el problema ya no es el obtener el tipo de cambio si no en el uso de la grilla.
Muchas gracias por dedicar un uno poco te tu valioso tiempo a leer mi consulta y en responderme espero que me puedas ayudar en este tema de la grilla .Bendiciones
HOLA QUE TAL BUEN APORTE PODRIAS PONER EL CODIGO EN VISUAL 2008 TE LO AGRADECERIA MUCHO Y COMO AGRADECIMIENTO PONDRIA ENVIAR A TU CORREO :
*PAGINACION DEL DATAGRIVIEW (PUEDO MOSTRAR 50,000.00 REGISTROS EN 2 SEGUNDOS QUE SE ENCUANTRAN PAGINADOS 100 REGISTROS POR PAGINA)
*EXPORTAR LOS DATOS DEL DATAGRIDVIEW A UN ARCHIVO XML (SE CREA EL ARCHIVO CON EL ICONO DEL EXCEL Y OBVIAMENTE SE ABRE CON EXCEL) LO HICE DE ESTA MANERA POR QUE QUERIA EXPORTAR MUCHOS DATOS Y DE ESTA MANERA PUEDO EXPORTAR 50,000.00 REGISTROS EN SEGUNDOS COSA QUE NO SE PUEDE DE LA MANERA CONVENCIONAL QUE ES EXPORTARLO A EXCEL QUE SE DESMORA COMO 8 MINUTOS
BUENO MI CORREO ES MARKHO34 EN H_O_T_M_A_I_L
Tengo un problema me sale este mensaje de error --> No se puede resolver el nombre del proxy.: 'proxy', sería de gran ayuda que me brindaras tu apoyo
Si no están en une red privada (por lo generar restringida y filtrada por un proxy) pueden quitar la opción de proxy.
En vista que es un tema interesante el poder extraer el tipo de cambio SUNAT, esteré liberando la librería para hacer mas fácil el acceso y obtención de dichos datos. De antemano gracias por su interes. Slds
Hola, y cómo harías para filtrar por mes y año? se puede?
Pata y que libreia esocjes net40
Bueno tu post, pero no puedo descargar tu proyecto, me puedes enviar el nuevo link?..Gracias
Hola , muy buen post , buscando scrapers para obtener datos de sunat me encontre con este , actualmente estoy trabajando en algo similiar pero usando la tecnologia Nodejs, los datos que busco son los de consulta ruc , dejo el link del proyecto si es que a alguien le interesa. https://github.com/Cshion/sunatRucScraper
Estimados, pueden encontrar el proyecto en https://tcsunatperu.codeplex.com/ difundan y no se olviden de mencionarme ;) slds
hola tio esta buena tu código, aun no lo he probado pero no encuentro el link de descarga para ver el ejemplo en si. seria de mucha ayuda que resubieras el ejemplo o otro link. gracias por aporte de antemano. ah y tu crees que el valor se puede cargar en un label?. gracias de todas maneras
Yo tengo una solucion mas practica y listo para consumir, es usando los webservice para mas informacion ingresa a http://dataservice.insite.pe.
Esa pagina contiene informacion de:
* consulta RUC
* establecimientos anexos
* tipo de cambio
* info plame
Gran aporte ideal para nuestros proyectos personales en contabilidad. Creo que ha actualizado el formato de verificación de cambio, les comparto el link que encontré. Saludos.
Sunat Tipo de Cambio Oficial
Ops, creo que no salió, aquí de nuevo, saludos
http://tramites-sunat.blogspot.com/2016/07/sunat-tipo-de-cambio-oficial.html
Buenas noches, no puedo referenciar HtmlAgilityPack, por favor si me puede ayudar. Gracias
Apoyo la consulta, siempre es bueno tener el tipo de cambio oficial bien aplicado en nuestra base. saludos.
Sabes como sacar el tipo de cambio de otros meses?
Hola esta muy bueno, Yo quiero cargarlo por año y mes , al momento de obtener los datos de la web , le trato de insertar el mes y año pero me sale "es solo lectura". alguien me da una mano, gracias
http://www.sunat.gob.pe/cl-at-ittipcam/tcS01Alias?mes=06&anho=2017
En el URL
Es el registro informático de la SUNAT. En él se encuentran inscritos los contribuyentes de todo el país, así como otros obligados a inscribirse en él por mandato legal, que deben pagar a impuestos al Gobierno Central y son materia de administración por la SUNAT. Allí Contiene información como el nombre, denominación o razón social, el domicilio fiscal, la actividad económica principal y las secundarias de cada contribuyente.
Fuente: www.sunatoperacionesenlinea.review
Hola,
Alguien me puede enviar el codigo fuente para .net y revisarlo
Hola Doc.
aunque aun no he probado tu codigo.
excelente aporte.
Hola! Trate de utilizar el código y adaptarlo a lo que ahora la SUNAT ha actualizado por este año 2021 https://e-consulta.sunat.gob.pe/cl-at-ittipcam/tcS01Alias, pero no me sale me dice que el servidor tiene problemas error 500 :( no sé exactamente como adaptarlo, soy nueva en esto :(
Yo estoy igual Melany, a partir de diciembre del 2020, sunat modifico la pagina por completo.
De casualidad alguien ya a resuelto este problema.:(
Hola a todos, https://www.youtube.com/channel/UCLi8W0s3KcoheTdu2l3Sfqg (Mundo Visual Basic)
he estado trabajando y ya encontré una solución. Justo ahora estoy por editar el video y luego lo subo. Saludos
Publicar un comentario