Bio je to dobar sunčan dan u Seattleu, a moja supruga je htela da ima poznati viralni Dubai Chocolate Pistachio Shake. S uzbuđenjem, odlučili smo da posjetimo najbliži Shake Shack, i na naše iznenađenje, bio je isprodan, i rekli su nam da ih nazovemo prije posete. Nema garancije da će biti dostupan sljedeći dan, kao i zbog ograničene ponude. Dva dana kasnije, opet sam otišao tamo da vidim da li bi bilo, a opet sam se suočio sa razočaranjem. nisam volio način, moram ih nazvati da provjerim stavku ili idem u njihovu prodavnicu da provjerim da li je dostupna. To je dovelo do nekoliko ideja za mene: Što ako postoji AI koji će obaviti pozive za mene i ažurirati me kada mi je potrebna rezervacija, ili čekati u toj dugoj liniji za pozive klijenata, i povezati se sa mnom kada sam spreman da razgovaram s nekim? Postoji li način da budem obavešten kada je stavka dostupna na Shake Shack? Ako nije tamo, mogu li za to izgraditi infrastrukturu u oblaku? Moguće je provjeriti da li je stavka dostupna i dodati je u košaricu za online naručivanje, što znači da postoje neki mrežni pozivi kroz koje možemo utvrditi da li je Dubai Chocolate Pistachio Shake dostupan. Implementation Implementacija Da bismo dobili informacije o dostupnosti, potrebni su nam neki podaci. Postoji li način da se dobiju informacije o prodavnici? Kako razlikovati da li prodavnica ima šejk ili ne? Za dobijanje informacija o trgovini, kada otvorimo element inspekcije i pogledamo mrežne pozive, kada izaberemo Washington, vidimo nekoliko zanimljivih poziva. Država Washington ima sedam lokacija, i moramo znati koja od njih ima potres. Ako pogledamo odgovor regionalnih informacija, mogli smo dobiti sve državne informacije. 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' Prema tome, WA ID je a3d65b58-ee3c-42af-adb9-9e39e09503c3, i vidimo informacije o skladištu ako prenesemo regionId na 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' Ove informacije još uvek nisu dovoljne dok ne znamo kako da dođemo na stranicu trgovine i identificiramo dostupnost. Ako trgovina ima shake, ona će prikazati Dubai shake u odeljku shake. I nakon istraživanja curl poziva, vidim poziv za opciju menija. 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' Ako je shake dostupan, onda ga vidimo u odeljku proizvoda. Ako prodavnica nema, onda ga nećemo vidjeti u odgovoru. Dakle, sve što trebamo učiniti je da dobijemo sve informacije o prodavnici i proverimo koje prodavnice imaju potres. Ako pogledate u upite u prodavnici, njegov oloId je povezan u upitima vezanim za prodavnicu. Ovo se može mapirati na informacije o prodavnici iz prethodnih upita, pomoću kojih sam mogao dobiti sve ID-ove prodavnica. Uz neku osnovnu shell skripting, bio sam u mogućnosti da kreiram ovaj curl script, koji će reći koja prodavnica će imati 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 Gde je svaka prodavnica storeId, a ja sam koristio jq biblioteku da formatiram odgovor u JSON izlaz, i napravio grep na ovom imenu, prodavnice koje imaju šok će dati hit. Sample odgovor Na osnovu toga, znamo da prodavnice 82099, 62274, i 96570 imaju potrese, a ja sam dobio adresu prodavnice iz prethodnih poziva i dobio potrese. :) Conclusion Zaključak U ovom dokumentu smo prošli mrežne pozive kako bismo identificirali informacije koje su nam potrebne, a takođe smo pronašli način da dobijemo informacije o prodavnici putem njihovih mrežnih poziva. To je rekao, možemo i automatizovati ovo kroz Selenium (koji je računarski težak), ili možemo koristiti AI da analiziramo web stranicu i pronađemo način da ova infrastruktura bude spremna za nas. To će biti napredak koji će ukloniti određene poslove vezane za QA iz industrije (nismo još tamo, ali ćemo biti u toj poziciji vrlo brzo). Većina pristupa koje smo danas videli su bili ručni. U mojim narednim člancima, pokazaću kako možemo uzeti ovu jednostavnu ideju i izgraditi infrastrukturu oblaka oko nje. Poziv bez servera zasnovan na oblaku za dobijanje informacija sa mreže. Usluga pokretača zasnovana na oblaku koja će pokrenuti poziv bez servera. Sistem skladištenja za skladištenje ovih podataka za caching – gde možemo skladištiti odgovore? Sistem obaveštenja za obaveštenje putem mobilne aplikacije ili na razne druge načine. Ako dobijemo dovoljno podataka, pokazaću vam kako izgraditi ML model pomoću rijetkih podataka. Ovo je u obrazovne svrhe; ja i moj partner (SGG) smo uzeli ovaj pravi primer za izgradnju infrastrukture u oblaku, a kod i drugi artefakti neće biti objavljeni kako bi se osiguralo da web stranice Shake Shack nisu preopterećene.