[Python教學]Python透過Line Notify傳送訊息 – Part2 fodomo查詢商品庫存

#Pytube #Line Notify #Line API #Line Bot #postman

[Python教學]Python透過Line Notify傳送訊息- fodomo查詢商品庫存

Part1教學中,我們示範如何使用 Python 透過 Line Notify API來傳送訊息到Line聊天室中。這階段要來分析fodomo網頁版是如何進行物品庫存查詢的透過官方的API發送請求到fodomo查詢商品庫存來檢查分店是否有特定商品

1. fodomo的商店查詢API

首先,我們訪問fodomo的網頁版網站,從網址列可以得出來各個分店的購物頁面是透過“sid”參數控制其中全台共有7000多間7-11門市,可以透過以下API(https://opennow.foodomo.com/app/wxapp.php)藉由修改sid後發送請求來獲取分店資訊

這邊先透過postman看看回傳的資料格式,標準的JSON格式,其中store屬性中包含分店的’id’以及‘title‘分店名。因此我們可以根據這個api批次發送不同的sid來取得分店資訊,所有分店的資料我會放在github專案中。


批次程式碼跟API可以參考下方

import requests

def send_request_with_different_sid(base_url, params, sid_values):
    for sid in sid_values:
        current_params = params.copy()
        current_params["sid"] = sid
        response = requests.get(base_url, params=current_params)
        yield response

# 基本URL和參數,用來查詢商店資料的API
base_url = "https://opennow.foodomo.com/app/wxapp.php"
params = {
    "i": 1,
    "m": "ht_wmps",
    "c": "entry",
    "do": "mobile",
    "lang": "zh-cn",
    "ctrl": "wmall",
    "from": "vue",
    "u": "wap",
    "ac": "store",
    "op": "index",
    "ta": "index",
    "sid": 2,  # 初始sid值
    "is_house": ""
}

# 您希望替換的sid值列表
sid_values = range(0,7050)

# 開啟檔案並寫入
with open('storeList.csv', 'a', encoding='utf-8') as f:
    f.write('sid,name,addr\n')
    for response in send_request_with_different_sid(base_url, params, sid_values):
        if response.status_code == 200:
            data = response.json()
            try:
                store = data['message']['message']['store']
                print(f"{store['id']},{store['title']},{store['address']}")
                f.write(f"{store['id']},{store['title']},{store['address']}\n")
                f.flush()
            except KeyError:
                print("Invalid response format or missing data.")
        else:
            print(f"Failed to fetch data for SID {response.request.params['sid']}")

2. fodomo的商店庫存查詢API

fodomo的庫存查詢API的baseUrl跟查詢商店是相同的,只需要參考以下的params的修改即可查詢

params = {
    "i": 1,
    "m": "ht_wmps",
    "c": "entry",
    "do": "mobile",
    "lang": "zh-cn",
    "ctrl": "wmall",
    "ac": "store",
    "op": "goods",  #op改成goods
    "ta": "list",
    "from": "vue",
    "u": "wap",
    "sid": 3560,
    "gid": 1065662,
    "keyword": "樂事", #透過keyword可以過濾商品
    "page": 1,
    "psize": 20
}

我們一樣先透過postman來看看請求的回應,回傳的結果包含了分店“3560”中所有跟樂事有關的產品訊息,接著我們可以結合Part1的教學,針對有興趣的7-11分店進行不間斷的搜尋,當找到想要的商品後就可以藉由Line Notify傳送到手機中進行提醒。

3. 實際演示

這邊附上我實際操作時候的github程式碼,有興趣的人可以自己下載實作看看。

搜尋到樂事禮盒後,Line Notify聊天窗就會收到訊息了但不得不說即便搜尋到商店下單後目前還是很有可能被以商品品項不足或是沒有回應等理由取消訂單。

接下來的教學我可能嘗試透過類似口罩地圖的方式,利用WebGIS呈現哪些地區還有相關商品的庫存,有任何問題或是想看的教學都可以留言給我

4 更多教學

分享