close
最近公司剛完成一個專案,
是要協助一間運動公司串接 garmin 和 strava的運動資料
專案的目標不困難,
就是廣大的跑者們透過 運動手錶 或是運動APP,
將自己的跑步資料上傳到 garmin 或是 strava 後,
我們的程式要將這些資料搜集回來,
並且做一些資料的整理和運用。
客戶的會員不少,有幾萬人,
所以中間還是遇到了各種困難,
網路上相關的資料非常稀少,特別是中文的
還好客戶很有sense ,還有可憐的工程獅奮鬥了好幾個月,
把心得整理了一下並做分享。
一字一句都是血汗的寶貴經驗,
希望未來不要再有人走冤枉路
------------------------- 正文開始 -------------------------
------------------------- 對串接或是寫程式或是debug 沒興趣的就不用再往下看了
(all technology detail is below , you can translate by google XD)
英文的在 google group 有個 api 社群 ,裡面很多熱心人士會回覆
https://groups.google.com/g/strava-api
但不要期待官方會有任何回應 。
Strava 的官方是我遇過少數高(ㄐㄧ)傲(ㄨㄞ)的
Garmin 串接原理也是大同小異,
但您必需要透過它們的申請管道申請
在此就不多著墨。garmin 若不直接跟他們串接的話
您也可以請您的使用者們把 garmin 的資料透過串接上傳到strava
這樣您一樣也可以透過strava把這些資料搜集過來。
總之,大部分的運動資料最後都可以回到Strava,所以都從他蒐集資料就對了。
任何人都可以創立自己的間接APP(應用程式)
API 和文件看起來很簡單,
主要分成幾個part
1.在自己的strava 後台新增一個app
https://developers.strava.com/docs/getting-started/#account
這步不難,照做就對了
需要特別注意的是,您建立的應用程式會有 rate limit 的限制
早期建立的 app ,每15 分鐘允許 600個 , 每天30000個 request
但我們去年(2020)建立的則只有 100,1000
可以看到我們目前串接的會員有400 人
這樣的限制根本就一不小心就爆了
本來可以透過email 給 strava 官方提高上限 ,但根據這次的經驗
官方根本不會鳥你,只會說現在不接受提高
但是,文件上還是叫你這樣做...
所以我們後來想了一個方法,就是建立好多個 strava account
使用者在串接的時候你必須要隨機分派給他不同 APP
之後分散這些user 的 request .
在這一步驟你會拿到一個 app 的secret , app id ,請好好收下來
2. 使用者認證
完整的步驟在這
https://developers.strava.com/docs/authentication/
這邊就要寫程式了。
這裡不多贅述,需要知道的是權限記得要!!
以我們的案例,我們會去要 activity:read_all 的權限
您要的權限不同,在這個驗證畫面下方的選項就會不一樣
這步做完後
您會拿到 user access 和 refresh token
要怎麼知道自己拿到的token 能不能用呢?
很簡單,可以用 postman 驗證
呼叫
https://www.strava.com/api/v3/athlete
這個 API
https://developers.strava.com/docs/reference/#api-Athletes-getLoggedInAthlete
呼叫正確的話,可以看到一個如上圖的內容
萬一token 過期,
則會看到
根據我們的經驗,token 有效時間非常短,不要相信官方說的多久多久,
要讓token 有效,最簡單的方法就是隨便出去跑個 50 , 100 讓你的account 有最新的資料可以查詢
萬一串接時權限沒弄對
則會看到
3. 要資料
這個地方最常遇到的問題是叫你寫 webhook
webhook 和一般 request 的差異是說
一般request 你不知道 user 什麼時候去運動,你只能定時一直問
webhook 則是寫隻程式"聆聽"
當user有資料的時候,strava 會發一個很短的 request
告訴你誰在什麼時候運動了,趕快來要資料
做這個 webhook 要去跟 strava 做一個訂閱的動作
https://developers.strava.com/docs/webhooks/
一個 app只要做一次 , 這樣以後這個 app有資料,strava 才知道要丟過來
用 短 request 得到完整的 data ,
和前面的步驟一樣,都可以用 postman 來測試
文章標籤
全站熱搜
留言列表