Tabla de contenido:

Extracción de datos con un ESP8266 / ESP32: 7 pasos
Extracción de datos con un ESP8266 / ESP32: 7 pasos

Video: Extracción de datos con un ESP8266 / ESP32: 7 pasos

Video: Extracción de datos con un ESP8266 / ESP32: 7 pasos
Video: ESP32 y ESP8266 enviar datos por Post y Get 🤙 2024, Noviembre
Anonim
Extracción de datos con un ESP8266 / ESP32
Extracción de datos con un ESP8266 / ESP32
Extracción de datos con un ESP8266 / ESP32
Extracción de datos con un ESP8266 / ESP32

¿Alguna vez ha querido obtener datos para sus proyectos Arduino, pero no hay una API pública para ello? ¿O en casos como la API de Instagram donde el proceso de configuración no es muy conveniente?

En este Instructable, veremos 2 opciones diferentes para extraer datos de un sitio web para sus proyectos ESP8266 o ESP32.

Paso 1: mira el video

Image
Image

Hice un video que cubre lo mismo que este instructivo, así que si estás interesado, ¡compruébalo!

Paso 2: antes de comenzar

Antes que empecemos
Antes que empecemos
Antes que empecemos
Antes que empecemos

Solo un aviso de que los datos de los que hablaré son datos públicos y no requieren autenticación. Así que digamos, por ejemplo, mi recuento exacto de suscriptores de YouTube solo está disponible para mí dentro de Creator Studio, por lo que el dispositivo tendría que realizar una solicitud que se autenticara como yo para cargarlo. Este tipo de solicitudes quedarán fuera del alcance de este video. Una prueba rápida para comprobar si se cubriría es intentar cargar la página en una ventana de incógnito, ya que no iniciará sesión automáticamente en ningún sitio.

Para las técnicas cubiertas en este Instructable, tendremos que usar algunas de las herramientas de desarrollo que están disponibles en los navegadores. Los haré demostraciones con Firefox, pero sé con certeza que Chrome tiene herramientas similares y estoy seguro de que otros navegadores también las tienen.

Paso 3: API no públicas (Spoiler: ¡Instructables tiene una!)

La primera forma que veremos es usar una API no pública. Esto no siempre estará disponible, pero si lo está, definitivamente es el método que debe intentar utilizar. Lo que llamo una "API no pública" es básicamente cuando un sitio utiliza una API no anunciada en su sitio web entre bastidores para obtener los datos que buscamos.

Hay algunas razones por las que esta sería la opción preferida.

  1. La mayor ventaja es que es poco probable que cambie tan a menudo como una página web, si extrae datos directamente del HTML de la página web, cada vez que se realiza un cambio en el sitio, su análisis podría romperse.
  2. Normalmente es más eficiente en cuanto a datos. Cuando está raspando una página web, básicamente está descargando toda la página HTML para extraer información de ella, las API solo devolverán puntos de datos, por lo que normalmente serían solicitudes mucho más pequeñas.
  3. Suele ser más fácil de analizar. Normalmente, las API devuelven datos en formato JSON que es sencillo de analizar, esto es especialmente cierto si extrae varios datos.

Primero tenemos que averiguar si la página web utiliza una configuración como esta. La pista más importante es si el sitio actualiza el valor en tiempo real como lo hace en Kickstarter, pero incluso si no lo hace, todavía hay esperanzas de que pueda usar esta configuración. Instructables utiliza una API no pública para obtener algunos datos de su sitio, aunque no se actualiza en tiempo real.

Para verificar si el sitio está usando esta configuración, ingrese al modo de desarrollador de su navegador, encuentro que la forma más fácil de hacerlo es hacer clic derecho en la página y seleccionar "inspeccionar elemento".

Luego, querrá ir a la pestaña de red, esto mostrará las solicitudes que realiza la página web en segundo plano, tenga en cuenta que es posible que deba volver a cargar la página después de abrir esta pestaña porque solo mostrará las solicitudes realizadas a partir de ahora.

Normalmente querrá buscar los que tienen el tipo "json". Puede haber muchas solicitudes aquí, por lo que puede ser útil ordenar por tipo. Puede ver que es muy obvio en la página de la campaña de kickstarter que está usando esta configuración, ya que puede ver las solicitudes constantes que se realizan a un punto final "stats.json". En la página de autores de Instructables (por ejemplo, la mía es "https://www.instructables.com/member/witnessmenow/"), no realizan solicitudes constantes, pero puedes ver oculta entre las demás una solicitud para el punto final "showAuthorStats".

Para obtener más información sobre esta solicitud, puede hacer clic en ella. Debería poder obtener toda la información que necesita desde aquí para replicar la solicitud. Pero antes de hacer eso, primero debe verificar que tenga los datos que desea. Haga clic en, en la pestaña de respuesta y vea si los datos están allí.

Si contiene los datos que necesita, ¡está listo! Luego, puede usar los mismos enfoques que se discutieron en mi video anterior sobre la conexión a las API. La versión corta de eso es asegurarse de que la solicitud funcione como se espera en una herramienta como Postman primero y luego usar este proyecto de ejemplo para probar que funciona en su dispositivo.

Para analizar los datos JSON, recomendaría usar ArudinoJSON en la mayoría de los escenarios, si esto es algo sobre lo que le gustaría recibir instrucciones, ¡hágamelo saber!

Paso 4: raspado de datos directamente

Extracción de datos directamente
Extracción de datos directamente
Extracción de datos directamente
Extracción de datos directamente
Extracción de datos directamente
Extracción de datos directamente

A continuación, veremos cómo raspar los datos directamente de la página web, esto es solicitar la página web completa en el dispositivo y analizar los datos que queremos. Ya mencioné las ventajas de la API no pública sobre este método, ¡pero a veces las necesidades deben hacerlo!

Una cosa que es importante tener en cuenta aquí, si está familiarizado con el desarrollo web, es posible que esté acostumbrado a usar la función inspeccionar elemento para encontrar información sobre un elemento en particular y cómo está estructurado. Esto debe evitarse con este enfoque, porque las páginas web modernas generalmente se cambian dinámicamente usando Javascript, lo que no sucederá en su dispositivo. El código HTML que está disponible en su dispositivo solo será la página web original que se descargó. Un buen ejemplo de esto es la página TeamTrees, el recuento de donaciones actual comienza en 0 y se carga en la página más tarde con esta animación, pero a diferencia de los dos ejemplos que hemos visto antes, no carga los datos en segundo plano, por lo que los datos correctos deben estar en otro lugar.

Para ver el código original de la página web, puede hacer clic derecho en la página y seleccionar "Ver código fuente". Luego, desea buscar los datos particulares que desea, por lo que en el ejemplo de TeamTrees, cuando buscamos el recuento de donaciones actual, podemos ver que el recuento real se almacena en la propiedad de recuento de datos del elemento de recuento, aquí es donde necesitamos raspar los datos de.

Necesita encontrar una cadena de búsqueda que lo lleve a sus datos. Es mucho más fácil averiguarlo antes de codificar el dispositivo. Para este ejemplo, la búsqueda de “recuento de datos \””me lleva directamente a los datos que queremos, lo cual es perfecto. No debemos preocuparnos de que también coincida en otros lugares de la página, porque llegará primero al primer lugar. Si necesitaras presionar el tercero, puedes programarlo para ignorar los primeros 2 que presionaste.

Si echamos un vistazo al ejemplo de TeamTrees, como antes, saltamos los encabezados de respuesta y ahora estamos mirando el cuerpo de la respuesta (que es la página web). Lo que vuelve del cliente es un flujo de datos. No nos importa nada hasta nuestra consulta de búsqueda, por lo que hacemos un client.find. Si encuentra la consulta de búsqueda, devolverá verdadero y moverá la secuencia al final de la consulta. Lo siguiente que estará disponible de la secuencia serán los datos que estamos buscando, pero en este caso no estamos seguros de cuánto tiempo serán los datos, pero sí sabemos que es toda la información entre nuestro lugar actual en la secuencia y la siguiente coma invertida.. Podemos lograr esto usando "client.readBytesUntil" que hace lo que dice, lee los bytes en un búfer hasta que llega a la consulta especificada. Solo asegúrese de que el búfer en el que está leyendo sea lo suficientemente grande para contener todos los datos, ¡creo que estamos bastante seguros aquí con 32!

Si tiene todos los datos que necesita, no necesita leer más datos. No cerré la conexión aquí porque no parecía causar un problema en el ESP8266, parecía causar problemas con el ESP32, así que agregué un client.stop (). Para ser completamente honesto, no estoy seguro de por qué lo coloqué en la parte superior del método, creo que tendría más sentido cerrarlo una vez que tenga los datos que desea.

Paso 5: Extracción de datos mediante un servidor externo:

Extracción de datos mediante un servidor externo
Extracción de datos mediante un servidor externo
Extracción de datos mediante un servidor externo
Extracción de datos mediante un servidor externo

Solo otro tema para tocar, hay herramientas mucho mejores para analizar en entornos normales basados en computadora como NodeJS que en un microcontrolador, por lo que a veces puede tener sentido crear un servicio que obtenga los datos de una página web y proporcione una punto final para su ESP8266 o ESP32. Un ejemplo de esto fue raspar la página de CrowdSupply para obtener un recuento en vivo de cuántos TinyPICO se vendieron. Puede haber sido posible lograrlo directamente en un ESP8266 o ESP32, pero como estaba analizando múltiples puntos de datos diferentes en varios elementos diferentes, habría sido complicado.

Terminé creando un proyecto NodeJS y analicé los datos usando una biblioteca llamada cheerio y funcionó muy bien. Alojé este proyecto en un servidor en la nube que ya tenía, pero podrías ejecutar este tipo de proyecto en un pi si no tuvieras algo como esa configuración.

Paso 6: límites de uso

Límites de uso
Límites de uso

Una cosa que podría afectar potencialmente a todos estos enfoques es alcanzar los límites de uso de los sitios. En las API normales, normalmente está bastante bien documentado cuántas solicitudes puede realizar por minuto o por día y puede limitar las solicitudes de sus proyectos en función de esto. Cuando está raspando, no sabe cuáles son estos límites, por lo que corre el riesgo de alcanzarlos y potencialmente ser bloqueado. No puedo darte ningún consejo exacto sobre cómo limitarlo para que permanezcas en sus buenos libros, pero creo que cualquier cosa debajo de cada minuto sería demasiado frecuente, aparte de tal vez casos como el kickstarter donde parecen hacer solicitudes cada pocos segundos.

Paso 7: ¡Gracias por leer

Con suerte, este video le ayudó si está interesado en analizar datos directamente desde páginas web en su ESP8266 o ESP32. ¿Tiene alguna otra pregunta sobre el tema que no cubrí? Házmelo saber en los comentarios a continuación, o únete a mí y a un grupo de otros fabricantes en mi servidor de Discord, donde podemos discutir este tema o cualquier otro fabricante relacionado que tengas, la gente es realmente útil allí, por lo que es un gran lugar para pasar el rato. fuera

También me gustaría agradecer enormemente a mis patrocinadores de Github que me ayudan a respaldar lo que hago. Realmente lo aprecio. Si no lo sabe, Github está emparejando patrocinios durante el primer año, por lo que si realiza un patrocinio, lo igualarán al 100% durante los próximos meses.

¡Gracias por leer!

Recomendado: