Ito ay isang magandang araw na sunrise sa Seattle, at ang aking asawa ay nais na magkaroon ng kilala na viral Dubai Chocolate Pistachio Shake. Sa pag-uugali, nagsisimula namin upang bisitahin ang malapit na Shake Shack, at sa aming pag-uugali, ito ay na-sale, at kami ay sinabi na i-call ang mga ito bago upang bisitahin. Walang garantiya na ito ay magagamit sa susunod na araw tulad ng dahil sa limitadong supply. Dalawang araw pagkatapos, ako ay dumating din dito upang makita kung mayroon ka ng anumang, at lagi ako ay nakikipag-usap sa disappointment. Hindi ko na gusto ang paraan, ako ay mayroon na rin ang mga ito upang i-check para sa isang item o pumunta sa kanilang store upang i-check kung ito ay magagamit. Ito ay nagpapakita ng ilang mga ideya para sa akin: Paano kung may isang AI na gawin ang mga telepono para sa akin at i-update sa akin kapag kailangan ko ng isang reservation, o maghintay sa dugo na linya para sa mga customer calls, at mag-connect sa akin kapag ako ay handa na mag-talk sa isang tao? Mayroon ba ang isang paraan upang makatanggap ng notification kapag ang isang item ay magagamit sa Shake Shack? Kung hindi ito magagamit, maaari kong bumuo ng isang cloud infrastructure para sa ito? Magpatuloy sa aking mga pag-iisip sa aking ikalawang ideya, nagsimula ako sa paghahanap sa kanilang website. Maaari na i-check kung isang item ay magagamit at i-upload ito sa cart para sa online ordering, na kung saan ay mayroong ilang network calls sa pamamagitan ng kung saan maaari naming i-identify kung ang Dubai Chocolate Pistachio Shake ay magagamit. Implementation Implementasyon Upang makakuha ng impormasyon tungkol sa availability, kailangan namin ng ilang data points. Mayroon bang isang paraan upang makakuha ng impormasyon sa shop? Paano malaman kung ang isang shop ay may isang shake o hindi? Para sa pagkuha ng impormasyon sa store, kapag nag-open namin ang inspect element at tingnan ang network calls, kapag nag-select ang Washington, nakita namin ang ilang mga interesado na calls. Ang estado ng Washington ay may 7 mga lokasyon, at kailangan naming malaman kung ano sa mga ito ay may shake. Kapag nakikita natin ang reaksyon ng impormasyon ng rehiyon, kami ay maaaring makakuha ng lahat ng impormasyon ng estado. 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' Ayon dito, ang WA ID ay a3d65b58-ee3c-42af-adb9-9e39e09503c3, at makikita natin ang impormasyon ng store kung ipasok namin ang regionId sa 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' Ang impormasyon na ito ay hindi sapat hanggang alam namin kung paano pumunta sa isang pahina ng store at i-identify ang availability. Kung may isang store ay may isang shake, ito ay ipakita ang Dubai shake sa shake section. At pagkatapos ng pag-aaral ng mga curl calls, nakita ko ang call para sa pagpipilian ng 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' Kung isang shake ay magagamit, pagkatapos ay nakita namin ito sa seksyon ng produkto. Kung ang isang store ay hindi may ito, pagkatapos ay hindi namin makita ito sa pag-response. Kaya, ang lahat ng kailangan natin ay upang gawin ay makakuha ng lahat ng impormasyon ng store at i-verify kung saan ang mga store ay may shake. Kung makikita mo sa mga queries ng store, ang oloId nito ay naka-link sa mga queries na may kaugnayan sa isang store. Ito ay maaaring mapapagsasama sa impormasyon ng store mula sa mga previous queries, sa pamamagitan ng kung saan ako ay maaaring makakuha ng lahat ng mga ID ng store. Sa pamamagitan ng ilang pangunahing shell scripting, ako ay maaaring lumikha ng curl script na ito, na kung saan ay sabihin kung ano ang store ay may 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 Kung ang bawat store ay ang storeId, at ginagamit ko ang jq library upang format ang pag-reply sa JSON output, at ginawa ang isang pag-grep sa pangalan na ito, mga store na may ang shake ay magbibigay ng isang hits. Mga sample ng reaksyon Basahin sa ito, alam namin na ang mga store 82099, 62274, at 96570 ay may mga shakes, at nakita ko ang address ng store mula sa mga nakaraang mga telepono at nakuha ang mga shakes. :) Conclusion Konklusyon Sa dokumento na ito, natapos namin ang mga network calls upang matukoy ang impormasyon na kailangan namin at din natagpuan ang isang paraan upang makakuha ng impormasyon sa store sa pamamagitan ng kanilang network calls. Iyon ay sinabi, maaari naming automatize ito sa pamamagitan ng Selenium (na kung saan ay compute-heavy), o maaari naming gamitin ang isang AI upang i-analysis ang website at natagpuan ang isang paraan upang makuha ang infrastructure na ito para sa amin. Ito ay isang pag-unlad na magbigay ng anumang mga trabaho na may kaugnayan sa QA mula sa industriya (hindi namin pa rin, ngunit kami ay magiging sa posisyon na ito malapit na). Ang karamihan ng mga paraan na nakita namin ngayon ay manual. Sa aking mga sumusunod na mga artikulo, iyan ay nagpapakita kung paano maaari naming gamitin ang simple na ideya at bumuo ng isang cloud infrastructure sa paligid nito. Ang isang cloud-based serverless call upang makakuha ng impormasyon mula sa web. Ang isang cloud-based trigger service na mag-activate ang serverless call. Ang isang storage system upang i-storage ang data na ito para sa caching - kung saan maaari naming i-storage ang mga reaksyon? Ang isang sistema ng notification upang i-notify sa pamamagitan ng isang mobile app o sa iba't ibang mga paraan. Kung makakuha namin ng sapat na mga data points, iyan ay nagpapakita ko kung paano bumuo ng isang ML model gamit ang mga sparse data points. Ito ay para sa pananaliksik; ako at ang aking kumpanya (SGG) ay naka-take ng real-world na halimbawa upang bumuo ng isang cloud infrastructure, at ang code at iba pang mga artifacts ay hindi na-publish upang matugunan ang mga website ng Shake Shack ay hindi overloaded.