Беше добър слънчев ден в Сиатъл и съпругата ми искаше да има известния вирусен Дубай Шоколад Пистакио Shake. С вълнение решихме да посетим най-близкия Shake Shack и за наша изненада той бе продаден и ни казаха да ги обадим преди посещението. Няма гаранция, че ще бъде на разположение на следващия ден, както и поради ограниченото предлагане. Два дни по-късно отново отидох там, за да видя дали ще има, и отново се сблъсках с разочарование. не ми хареса начинът, или трябва да ги обадя, за да проверя елемента, или да отида в магазина им, за да проверя дали е наличен. Това ми даде няколко идеи: Какво ще стане, ако има ИИ, който ще направи обажданията за мен и ще ме актуализира, когато имам нужда от резервация, или ще чака в тази дълга линия за обаждания на клиенти и ще се свърже с мен, когато съм готов да говоря с някого? Има ли начин да бъда уведомен, когато даден елемент е достъпен в Shake Shack? Възможно е да се провери дали един елемент е наличен и да го добавите към количката за онлайн поръчка, което означава, че има някои мрежови обаждания, чрез които можем да идентифицираме дали Dubai Chocolate 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 е свързан в запитванията, свързани с магазин. Това може да бъде пренасочено към информацията за магазина от предишните запитвания, с помощта на които успях да получа всички 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 Заключението В този документ преминахме през мрежовите обаждания, за да идентифицираме информацията, от която се нуждаем, и също така измислихме начин да получим информация от магазина чрез техните мрежови обаждания.Това казано, можем също така да автоматизираме това чрез Селен (което е изчислително тежко), или можем да използваме AI, за да анализираме уебсайта и да измислим начин да подготвим тази инфраструктура за нас. Това ще бъде напредък, който ще премахне някои QA свързани работни места от индустрията (ние все още не сме там, но ние ще бъдем в тази позиция много скоро). Повечето от подходите, които видяхме днес, бяха ръчни.В следващите ми статии ще покажа как можем да вземем тази проста идея и да изградим облачна инфраструктура около нея. Облачен без сървър повикване, за да получите информацията от мрежата. Облачна услуга за задействане, която ще задейства безсървърния разговор. Система за съхранение на тези данни за кеширане – къде можем да съхраняваме отговорите? Система за уведомяване за уведомяване чрез мобилно приложение или по различни други начини. Ако получаваме достатъчно точки за данни, ще ви покажа как да изградите модел на ML, използвайки слаби точки за данни. Това е за образователни цели; аз и моят партньор (SGG) взехме този пример от реалния свят, за да изградим облачна инфраструктура, а кодът и други артефакти няма да бъдат публикувани, за да се гарантира, че сайтовете на Shake Shack не са претоварени.