この記事は
YAMAP エンジニア Advent Calendar 2022 の第四日目の記事です。
経緯
ランニング等の日々のトレーニングに Strava を使っている (Garmin と連携させている) ので、運動毎の平均心拍数を時系列に可視化したい気持ちが高まってきました。ということで、まずは、シンプルに curl を使ってアクティビティデータを取得してみたいと思います。
ちなみに、本記事は参考にさせて頂いた記事をほぼそのまま写経させて頂いております。
有難うございます!
アクセストークンを確認
下図のように https://www.strava.com/settings/api にてアクセスしてアクセストークンを確認します。既にアプリケーションは登録済みだった (過去に同じことを試みたっぽい) ので、アプリケーションの登録については割愛します。
試しにアクセストークンを利用して自分自身の情報 (Athletes API にアクセスする) を取得してみます。
curl -X GET \ https://www.strava.com/api/v3/athlete \ -H 'Authorization: Bearer YOUR_ACCESS_TOKEN'
正常にレスポンスを返す場合、以下のように出力されました。
{"id":48208003,"username":null,"resource_state":2,"firstname":"Yohei","lastname":"Kawahara",...
OAuth 認証
以下をブラウザのアドレスバーに張り付けます。
https://www.strava.com/oauth/authorize?client_id=${クライアントID}&response_type=code&redirect_uri=http://localhost/exchange_token&approval_prompt=force&scope=activity:read
下図のように出力されます。
「許可する」をクリックすると、以下のような Authorization Code (code) や scope が記録された URL にリダイレクトされます。
Authoirzation Code をコピーして、以下のような URL にアクセスしてアクセストークンを取得します。(クライアントID やクライアントシートは、My API アプリケーションページにて確認すること)
curl -X POST https://www.strava.com/oauth/token \ -F client_id=${クライアントID} \ -F client_secret=${クライアントシート} \ -F code=${Authorization Code} \ -F grant_type=authorization_code
以下のようなレスポンスを得られました。このレスポンスの access_token を利用してアクティビティデータを取得します。
{"token_type":"Bearer","expires_at":1670134634,"expires_in":17121,"refresh_token":"xxxxxxxxx","access_token":"xxxxxxxx",....
アクティビティデータを取得
curl -X GET \ https://www.strava.com/api/v3/athlete/activities \ -H 'Authorization: Bearer ACCESS_TOKEN'
jq を利用して、以下のような感じで出力させてみました。
$ curl -s -X GET https://www.strava.com/api/v3/athlete/activities \ -H 'Authorization: Bearer xxxxxxxxxxx' \ | jq -r '.[]|[.start_date_local,.name,.average_heartrate]|@tsv' 2022-12-03T07:08:51Z 福岡市内トレラン@鴻巣山 145.8 2022-12-02T07:08:48Z ジョグ@博多駅周辺、山王公園 158.2 2022-11-30T18:36:37Z ジョグ@山王公園 with 山王公園ランニング倶楽部 (夕練) 145.5 2022-11-30T07:19:12Z ジョグ@山王公園 (朝練) 158.3 2022-11-28T07:11:31Z ジョグ@山王公園 (最後はちょっとビルドアップ) 142.5 2022-11-25T07:16:44Z ジョグ@山王公園とその周辺 165 2022-11-24T07:20:43Z ジョグ@御笠川 158.8 2022-11-22T07:11:57Z 自宅 de エアロバイク 96 2022-11-21T06:59:22Z ジョグ@山王公園 142.1 2022-11-19T18:55:18Z 自宅 de エアロバイク (夕練) 110.8 2022-11-19T07:35:15Z 久しぶりの福岡空港ラン 164.8 2022-11-18T19:13:58Z 自宅 de エアロバイク (夕練) 105.8 2022-11-18T07:13:33Z 自宅 de エアロバイク (朝練) 103.7 2022-11-16T07:27:43Z ジョグ@山王公園 138.5 2022-11-15T19:32:52Z 自宅 de エアロバイク (夕練) 111.7 2022-11-15T06:59:29Z 自宅 de エアロバイク (朝練) 109.9 2022-11-14T17:49:56Z ジョグ@山王公園 136.8 2022-11-13T08:20:02Z 福岡マラソン 2022 いけるところまで 167.6 2022-11-11T07:35:30Z 自宅 de エアロバイク 119.9 2022-11-10T18:59:12Z 自宅 de エアロバイク 118.5 2022-11-09T18:51:57Z 自宅 de エアロバイク 110.4 2022-11-09T07:02:16Z ジョグ@山王公園 (最後はちょっとビルドアップ) 144.5 2022-11-08T07:02:56Z 自宅 de エアロバイク 110.6 2022-11-07T07:05:07Z ジョグ@山王公園 141.2 2022-11-06T07:58:19Z 自宅 de エアロバイク 122.6 2022-11-05T18:39:52Z 自宅 de エアロバイク (夕練) 111.1 2022-11-05T08:20:54Z ジョグ@山王公園 149.6 2022-11-04T19:15:29Z 自宅 de エアロバイク 108.7 2022-11-03T18:53:56Z 自宅 de エアロバイク (夕練) 118.8 2022-11-03T07:51:56Z 自宅 de エアロバイク (朝練) 114.1
いい感じでアクティビティデータを取得出来ました。
次は
アクティビティデータを可視化してみようと思います。