Foi um bom dia ensolarado em Seattle, e minha esposa queria ter o famoso Shake de Chocolate Pistachio viral de Dubai. Com entusiasmo, decidimos visitar o Shake Shack mais próximo, e para nossa surpresa, foi vendido e foi-nos dito para chamá-los antes de visitar. Não há garantia de que ele estará disponível no dia seguinte também por causa da oferta limitada. Dois dias depois, fui lá novamente para ver se haveria algum, e novamente eu estava enfrentando decepção. eu não gostei da maneira, eu tenho que ligar para eles para verificar um item ou ir para sua loja para verificar se está disponível. Isso me trouxe algumas ideias: E se houvesse uma IA que fizesse as chamadas por mim e me atualizasse quando eu precisasse de uma reserva, ou esperasse naquela longa linha para chamadas de clientes, e me conectasse comigo quando eu estivesse pronto para falar com alguém? Existe uma maneira de ser notificado quando um item está disponível no Shake Shack?Se ele não estiver lá, posso construir uma infraestrutura de nuvem para isso? Continuando com meus pensamentos sobre minha segunda ideia, comecei a olhar para o site deles.É possível verificar se um item está disponível e adicioná-lo ao carrinho para encomenda on-line, o que significa que existem algumas chamadas de rede através das quais podemos identificar se o Dubai Chocolate Pistachio Shake está disponível. Implementation Implementação Para obter as informações sobre a disponibilidade, precisamos de alguns pontos de dados. Existe alguma forma de obter informações da loja? Como diferenciar se uma loja tem um shake ou não? Para obter informações de loja, quando abrimos o elemento de inspeção e olhamos para chamadas de rede, quando selecionamos Washington, vemos algumas chamadas interessantes. O estado de Washington tem sete locais, e precisamos saber qual deles tem o choque. Se olharmos para a resposta da informação da região, fomos capazes de obter todas as informações estatais. 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 acordo com isso, o WA ID é a3d65b58-ee3c-42af-adb9-9e39e09503c3, e vemos as informações da loja se passarmos regionId para a 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 informação ainda não é suficiente até que saibamos como chegar a uma página da loja e identificar a disponibilidade.Se uma loja tem um shake, ele exibirá o shake de Dubai na seção de shake. E depois de investigar as chamadas de curl, vejo a chamada para a opção de menu. 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' Se um shake está disponível, então vemos na seção de produtos. Se uma loja não tem isso, então não o veremos na resposta. Portanto, tudo o que precisamos fazer é obter todas as informações da loja e verificar quais lojas têm o shake. Se você olhar para as consultas da loja, seu oloId está vinculado nas consultas relacionadas a uma loja. Isto pode ser mapeado para as informações da loja das consultas anteriores, usando o qual eu pude obter todos os IDs da loja. Com algum script shell básico, pude criar este script curl, que dirá qual loja terá o 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 Onde cada loja é a storeId, e eu usei a biblioteca jq para formatar a resposta em saída JSON, e fiz uma pegada nesse nome, lojas que têm o shake darão um hit. Sample Resposta Com base nisso, sabemos que as lojas 82099, 62274, e 96570 têm os shakes, e eu recebi o endereço da loja de chamadas anteriores e recebi os shakes. :) Conclusion CONCLUSÃO Neste documento, passamos pelas chamadas de rede para identificar as informações que precisamos e também descobrimos uma maneira de obter as informações da loja através de suas chamadas de rede.Dito isto, também podemos automatizar isso através do Selenium (que é pesado em computação), ou podemos usar uma IA para analisar o site e descobrir uma maneira de preparar esta infraestrutura para nós. Este será um avanço que removerá certos empregos relacionados à QA da indústria (não estamos lá ainda, mas estaremos nessa posição muito em breve). A maioria das abordagens que vimos hoje foram manuais.Em meus próximos artigos, mostrarei como podemos tomar essa ideia simples e construir uma infraestrutura de nuvem ao redor dela. Uma chamada sem servidor baseada em nuvem para obter as informações da web. Um serviço de desencadeamento baseado em nuvem que irá desencadear a chamada sem servidor. Um sistema de armazenamento para armazenar esses dados para cache – onde podemos armazenar as respostas? Um sistema de notificação para notificar através de um aplicativo móvel ou de várias outras formas. Se estivermos obtendo pontos de dados suficientes, vou mostrar como construir um modelo de ML usando pontos de dados escassos. Isso é para fins educacionais; eu e meu parceiro (SGG) tomamos este exemplo do mundo real para construir uma infraestrutura de nuvem, e o código e outros artefatos não serão publicados para garantir que os sites do Shake Shack não sejam sobrecarregados.