Det var en god solrig dag i Seattle, og min kone ønskede at have den berømte virale Dubai Chocolate Pistachio Shake. Med spænding besluttede vi at besøge den nærmeste Shake Shack, og til vores overraskelse blev den solgt ud, og vi blev bedt om at ringe til dem før besøget. Der er ingen garanti for, at den vil være tilgængelig den næste dag også på grund af begrænset forsyning. To dage senere gik jeg der igen for at se, om der ville være nogen, og igen blev jeg konfronteret med skuffelse. jeg kunne ikke lide den måde, jeg enten skal ringe til dem for at tjekke for et element eller gå til deres butik for at tjekke, om det er tilgængeligt. Det førte til nogle ideer for mig: Hvad hvis der var en AI, der ville foretage opkaldene for mig og opdatere mig, når jeg har brug for en reservation, eller vente i den lange linje for kundeopkald, og oprette forbindelse med mig, når jeg er klar til at tale med nogen? Er der en måde at få besked på, når et element er tilgængeligt på Shake Shack? Hvis det ikke er der, kan jeg opbygge en cloudinfrastruktur til dette? Det er muligt at kontrollere, om et element er tilgængeligt og tilføje det til kurven til online bestilling, hvilket betyder, at der er nogle netværksopkald, hvorigennem vi kan identificere, om Dubai Chocolate Pistachio Shake er tilgængelig. Implementation gennemførelse For at få oplysninger om tilgængelighed, har vi brug for et par datapunkter. Er der en måde at få oplysninger fra butikken på? Hvordan kan man skelne, om en butik har en shake eller ej? For at få butiksoplysninger, når vi åbner inspektionselementet og ser på netværksopkald, når vi vælger Washington, ser vi et par interessante opkald. Staten Washington har syv steder, og vi skal vide, hvilken af disse har rystelsen. Hvis vi ser på svaret fra regionens information, var vi i stand til at få alle de statslige oplysninger. 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' Ifølge dette er WA-id'et a3d65b58-ee3c-42af-adb9-9e39e09503c3, og vi ser butiksoplysningerne, hvis vi videregiver regionId til API'en. 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' Denne information er stadig ikke tilstrækkelig, indtil vi ved, hvordan man kommer til en butik side og identificere tilgængeligheden. Hvis en butik har en shake, vil det vise Dubai shake i shake sektionen. Og efter at have undersøgt curl-opkaldene, ser jeg opkaldet til menupunktet. 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' Hvis en shake er tilgængelig, så ser vi det i produktdelen. Hvis en butik ikke har det, så vil vi ikke se det i svaret. Så alt vi skal gøre er at få alle butiksoplysningerne og kontrollere, hvilke butikker der har rystet. Hvis du kigger ind i butiksforespørgsler, er dets oloId forbundet i forespørgslerne relateret til en butik. Dette kan kortlægges til butiksoplysningerne fra de foregående forespørgsler, ved hjælp af hvilke jeg var i stand til at få alle butiks-id'er. Med nogle grundlæggende shell scripting, var jeg i stand til at oprette denne curl script, som vil fortælle, hvilken butik vil have rystelsen. 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 Hvor hver butik er storeId, og jeg brugte jq-biblioteket til at formatere svaret til JSON-udgang, og gjorde et greb på dette navn, vil butikker, der har rystelsen, give et hit. Sample svar Baseret på dette ved vi, at butikkerne 82099, 62274, og 96570 har rystelserne, og jeg fik butiksadressen fra de foregående opkald og fik rystelserne. :) Conclusion Konklusionen I dette dokument gik vi gennem netværksopkaldene for at identificere de oplysninger, vi har brug for, og fandt også en måde at få butiksoplysninger gennem deres netværksopkald. Dette vil være et fremskridt, der vil fjerne visse QA-relaterede job fra branchen (vi er ikke der endnu, men vi vil være i den position meget snart). De fleste af de tilgange, vi så i dag, var manuelle.I mine næste artikler vil jeg vise, hvordan vi kan tage denne enkle idé og bygge en cloudinfrastruktur omkring den. En cloud-baseret serverløs opkald for at få oplysninger fra internettet. En cloud-baseret trigger-tjeneste, der vil udløse det serverløse opkald. Et lagringssystem til at gemme disse data til caching – hvor kan vi gemme svarene? Et notifikationssystem til at underrette via en mobilapp eller på forskellige andre måder. Hvis vi får nok datapunkter, vil jeg vise, hvordan man opbygger en ML-model ved hjælp af knappe datapunkter. Dette er til uddannelsesmæssige formål; jeg og min partner (SGG) tog dette virkelige eksempel til at opbygge en cloud-infrastruktur, og koden og andre artefakter vil ikke blive offentliggjort for at sikre, at Shake Shack-websteder ikke overbelastes.