Fue un buen día soleado en Seattle, y mi esposa quería tener el famoso Shake de Chocolate Pistachio viral de Dubai. Con emoción, decidimos visitar el Shake Shack más cercano, y a nuestra sorpresa, se vendió y nos dijeron que los llamáramos antes de visitar. No hay garantía de que estará disponible el día siguiente también debido a la oferta limitada. Dos días más tarde, volví allí para ver si habría algún, y de nuevo me enfrenté a la decepción. no me gustó la manera, o tengo que llamarles para comprobar un artículo o ir a su tienda para comprobar si está disponible. Esto me llevó a algunas ideas: ¿Y si hubiera una IA que hiciera las llamadas por mí y me actualizara cuando necesite una reserva, o esperara en esa larga línea para las llamadas de los clientes, y se conectara conmigo cuando estuviera listo para hablar con alguien? ¿Hay una manera de ser notificado cuando un artículo está disponible en Shake Shack? Si no está allí, ¿puedo construir una infraestructura en la nube para ello? Continuando con mis pensamientos sobre mi segunda idea, empecé a mirar en su sitio web. Es posible comprobar si un artículo está disponible y añadirlo a la cesta para el pedido en línea, lo que significa que hay algunas llamadas de red a través de las cuales podemos identificar si el Shake de Chocolate Pistachio de Dubai está disponible. Implementation Implementación Para obtener la información sobre la disponibilidad, necesitamos algunos puntos de datos. ¿Hay alguna manera de obtener información de la tienda? ¿Cómo diferenciar si una tienda tiene un shake o no? Para obtener información de la tienda, cuando abrimos el elemento de inspección y miramos las llamadas de red, cuando seleccionamos Washington, vemos algunas llamadas interesantes. El estado de Washington tiene siete ubicaciones, y necesitamos saber cuál de ellas tiene el temblor. Si miramos la respuesta de la información de la región, pudimos obtener toda la información estatal. curl 'https://ssma24.com/production-location/regions?isAlpha=true' \ -H 'accept: */*' \ -H 'accept-language: en-US,en;q=0.9' \ -H 'authorization: Basic removedSecretCodeHere==' \ -H 'cache-control: no-cache' \ -H 'origin: https://shakeshack.com' \ -H 'platform-os: macos' \ -H 'platform-version: 1.71.20' \ -H 'pragma: no-cache' \ -H 'priority: u=1, i' \ -H 'referer: https://shakeshack.com/' \ -H 'sec-ch-ua: "Google Chrome";v="131", "Chromium";v="131", "Not_A Brand";v="24"' \ -H 'sec-ch-ua-mobile: ?0' \ -H 'sec-ch-ua-platform: "macOS"' \ -H 'sec-fetch-dest: empty' \ -H 'sec-fetch-mode: cors' \ -H 'sec-fetch-site: cross-site' \ -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36' \ -H 'x-requested-with: XMLHttpRequest' De acuerdo con esto, el WA ID es a3d65b58-ee3c-42af-adb9-9e39e09503c3, y vemos la información de la tienda si pasamos regionId a la API. curl 'https://ssma24.com/production-location/locations?regionId=a3d65b58-ee3c-42af-adb9-9e39e09503c3&channel=WEB&includePrivate=false' \ -H 'accept: */*' \ -H 'accept-language: en-US,en;q=0.9' \ -H 'authorization: Basic removedSecretCodeHere' \ -H 'cache-control: no-cache' \ -H 'origin: https://shakeshack.com' \ -H 'platform-os: macos' \ -H 'platform-version: 1.71.20' \ -H 'pragma: no-cache' \ -H 'priority: u=1, i' \ -H 'referer: https://shakeshack.com/' \ -H 'sec-ch-ua: "Google Chrome";v="131", "Chromium";v="131", "Not_A Brand";v="24"' \ -H 'sec-ch-ua-mobile: ?0' \ -H 'sec-ch-ua-platform: "macOS"' \ -H 'sec-fetch-dest: empty' \ -H 'sec-fetch-mode: cors' \ -H 'sec-fetch-site: cross-site' \ -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36' \ -H 'x-requested-with: XMLHttpRequest' Esta información todavía no es suficiente hasta que sabemos cómo llegar a una página de la tienda e identificar la disponibilidad.Si una tienda tiene un shake, mostrará el shake de Dubai en la sección de shake. Y después de investigar las llamadas curl, veo la llamada para la opción de menú. curl 'https://ssma24.com/v1.0/locations/82099/menus?includeOptionalCategories=utensils&platform=web' \ -H 'accept: */*' \ -H 'accept-language: en-US,en;q=0.9' \ -H 'authorization: Basic removedSecretCodeHere==' \ -H 'cache-control: no-cache' \ -H 'channel: WEB' \ -H 'origin: https://shakeshack.com' \ -H 'platform-os: macos' \ -H 'platform-version: 1.71.20' \ -H 'pragma: no-cache' \ -H 'priority: u=1, i' \ -H 'referer: https://shakeshack.com/' \ -H 'sec-ch-ua: "Google Chrome";v="131", "Chromium";v="131", "Not_A Brand";v="24"' \ -H 'sec-ch-ua-mobile: ?0' \ -H 'sec-ch-ua-platform: "macOS"' \ -H 'sec-fetch-dest: empty' \ -H 'sec-fetch-mode: cors' \ -H 'sec-fetch-site: cross-site' \ -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36' \ -H 'x-requested-with: XMLHttpRequest' Si un shake está disponible, entonces lo vemos en la sección de productos. Si una tienda no la tiene, entonces no la veremos en la respuesta. Por lo tanto, todo lo que necesitamos hacer es obtener toda la información de la tienda y verificar qué tiendas tienen el shake. Si miras a las consultas de la tienda, su oloId está vinculado en las consultas relacionadas con una tienda. Esto puede ser mapeado a la información de la tienda de las consultas anteriores, con la que pude obtener todos los ID de la tienda. Con algún script shell básico, pude crear este script curl, que dirá qué tienda tendrá el shake. for store in 203514 236001 265657 82099 62274 96570 203515; do echo $store curl "https://ssma24.com/v1.0/locations/$store/menus?includeOptionalCategories=utensils&platform=web" \ -H 'accept: */*' \ -H 'accept-language: en-US,en;q=0.9' \ -H 'authorization: Basic removedSecretCodeHere==' \ -H 'cache-control: no-cache' \ -H 'channel: WEB' \ -H 'origin: https://shakeshack.com' \ -H 'platform-os: macos' \ -H 'platform-version: 1.71.20' \ -H 'pragma: no-cache' \ -H 'priority: u=1, i' \ -H 'referer: https://shakeshack.com/' \ -H 'sec-ch-ua: "Google Chrome";v="131", "Chromium";v="131", "Not_A Brand";v="24"' \ -H 'sec-ch-ua-mobile: ?0' \ -H 'sec-ch-ua-platform: "macOS"' \ -H 'sec-fetch-dest: empty' \ -H 'sec-fetch-mode: cors' \ -H 'sec-fetch-site: cross-site' \ -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36' \ -H 'x-requested-with: XMLHttpRequest' | jq| grep '"name": "Dubai Chocolate Pistachio Shake",' done Donde cada tienda es la storeId, y usé la biblioteca jq para formatar la respuesta en la salida JSON, y hice un pegamento en este nombre, las tiendas que tengan el temblor darán un golpe. Respuesta muestra Basándose en esto, sabemos que las tiendas 82099, 62274, y 96570 tienen los temblores, y recibí la dirección de la tienda de las llamadas anteriores y recibí los temblores. :) Conclusion Conclusión En este documento, pasamos por las llamadas de red para identificar la información que necesitamos y también encontramos una manera de obtener la información de la tienda a través de sus llamadas de red. Dicho esto, también podemos automatizar esto a través de Selenium (que es pesado en computación), o podemos usar una IA para analizar el sitio web y encontrar una manera de preparar esta infraestructura para nosotros. Este será un avance que eliminará ciertos puestos de trabajo relacionados con QA de la industria (no estamos allí todavía, pero estaremos en esa posición muy pronto). La mayoría de los enfoques que vimos hoy fueron manuales.En mis próximos artículos, mostraré cómo podemos tomar esta idea simple y construir una infraestructura en la nube alrededor de ella. Una llamada sin servidor basada en la nube para obtener la información de la web. Un servicio de desencadenante basado en la nube que desencadenará la llamada sin servidor. Un sistema de almacenamiento para almacenar estos datos para la caché - ¿dónde podemos almacenar las respuestas? Un sistema de notificación para notificar a través de una aplicación móvil o de varias otras maneras. Si estamos obteniendo suficientes puntos de datos, mostraré cómo construir un modelo de ML utilizando puntos de datos escasos. Esto es para fines educativos; yo y mi socio (SGG) tomamos este ejemplo del mundo real para construir una infraestructura en la nube, y el código y otros artefactos no se publicarán para asegurar que los sitios web de Shake Shack no se sobrecarguen.