Seattle'da iyi bir güneşli gündi ve karım ünlü viral Dubai Çikolata Pistachio Shake'u almak istiyordu. Heyecanla, en yakın Shake Shack'ı ziyaret etmeye karar verdik ve şaşkınlığımızdan dolayı satıldı ve ziyaret etmeden önce onları aramak istedik. Sınırlı tedarik nedeniyle ertesi gün de kullanılabilir olacağına dair bir garanti yok. İki gün sonra, bir şey olup olmadığını görmek için tekrar oraya gittim ve yine hayal kırıklığıyla karşı karşıya kaldım. yolu beğenmedim, ya bir öğeyi kontrol etmek için onlara telefon etmeliyim ya da mevcut olup olmadığını kontrol etmek için mağazalarına gitmeliyim. Bu da bana birkaç fikir getirdi: Benim için çağrı yapacak ve rezervasyon ihtiyacım olduğunda beni güncelleyecek bir AI olsaydı, ya da müşteri aramaları için o uzun çizgide bekleyecek ve biriyle konuşmaya hazır olduğumda benimle iletişime geçecek olsaydı ne olurdu? Bir öğe Shake Shack'ta kullanılabilir olduğunda bildirim almanın bir yolu var mı? eğer yoksa bunun için bir bulut altyapısı oluşturabilir miyim? İkinci fikrimle ilgili düşüncelerimi devam ettirerek, web sitelerine bakmaya başladım. bir öğenin mevcut olup olmadığını kontrol etmek ve çevrimiçi sipariş için arabaya eklemek mümkündür, bu da Dubai Çikolata Pistachio Shake'nin mevcut olup olmadığını belirleyebileceğimiz bazı ağ aramaları anlamına gelir. Implementation Uygulama Kullanılabilirlik hakkında bilgi almak için, birkaç veri noktasına ihtiyacımız var. Mağaza hakkında bilgi almak için bir yol var mı? Bir dükkanın bir shake olup olmadığını nasıl ayırt edersiniz? Mağaza bilgileri almak için, inceleme öğesini açtığımızda ve ağ çağrılarına baktığımızda, Washington'ı seçtiğimizde, birkaç ilginç çağrı görüyoruz. Washington eyaletinde yedi yer var ve bunlardan hangisinin çarpıştığını bilmemiz gerekiyor. Bölge bilgilerin yanıtını incelersek, tüm devlet bilgilerini elde edebilirdik. 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' Buna göre, WA ID a3d65b58-ee3c-42af-adb9-9e39e09503c3 ve API'ye regionId iletirseniz depolama bilgileri görürüz. 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' Bu bilgi, bir mağaza sayfasına nasıl gidileceğini ve kullanılabilirliğini tespit edeceğimizi bilene kadar hala yeterli değildir. eğer bir mağazada bir şake varsa, şake bölümünde Dubai şake'i gösterecektir. Ve curl çağrılarını inceledikten sonra, menü seçeneği için çağrı görüyorum. 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' Bir şeker mevcutsa, o zaman ürün bölümünde göreceğiz. Eğer bir mağaza sahip değilse, o zaman cevapta görmeyeceğiz. Yani, yapmamız gereken tek şey tüm mağaza bilgileri almak ve hangi mağazaların çarpışması olduğunu doğrulamak. eğer mağaza sorgularına bakarsanız, onun oloId bir mağaza ile ilgili sorgularda bağlantılıdır. Bu, önceki sorgulardan mağaza bilgileri ile haritalanabilir, kullandığımda tüm mağaza kimliklerini elde edebilirdim. Bazı temel kabuk scriptleri ile, hangi mağazanın çarpışması olacağını söyleyecek bu curl senaryosunu oluşturabildim. 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 Her mağaza storeId'dir ve cevapları JSON çıkışına biçimlendirmek için jq kütüphanesini kullandım ve bu isme bir yaklaşım yaptım, shake olan mağazalar bir hit verecektir. örnek cevap Buna dayanarak, 82099, 62274 ve 96570 mağazalarının titreşimleri olduğunu biliyoruz ve önceki çağrılardan mağazanın adresini aldım ve titreşimleri aldım. :) Conclusion Sonuç Bu belgede, ihtiyaç duyduğumuz bilgileri tanımlamak için ağ aramalarını inceledik ve aynı zamanda ağ aramaları aracılığıyla mağaza bilgilerini elde etmenin bir yolunu bulduk. Bu, endüstriden bazı QA ile ilgili işleri kaldıracak bir ilerleme olacaktır (ben henüz orada değilim, ancak çok yakında o pozisyonda olacağım). Bugün gördüğümüz yaklaşımların çoğu manueldi. Sonraki makalelerimde, bu basit fikri nasıl alabileceğimizi ve bunun etrafında bir bulut altyapısı oluşturabileceğimizi göstereceğim. İnternetten bilgi almak için bulut tabanlı bir sunucusuz çağrı. Sunucu olmayan aramayı tetikleyen bulut tabanlı bir trigger hizmetidir. Bu verileri kaydetmek için bir depolama sistemi - yanıtları nerede saklayabiliriz? Bir mobil uygulama aracılığıyla veya çeşitli diğer yollarla bildirim sistemidir. Yeterli miktarda veri noktasını elde edersek, az sayıda veri noktasını kullanarak bir ML modeli nasıl oluşturacağımı göstereceğim. Bu eğitim amaçlıdır; ben ve ortağım (SGG) bulut altyapısını inşa etmek için bu gerçek dünya örneğini kullandık ve kod ve diğer eserler Shake Shack web sitelerinin aşırı yük olmadığından emin olmak için yayınlanmayacak.