最近公司剛完成一個專案,
是要協助一間運動公司串接 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 的限制
 
image
早期建立的 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/
這邊就要寫程式了。
這裡不多贅述,需要知道的是權限記得要!!
 
image
以我們的案例,我們會去要  activity:read_all 的權限
 
image
您要的權限不同,在這個驗證畫面下方的選項就會不一樣
這步做完後 
 
image
您會拿到  user access 和 refresh token
 
要怎麼知道自己拿到的token 能不能用呢?
 
很簡單,可以用 postman 驗證
 
image
 
 
呼叫
https://www.strava.com/api/v3/athlete
這個 API   
https://developers.strava.com/docs/reference/#api-Athletes-getLoggedInAthlete
 
呼叫正確的話,可以看到一個如上圖的內容
萬一token 過期,
則會看到
 
image
根據我們的經驗,token 有效時間非常短,不要相信官方說的多久多久,
要讓token 有效,最簡單的方法就是隨便出去跑個 50  , 100 讓你的account 有最新的資料可以查詢
 
萬一串接時權限沒弄對
則會看到
image
 
 
 
3. 要資料
 
這個地方最常遇到的問題是叫你寫 webhook 
webhook 和一般 request 的差異是說
一般request 你不知道 user 什麼時候去運動,你只能定時一直問
webhook 則是寫隻程式"聆聽"   
當user有資料的時候,strava 會發一個很短的 request
image
告訴你誰在什麼時候運動了,趕快來要資料
 
做這個 webhook 要去跟 strava 做一個訂閱的動作 
https://developers.strava.com/docs/webhooks/
一個 app只要做一次 , 這樣以後這個 app有資料,strava 才知道要丟過來
 
用  短 request 得到完整的 data  , 
和前面的步驟一樣,都可以用 postman 來測試
 
 
image
 
 
 

 

 
arrow
arrow
    文章標籤
    strava strava api
    全站熱搜

    阿貴貴 發表在 痞客邦 留言(0) 人氣()