jimaoka blog

ライトなインフラエンジニアです

Runkeeper APIの使い方

f:id:jimaoka:20151101191126p:plain

最近よくランニングをするので、運動記録のためにRunkeeperを使っています

走ったコースや速度などの情報を記録してくれるランニング支援アプリは何種類かあるのですが、APIを提供しているということで、Runkeeperを使用してデータをためています(NIKE+もAPIあるっぽいです)

先日ふと、月末にその月の合計走行距離や平均速度、消費カロリーなどの月次サマリーをTwitterにPostしてくれるプログラムを書こうかな、と思いRunkeeper APIを使ってみました

Runkeeper API

RunkeeperのAPIHealth Graph APIという名前で公開されています

使い方を紹介しているページがないかなー、と思って調べてみたのですが、ほとんど日本語の情報がありません(公式が英語ドキュメントだからかな)公式ドキュメントを読みながら、使ってみることにします

アプリケーションの登録

f:id:jimaoka:20151101194744p:plain Applications Portalより、アプリケーションの登録を行います

Application Name, Description, Organization, .. と必要な情報を入れていきます、Permission Requests に関しては必要があれば入れていきましょう、自分のアカウントデータの読み書きに関してはチェックしていなくても可能なので、今回はチェック無しでいきました

Authorization Removal Callback URL, Estimated Date of Publication に関しては空で大丈夫です

登録すると、こんな感じになります

f:id:jimaoka:20151101195001p:plain

ユーザのAccess Tokenを取得

ユーザのデータにアクセスするには、作成したアプリをユーザに認証させてAccess Tokenを取得する必要があります

Access Token取得のためのOAuth認証は、やったことない人や初心者にはちょっと大変で、APIの使用が盛んなTwitterとかだと GitHub - jugyo/get-twitter-oauth-token: The "get-twitter-oauth-token" is a command to get token/secret pair of Twitter OAuth. なんかのコマンドだけで自分のアカウントのAccess Tokenを取得できるものが存在しています

GitHub - jugyo/get-twitter-oauth-token: The "get-twitter-oauth-token" is a command to get token/secret pair of Twitter OAuth.twitterで使ってみて楽だったので、Runkeeper版で似たようなものをつくりました github.com

% git clone https://github.com/jimaoka/runkeeper-auth.git
% gem install health_graph -v 0.5.4
% gem install health_graph
% ruby runkeeper_auth.rb

Client ID, Client Secretを入力するとブラウザで認証画面が開かれます
認証画面でAllowを押すとワンタイム認証用のAuth Codeが表示されるので、コンソールにコピペすると、Access Tokenが表示されます

データの取得

Access Tokenが取得できたので、データにアクセスしていきます

Health Graph - Third-Party Libraries Health Graphにはいろんな言語のサードパーティライブラリがありますが、Ruby製の GitHub - kennyma/health_graph: Ruby wrapper for Runkeeper Health Graph API を使っていきます

こんな感じでActivity Logを取得することができます

require "rubygems"
require "health_graph"

### Get user data
user = HealthGraph::User.new(access_token)

### Print activity data
user.fitness_activities.items.each do |e|
  p e
end
% ruby runkeeper.sample.rb
#<Hashie::Mash duration=3731.282 entry_mode="API" has_path=true source="RunKeeper" start_time="xxx" total_calories=734 total_distance=10526.1433422139 tracking_mode="outdoor" type="Running" uri="xxx" utc_offset=9>
...

まとめ

Runkeeperなどのヘルス系のサービスAPIは自分のライフログを取得して色々できるので、けっこう楽しいです

APIに関して日本語文献があまり見つからなかったので、参考になればと思います