Це був гарний сонячний день в Сіетлі, і моя дружина хотіла мати знаменитий вірусний Дубай Шоколад Pistachio Shake. З захопленням, ми вирішили відвідати найближчий Shake Shack, і до нашого здивування, він був проданий, і нам сказали зателефонувати їм перед відвідуванням. Немає ніякої гарантії, що він буде доступний наступного дня, а також через обмежену пропозицію. Через два дні я знову пішов туди, щоб подивитися, чи є якісь, і знову я зіткнувся з розчаруванням. мені не сподобався спосіб, я повинен або зателефонувати їм, щоб перевірити товар, або йти до їхнього магазину, щоб перевірити, чи є він доступний. Це привело до декількох ідей для мене: Що, якби був штучний інтелект, який зробив би дзвінки для мене і оновив мене, коли мені потрібна бронювання, або чекав у тій довгій лінії для клієнтських дзвінків, і підключився до мене, коли я готовий поговорити з кимось? Чи є спосіб бути повідомленим, коли товар доступний в Shake Shack? Якщо його немає, чи можу я побудувати для цього хмарну інфраструктуру? Продовжуючи мої думки про мою другу ідею, я почав дивитися на їх веб-сайт. Можна перевірити, чи доступний предмет і додати його до кошика для онлайн-замовлення, що означає, що є деякі мережеві дзвінки, за допомогою яких ми можемо визначити, чи доступний Дубай Шоколад Pistachio Shake. Implementation реалізація Щоб отримати інформацію про доступність, нам потрібно кілька точок даних. Чи є спосіб отримати інформацію про магазин? Як відрізнити, чи має магазин шейк, чи ні? Для отримання інформації про магазин, коли ми відкриваємо елемент інспекції і дивимося на мережеві дзвінки, коли ми вибираємо Вашингтон, ми бачимо кілька цікавих дзвінок. У штаті Вашингтон є сім місць, і нам потрібно знати, яке з них має струс. Якщо подивитися на відповідь інформації регіону, то вдалося отримати всю державну інформацію. 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 пов'язаний у запитах, пов'язаних з магазином. Це може бути скопійовано до інформації про магазин з попередніх запитів, за допомогою яких я зміг отримати всі ідентифікатори магазину. З деяким базовим скриптом оболонки я зміг створити цей скрипт, який розповість, який магазин матиме струс. 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 не перевантажуються.