--- slideOptions: transition: slide --- # 透過LINE bot 查詢 NBA 賽事及比分 --- ### 目的 ---- 有時候想知道喜歡的球隊的最近的賽事或是一些資訊,還要開網頁或 PTT 去查詢 感覺很麻煩,所以就想透過 LINE bot 去搜尋關鍵字,快速得到訊息 ---- #### 事前作業 首先當然需要調查一下怎麼取得相關資訊 以熱火為例子,來到[NBA Taiwan各別球隊資訊](https://tw.global.nba.com/teams/#!/heat) ![](https://i.imgur.com/zgD5eGa.png) 打開chrome的開發人員工具,看起來呼叫了很多隻json,稍微調查了一下,shchedule.json有球隊的所有賽事資訊,已完賽未完賽都有,看起來就是我要的東西了,不過這邊有個地方要注意,schedule.json後面帶有參數teamCode=heat,所以看來我們還要找出所有球隊的teamCode,之後才能對關鍵字作轉換。 ---- 接著來到[NBA Taiwan的球隊資訊](https://tw.global.nba.com/teamindex/) 看到有一隻divisionTeamList.json的檔案 ![](https://i.imgur.com/ELHdgzj.png) 裡面就有我要的資訊了 --- #### 別急著寫程式 ---- 雖然說找到可以用的資訊了,不過這些資訊還是要整理過後才能使用 - 將divisionTeamList.json->payload->listGroups->teams->profile整理成需要的格式存在teamList裡 - 用輸入的關鍵字去查詢是否存在teamList裡,有就取出teamCode,沒有就回應 no match - 使用schedule.json?teamCode=剛剛查到的teamCode,得到球隊schedule --- #### 回應什麼 ---- 目前想到的是查詢之後,可以得到最近剛結束的比賽,以及下一場的比賽 ---- - 先得到現在時間的月份,例如現在是3月 - 用剛剛得到的資料去比對該球隊3月份的比賽 - 可以用winOrLoss裡去判斷是否完賽,null 表示還沒比 - 將最近比完賽的比分及對戰球隊取出來顯示 - 將最近未完賽的日期及對戰球隊取出來顯示 ---- #### 寫code ---- 處理關鍵字並回傳結果 ```js= function handleEvent(event) { if (event.type !== 'message' || event.message.type !== 'text') { return Promise.resolve(null); } var matchTeam = searchTeam(event.message.text)//回傳teamCode及id if(!matchTeam.team_id){ return client.replyMessage(event.replyToken, { type: 'text', text:'no match' }) } try { findRecentGame(matchTeam.team_code).then(text=>{ console.log('replay',text); return client.replyMessage(event.replyToken, { type: 'text', text }); }) } catch (e) { console.log(e); return client.replyMessage(event.replyToken, { type: 'text', text: '我壞掉了QQ' }); } } ``` --- ### 完成 ![](https://i.imgur.com/Om6vOB6.png) ![](https://i.imgur.com/NDGz9Qj.png) --- ### 參考 - [NBA Taiwan](https://tw.global.nba.com/teamindex/) - [Howard的爬🐛鐵人](https://ithelp.ithome.com.tw/articles/10194583)