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

martes, 22 de octubre de 2019

Entrenamiento - Seminario sobre Web Scraping en .NET

Seminario sobre Web Scraping en .NET

Después de mucho tiempo retomamos los Seminarios de Desarrollo Web con .NET, esta vez con el tema de Web Scraping que consiste en extraer información de sitios web como páginas a través de programación, en este caso en .NET

Mis alumnos conocen que desde hace varios años he realizado varios trabajos al respecto y lo que quiero es compartir las técnicas que uso para extraer información usando un cliente HTTP para lo cual desarrollaremos muchos ejemplos desde cero sobre todo para obtener información usada por muchos sistemas como consultar tipo de cambio, DNI, RUC, etc.

Temas

1. Usando HttpClient
- Usando Http Get
- Usando Http Post
2. SUNAT
- Tipo de Cambio
- Consulta RUC
3. RENIEC
- Consulta DNI
4. SBS
- Directorio de Empresas
5. Paginas Blancas
- Guía Telefónica de Personas
6. Treeview de Directorios de una Pagina
- Bajar Archivos de una Pagina
7. Web Spider
- Almacenar información de miles de páginas

Información

Día: Sábado 9 de Noviembre del 2019
Horario: 4:00 pm a 10:00 pm.
Registro y Pago: 4:00 pm a 4:30 pm.
Duración: 6 horas

Inversión

- 100 Soles solo para Alumnos que estan llevando actualmente Cursos los Sábados y/o Domingos
- 200 Soles para el resto (ex-alumnos y público en general)

Vacantes y Lugar

Participantes: 15 Mínimo - 25 Máximo
Lugar: Mi Domicilio (Zona Norte de Lima)
Nota: A los que no conocen el lugar solo si se registran les enviaré la dirección exacta.

Contacto

Los interesados enviar un mail a Luis.duenash@gmail.com con los siguientes datos:
Asunto: Seminario sobre Web Scraping en .NET
Contenido del Mail:
- Nombre Completo
- Lugar de Trabajo o Estudio
- Alumno Regular de Talleres: Si / No

jueves, 10 de marzo de 2016

Entrenamiento - Taller ASP.NET MVC & JavaScript Domingos

Ultimo Mes del Taller de ASP.NET MVC & JavaScript Domingos

Por el presente post quiero agradecer a todos los asistentes al Taller de los Domingos, esperando que se haya cubierto sus expectativas y a la vez informarles que iniciamos el último mes este Domingo 13 de Marzo.

Los temas a tratar serán los siguientes:
- Gráficos interactivos con SVG
- Programación Distribuida con Servicios WCF (alojados en IIS y en su propio Host)
- Programación Distribuida con Servicios Web API: HttpClient (C#) y XHR (JavaScript)
- Programación en Tiempo Real con WebSockets
- Programación en Tiempo Real con WebRTC, etc.

Como siempre los Demos serán originales y 100% aplicables a su trabajo.

Los que no pudieron asistir, les dejo el Lnk de mi canal de YouTube que tiene videos de cursos de ASP.NET MVC & JavaScript:

Canal de Luis Dueñas

Si les gusta los videos, nada les cuesta un Like.

Nos vemos este Domingo.

viernes, 30 de octubre de 2015

El Libro del Día: 52 Tips & Tricks to Boost .NET Performance

El Libro del Día: 2015-10-30

Titulo: 52 Tips & Tricks to Boost .NET Performance
Autor: Giorgi Dalakishvili, Louis Somers, Rob Karatzas, Zijian Huang, ...
Editorial: Red Gate
Nro Paginas: 38

Capítulos:
Tips 01-06 : General performance advice
Tips 07-17 : .NET performance improvements
Tips 18-26 : ASP.NET
Tips 27-40 : Database access
Tips 41-47 : Memory usage
Tips 48-52 : General hints

Descarga:
52_Tips_&_Tricks_to_Boost_.NET_Performance

martes, 19 de mayo de 2015

El Demo del Día: Obtener el Tipo de Cambio de la Pagina de la SUNAT

Obtener el Tipo de Cambio de la Pagina de la SUNAT

Después de mucho tiempo de no publicar un Demo, vamos a compartir un pedido de una persona que necesitaba ingresar a la pagina de la SUNAT diariamente y copiar el tipo de cambio para ingresarlo en su sistema, lo ideal seria tener un Servicio Web de uso libre, pero ante la falta de este o si existe necesitaríamos las credenciales, les dejo esta solución.

Requerimiento

Obtener diariamente en forma automática el tipo de cambio de la SUNAT publicado en la siguiente dirección: http://www.sunat.gob.pe/cl-at-ittipcam/tcS01Alias

Solución

Vamos a crear una aplicación Windows en C# .NET que use la clase HttpClient para hacer una llamada asíncrona a la dirección de la pagina, bajarla a memoria, crear una cadena con el contenido y extraer la parte que corresponde al tipo de cambio del ultimo día: las 3 ultimas celdas de la ultima fila de la segunda tabla de la página.

Restricción

La aplicación podría fallar en un futuro si la SUNAT cambia su contenido agregando o quitando tablas y habría que hacer los ajustes respectivos al código, pero aun así es una ayuda por mientras.

Crear una Aplicación Windows Forms en C#

Abrir Visual Studio y crear una aplicación Windows Forms en C# llamada "TipoCambioSUNAT", cambiarle de nombre al formulario por "frmSUNAT" y realizar el diseño similar a la figura mostrada:


Hacer una referencia a la librería: "System.Net.Http.dll" y escribir el siguiente código en el formulario:

using System;
using System.Collections.Generic; //List
using System.Text; //Encoding
using System.Windows.Forms;
using System.Net.Http; //HttpClient, HttpResponseMessage
using System.IO; //File, MemoryStream

namespace TipoCambioSUNAT
{
    public partial class frmSUNAT : Form
    {
        public frmSUNAT()
        {
            InitializeComponent();
        }

        private void btnConsultar_Click(object sender, EventArgs e)
        {
            HttpClient cliente = new HttpClient();
            cliente.BaseAddress = new Uri("http://www.sunat.gob.pe/");
            HttpResponseMessage rpta = cliente.GetAsync("cl-at-ittipcam/tcS01Alias").Result;
            if (rpta != null&&rpta.IsSuccessStatusCode)
            {
                string contenido = "";
                using(MemoryStream ms= (MemoryStream)
                rpta.Content.ReadAsStreamAsync().Result)
                {
                    byte[] buffer = ms.ToArray();
                    contenido = Encoding.UTF8.GetString(buffer);
                    contenido = contenido.ToLower();
                }
                if (contenido.Length > 0)
                {
                    File.WriteAllText("Sunat.txt", contenido);
                    int posInicioT1= contenido.IndexOf("<table");
                    int posFinT1 = contenido.IndexOf("</table");                  
                    if (posInicioT1 > -1&&posFinT1>-1)
                    {
                        int posInicioT2 = contenido.IndexOf("<table",posInicioT1+1);
                        int posFinT2 = contenido.IndexOf("</table", posFinT1 + 1);
                        string tabla = contenido.Substring(posInicioT2, posFinT2 - posInicioT2 + 8);
                        File.WriteAllText("Tabla.txt", tabla);
                        posInicioT1 = 0;
                        tabla = tabla.Replace("</strong>", "");
                        List<string> valores = new List<string>();
                        for (int i = 1; i < 4; i++)
                        {
                            posInicioT1 = tabla.LastIndexOf("</td");
                            if (posInicioT1 > -1)
                            {
                                tabla = tabla.Substring(0,posInicioT1).Trim();
                                posFinT1 = tabla.LastIndexOf(">");
                                if (posFinT1 > -1)
                                {
                                    valores.Add(tabla.Substring(posFinT1 + 1,
                                    tabla.Length - posFinT1 -1).Trim());
                                }
                            }
                        }
                        if (valores.Count > 0)
                        {
                            txtVenta.Text = valores[0];
                            txtCompra.Text = valores[1];
                            txtFecha.Text = valores[2];
                        }
                    }                  
                }
            }
        }
    }
}

Nota: En este Demo los datos de la consulta van a 3 TextBoxs pero pueden ir directamente a la BD en vez de mostrarse en pantalla.

Ejecutar y Probar la Aplicación Windows Forms

Grabar la aplicación y pulsar F5 para ejecutarla, luego clic al botón "Consultar" y se mostrarán los datos del último día, el tipo de cambio compra y el tipo de cambio venta, tal como se muestra en la siguiente figura:


Comentarios

Muchas veces queremos obtener un cierto dato de una pagina y tenemos que entrar manualmente, en este post hemos visto como usando el método "GetAsync" de la clase "HttpClient" del Namespace "System.Net.Http" podemos hacerlo vía código.

En este caso lo hemos aplicado a la pagina de la SUNAT, la cual se analizó su HTML y se observó que tiene varias tablas, la segunda corresponde a la tabla con los datos de los tipos de cambios de la última semana, para lo cual se obtuvo la última fila y de esta las 3 últimas celdas.

No se hizo mediante XML porque el HTML estaba mal formado y no generaría bien el XML DOM, es por eso que trabajamos con texto puro y substrings.

Este Demo lo terminamos en colaboración con mis alumnos del Taller de los Domingos a los cuales les doy las gracias por estar siempre pendientes de aprender y querer mejorar.

Si alguien de ustedes tiene alguna URL de algún Servicio Web que consideren útil compartir por ejemplo el del Tipo de Cambio o Consulta de RUC de la SUNAT, DNI de la RENIEC, ONPE, etc. seria bueno hacer otro post pero ya usando Servicios.

Descarga del Código
DemoDia_TipoCambioSUNAT

jueves, 17 de julio de 2014

El Libro del Día: Designing Evolvable Web APIs with ASP.NET

El Libro del Día: 2014-07-17

Titulo: Designing Evolvable Web APIs with ASP.NET
Autor: Glenn Block, Pablo Cibraro, Pedro Félix, Howard Dierking, Darrel Miller
Editorial: O'Reilly
Nro Paginas: 536

Capítulos:
1. The Internet, the World Wide Web, and HTTP
2. Web APIs
3. ASP.NET Web API 101
4. Processing Architecture
5. The Application
6. Media Type Selection and Design
7. Building the API
8. Improving the API
9. Building the Client
10. The HTTP Programming Model
11. Hosting
12. Controllers and Routing
13. Formatters and Model Binding
14. HttpClient
15. Security
16. The OAuth 2.0 Authorization Framework
17. Testability
A. Media Types
B. HTTP Headers
C. Content Negotiation
D. Caching in Action
E. Authentication Workflows
F. Media Type Specification for application/issue+json
G. Public-Key Cryptography and Certificates

Descarga:
Designing_Evolvable_WebAPIs_ASPNET