这是西雅图的一个好阳光明媚的日子,我的妻子想要有著名的迪拜巧克力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 结论 在本文中,我们通过网络呼叫来识别我们需要的信息,并找到了通过他们的网络呼叫获得商店信息的方法,我们还可以通过Selenium(这是计算重的),或者我们可以使用人工智能来分析网站,并找出一种方法来为我们准备这个基础设施。 这将是将某些QA相关的工作从行业中删除的进步(我们还没有在那里,但我们很快就会在那个位置)。 今天我们看到的大多数方法都是手动的方法,在我的下一篇文章中,我将展示我们如何采取这个简单的想法,并围绕它构建一个云基础设施。 基于云的无服务器呼叫,从网络获取信息。 基于云的触发服务将触发无服务器呼叫。 存储系统用于缓存这些数据 - 我们可以在哪里存储回复? 通过移动应用程序或以各种其他方式通知的通知系统。 如果我们得到足够的数据点,我将展示如何使用稀缺的数据点构建ML模型。 这是为了教育目的;我和我的合作伙伴(SGG)采取了这个现实世界的例子来构建一个云基础设施,代码和其他文物不会被发布,以确保Shake Shack网站不会过载。