Het was een goede zonnige dag in Seattle, en mijn vrouw wilde de beroemde virale Dubai Chocolate Pistachio Shake hebben. Met opwinding besloten we om de dichtstbijzijnde Shake Shack te bezoeken, en tot onze verrassing werd het uitverkocht, en we werden gevraagd om ze te bellen voordat we bezochten. Er is geen garantie dat het de volgende dag beschikbaar zal zijn ook vanwege de beperkte aanbod. Twee dagen later ging ik daar opnieuw om te zien of er een zou zijn, en opnieuw werd ik geconfronteerd met teleurstelling. ik vond de manier niet leuk, ik moet ze ofwel bellen om een item te controleren of naar hun winkel te gaan om te controleren of het beschikbaar is. Dit leidde tot een paar ideeën voor mij: Wat als er een AI was die de oproepen voor mij zou doen en me zou bijwerken wanneer ik een reservering nodig heb, of in die lange rij zou wachten voor klantoproepen, en met me zou verbinden wanneer ik klaar ben om met iemand te praten? Is er een manier om me op de hoogte te stellen wanneer een item beschikbaar is bij Shake Shack? Het is mogelijk om te controleren of een item beschikbaar is en toe te voegen aan de mand voor online bestelling, wat betekent dat er een aantal netwerkoproepen zijn waardoor we kunnen identificeren of de Dubai Chocolate Pistachio Shake beschikbaar is. Implementation Uitvoering Om de informatie over beschikbaarheid te krijgen, hebben we een paar gegevenspunten nodig. Is er een manier om informatie van de winkel te krijgen? Hoe te onderscheiden of een winkel een shake heeft of niet? Voor het verkrijgen van winkelinformatie, wanneer we het inspectielement openen en kijken naar netwerkoproepen, wanneer we Washington selecteren, zien we een paar interessante oproepen. De staat Washington heeft zeven locaties, en we moeten weten welke van deze de schok heeft. Als we kijken naar de reactie van de regio-informatie, konden we alle staatsinformatie krijgen. 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' Volgens dit is de WA-ID a3d65b58-ee3c-42af-adb9-9e39e09503c3, en we zien de winkelinformatie als we regionId doorgeven aan de 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' Deze informatie is nog steeds niet voldoende totdat we weten hoe je naar een winkelpagina kunt gaan en de beschikbaarheid kunt identificeren.Als een winkel een shake heeft, wordt de Dubai shake in de shake-sectie weergegeven. En na het onderzoeken van de curl-oproepen, zie ik de oproep voor de menu-optie. 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' Als er een shake beschikbaar is, dan zien we het in het productgedeelte. Als een winkel het niet heeft, dan zien we het niet in de reactie. Dus alles wat we hoeven te doen is alle winkelinformatie te krijgen en te controleren welke winkels de shake hebben. Als je naar de winkelquêtes kijkt, is zijn oloId gekoppeld in de queries met betrekking tot een winkel. Dit kan worden gemarkeerd naar de winkelinformatie van de vorige queries, waarmee ik alle winkel-ID's kon krijgen. Met wat basis shell scripting, was ik in staat om dit curl script te maken, die zal vertellen welke winkel de shake zal hebben. 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 Waar elke winkel de storeId is, en ik de jq-bibliotheek gebruikte om de reactie in de JSON-uitvoer te formatteren, en een greep op deze naam maakte, zullen winkels die de shake hebben een hit geven. Sample reactie Op basis hiervan weten we dat winkels 82099, 62274, en 96570 de schudden hebben, en ik kreeg het winkeladres van de vorige oproepen en kreeg de schudden. :) Conclusion Conclusie In dit document hebben we de netwerkoproepen doorlopen om de informatie te identificeren die we nodig hebben en hebben we ook een manier bedacht om de winkelinformatie te krijgen via hun netwerkoproepen. dat gezegd hebbende, we kunnen dit ook automatiseren via Selenium (wat computationeel zwaar is), of we kunnen een AI gebruiken om de website te analyseren en een manier vinden om deze infrastructuur voor ons klaar te maken. Dit zal een vooruitgang zijn die bepaalde QA-gerelateerde banen uit de industrie zal verwijderen (we zijn er nog niet, maar we zullen binnenkort in die positie zijn). In mijn volgende artikelen zal ik laten zien hoe we dit eenvoudige idee kunnen nemen en eromheen een cloudinfrastructuur kunnen bouwen. Een op cloud gebaseerde serverloze oproep om de informatie van het web te krijgen. Een op de cloud gebaseerde triggerdienst die de serverloze oproep zal activeren. Een opslagsysteem om deze gegevens voor caching op te slaan – waar kunnen we de antwoorden opslaan? Een meldingssysteem om te informeren via een mobiele app of op verschillende andere manieren. Als we genoeg gegevenspunten krijgen, laat ik je zien hoe je een ML-model kunt bouwen met behulp van schaarse gegevenspunten. Dit is voor educatieve doeleinden; ik en mijn partner (SGG) hebben dit echte voorbeeld genomen om een cloudinfrastructuur te bouwen, en de code en andere artefacten worden niet gepubliceerd om ervoor te zorgen dat Shake Shack-websites niet overbelast worden.