それはシアトルで良い日差しだったし、私の妻は有名なDubaiチョコレートピスタキオシェイクが欲しかった。ワクワクしながら、私たちは最も近いシェイクシャックを訪問することを決意し、私たちの驚きに、それは売り切れ、私たちは訪問する前に彼らに電話するように言われました。 限られた供給のため、また次の日に利用可能になる保証はありません。 2日後、私はそれがあるかどうかを確認するために再びそこへ行きました、そしてまた私は失望に直面しました. 私はその方法が気に入らなかった、私は物件をチェックするために彼らに電話するか、またはそれが利用可能かどうかをチェックするために彼らの店へ行く必要があります。 これは私にいくつかのアイデアをもたらしました: 私のために電話をかけ、予約が必要なときに私を更新するAIがあれば、あるいは顧客の電話を待つ長い列で私と連絡を取り、誰かと話す準備ができたらどうでしょうか? いくつかの企業はすでにこれを自動化することに取り組んでいます。 Shake Shack でアイテムが利用可能になったときに通知される方法はありますか? 存在しない場合は、クラウドインフラストラクチャを構築できますか? 私の2番目のアイデアについての考えを続けて、私は彼らのウェブサイトを調べ始めた。 商品が利用可能かどうかをチェックし、オンライン注文のためのトラックに追加することが可能で、ドバイチョコレートピスタキオシェイクが利用可能かどうかを特定できるいくつかのネットワーク通話があることを意味します。 Implementation 実施 可用性に関する情報を得るには、いくつかのデータポイントが必要です。 お店の情報を入手する方法はありますか? 店にシャイクがあるか否かを区別するにはどうすればよいですか? ストア情報を取得するには、チェック要素を開いてネットワーク呼び出しを見ると、ワシントンを選択すると、いくつかの興味深い呼び出しが見られます。 ワシントン州には7つの場所があり、そのうちのどれが震えるかを知る必要があります。 地域の情報の反応を見ると、すべての州の情報を得ることができました。 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' したがって、WA ID は a3d65b58-ee3c-42af-adb9-9e39e09503c3 であり、regionId を 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' この情報は、私たちがストアページにアクセスして利用可能性を特定する方法を知るまでまだ十分ではありません。ストアがシャッケーを持っている場合は、シャッケーセクションにドバイシャッケーを表示します。 そして、カラフルな呼び出しを調べた後、私はメニューオプションの呼び出しを見ます。 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' シェイクが利用可能であれば、製品セクションで見ることができます。 もし店が持っていないならば、私たちは返信でそれを見ることはありません。だから、私たちがやるべきことは、すべての店の情報を取得し、どの店がショックを持っているかを確認することです。もしあなたが店のクエリを調べてみると、その oloIdは店に関連するクエリにリンクされています。これは以前のクエリからの店の情報にマッピングすることができ、それを使って私はすべての店のIDを得ることができました。 いくつかの基本的なシェルスクリプトを使用して、私はどのストアがショックを持っているかを教えてくれるこのクールスクリプトを作成することができました。 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 各ストアが storeId である場合、JQ ライブラリを使用して回答を JSON 出力にフォーマットし、この名前にハッピングを行った場合、ショックを有するストアはヒットします。 サンプル回答 これに基づいて、我々は82099,62274、96570ストアがショックを持っていることを知っており、私は以前の通話から店のアドレスを得てショックを受けました。 Conclusion 結論 このドキュメントでは、私たちはネットワーク呼び出しを通じて必要な情報を特定し、また、ネットワーク呼び出しを通じてストア情報を取得する方法を発見しました。 これは、業界からいくつかのQA関連の仕事を除去する進歩となるだろう(我々はまだそこにはいないが、我々はすぐにその立場にいるだろう)。 今日見たアプローチのほとんどは手動でした。私の次の記事では、このシンプルなアイデアをどのように取り、その周りにクラウドインフラストラクチャを構築できるかを示します。 ウェブから情報を取得するためのクラウドベースのサーバーレス通話。 サーバーレス通話を引き起こすクラウドベースのトリガーサービス。 このデータをキャッシュするためのストレージシステム - 答えをどこに保存できますか? モバイルアプリまたはさまざまな他の方法で通知するための通知システム。 十分なデータポイントを得ている場合、私は稀なデータポイントを使用してMLモデルを構築する方法を示します。 これは教育目的のためであり、私とパートナー(SGG)は、この現実世界の例を用いてクラウドインフラストラクチャを構築し、Shake Shackのウェブサイトが過載しないように、コードやその他のアーティファクトが公開されません。