Stravaは誰でも使えるAPIを公開してるけど、ドキュメントを読む限り自分のactivityのGPXデータをダウンロードする機能がないらしい。自分で作成したルートはできるみたい。API機能のstreamを利用することで、緯度経度、時間、心拍数などを個別に取得してGPXを再構築することは可能だが、めんどくさい。
代わりといっちゃなんだけど、Stravaにloginしている状態で自分のactivityのURLにexport_gpxをつけることでブラウザ上からGPXファイルをダウンロードすることができる。こちらのリンクにTCXの方法が乗っているが、GPXでもできた。
それをPythonでできたらいいじゃないという話。APIは使用しません。
方法
mechanizeというライブラリをpipでインストールし、以下のコードのemail, password, activity_idを好きなものに変えて、実行するとGPXファイルを保存する。
import mechanize # pip等でインストールして下さい
br = mechanize.Browser()
response = br.open('https://strava.com/login')
br.select_form(nr=0)
br.form['email'] = 'youremail@email.com'
br.form['password'] = 'passwoooord'
response = br.submit()
activity_id = '12345678'
url = 'https://www.strava.com/activities/' + activity_id + '/export_gpx'
gpx = br.open(url)
gpx = gpx.read().decode('utf-8')
with open(activity_id + '.gpx', mode='w', encoding='utf-8') as f:
f.write(gpx)
注意点
- APIには時間あたりのリクエスト制限があるけど、これはないので、まとめてやりたいときはある程度waitかけたほうがいいと思う。
- 当たり前だが自分のactivityのみ保存できる。有料会員なら他の人のデータも落とせるかもしれないが試してはいない。
- ほんとは標準ライブラリのrequestsでloginを試みたけどうまくいかなかった。やり方分かる人は教えてほしい。
- APIを使用してGPXファイルを取得する方法も分かる人は教えてほしい。
参考
https://stackoverrun.com/ja/q/8431259
http://developers.strava.com/docs/reference/