2020.12.25 目前麥當勞的 API 已經從 Restful 轉成 WebSocket 的形式,所以該篇文章的方式目前是無法實作的。
麥當勞報報簡單來說就是麥當勞的會員 app,你可以每日在上頭得到一些優惠券,不過是採取簽到的方式領取;也就是說如果今天你忘了登入領取的話,隔天也不會變成有兩種優惠可以領取。
麥當勞報報 API 分析
透過一些工具,我們可以得到麥當勞報報的 API 路徑和內容,其中分成三種 base url
https://api.mcddaily.com.tw
從列表來看,我目前有使用到的是這五個 API
分別是
/verify_member_access_token
驗證 access token 是否還有效
/update_attributes
從內容看不太出來是幹嘛用的,不過我想對於我們而言也沒什麼特別的用途
/get_info
從 Response body 來看的話,算是麥當勞報報登入成功後第一支得呼叫的 API;
裡頭含有 member_info
的資訊為主
/logout
使用 access_token
就可以登出了,不過這邊有個問題是登出後 access_token
並不會過期⋯
也就是就算我已經呼叫過了登出這支 API,但仍然可以使用原先的 access_token
來打其他 API⋯
也就是可以做別的事,不用怕 token 登出就無效了
/login_by_fb
就是基本的從 Facebook 取得 token 去換麥當勞報報的 access_token
和使用者資料,基本上看起來 response body 和 /get_info 的一模一樣。
https://api1.mcddaily.com.tw
基本上商業邏輯都在這個 base url 上執行,而我的重點只有一支 API,也是我分析的目的
/lottery/get_item
這就是每天可以呼叫一次來取得每日優惠的 API
https://api2.mcddaily.com.tw
這邊我只有看到一種 API,就是類似 remote config 的那種使用情境,只用來取得一些 config 內容而已,並沒有什麼其他資訊可以得到。
將每日簽到的動作自動化
我在 Heroku 上有一台每天會跑 script 的機器,每天去爬 PTT 的一些內容並整理發送到不同的地方; 檢查並測試了一下麥當勞報報的這個 API,唯一必填的 request body 欄位只有 access_token,那麼就好處理多了!
就再寫個 curl 的 script 每天一起執行,應該就可以了吧?
這幾天跑一下測試再來更新後續!