當家裡沒電視、沒辦法看奧運轉播,卻很想知道中華隊現在比數如何的時候,發現 Google 有即時更新的比分,於是打開 F12 看了一下 XHR,有一個開頭是 torspo 的網址一直在送資料,如下圖。

但這網址除了參數有夠長之外,回應也非常混亂,有很多層的資料,光是解析出來就花了我好多時間,總之比賽國家和比分資訊就是藏在 ["tsp-mr4","tsp-vm"]
這個的後面,就用 regex 加上一些簡單的資料清理把它們抓出來:
def get_data(URL):
resp = requests.get(URL)
pat = r"(?<=\[\[\[\"tsp-mr4\",\"tsp-vm\"]).+(?=,\[null,\[\[\"tsp-mr4\")"
x = re.findall(pat, resp.text)
x = str(x)
scores = re.sub(r'\[|\]|null|"|tsp-mr4|tsp-vm|,', ' ', x)
clean = scores.replace('- 0 ', '\n').replace(' ', ' ')
clean = clean.replace('\n', '比').replace(' ', '\n')
return clean.strip()
最後再用 LINE Notify 的網址持續傳送訊息給我:
while True:
value1 = get_data(URL)
if len(value1) < 1:
value1 = '比賽結束!'
trigger_url = f'https://maker.ifttt.com/trigger/{applet}/with/key/{key}?value1={value1}'
requests.get(trigger_url)
break
else:
trigger_url = f'https://maker.ifttt.com/trigger/{applet}/with/key/{key}?value1={value1}'
requests.get(trigger_url)
time.sleep(15)
至於串接 LINE Notify 和 IFTTT 的方法網路上應該有很多教學,我這邊就先跳過,之後有時間或是有讀者要求的話我再來寫。
簡單來說,LINE Notify 和 IFTTT 重點在於取得 applet 和自己的 key,我是把它們跟一開始提到的 torspo 那個網址一起放在 settings.py 另外填入:
applet = 'Your Applet Name'
key = 'Your IFTTT Key' # Go To https://ifttt.com/maker_webhooks/settings
但這個 URL 僅限該場比賽使用,還沒有找到方法可以自動抓現在正在進行的比賽,若有任何解決方法的話很歡迎各路高手前輩的協助與交流,目前測試看起來網址參數有幾個是比較重要的:
async
,其值為:emids:/g/11fr0b7qvf
(註:%2F=/)id:lu
_fmt:jspb
- 有些需要、但有些卻不需要的參數:
yv=3
p3=1
最後收到的 LINE 通知截圖大概是這樣:


以上就是個人純娛樂性質的奧運即時比分 LINE 通知,我有把程式碼放在 GitHub 上,有興趣的話歡迎來看看(前往專案),最後還是要恭喜中華隊這次獎牌數破紀錄啦!台灣加油!
歡迎追蹤我的 Facebook 粉專:https://www.facebook.com/jumpingcoder