ようへいの日々精進XP

よかろうもん

Strava API を使ってアクティビティデータを curl で取得するぞ!

この記事は

YAMAP エンジニア Advent Calendar 2022 の第四日目の記事です。

qiita.com

経緯

ランニング等の日々のトレーニングに Strava を使っている (Garmin と連携させている) ので、運動毎の平均心拍数を時系列に可視化したい気持ちが高まってきました。ということで、まずは、シンプルに curl を使ってアクティビティデータを取得してみたいと思います。

ちなみに、本記事は参考にさせて頂いた記事をほぼそのまま写経させて頂いております。

dev.classmethod.jp

有難うございます!

アクセストークンを確認

下図のように 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

いい感じでアクティビティデータを取得出来ました。

次は

アクティビティデータを可視化してみようと思います。

参考

dev.classmethod.jp

developers.strava.com