Monday, July 28, 2008

Nike+のWeb API

Nike+はFlash (Flex or AIR)のフロントエンドからアクセスするけど、裏ではWeb APIでデータにアクセスできる。が、そのAPIは公開されていないらしい。

公開されていなくても、簡単なAPIなので、すでに解析されていろいろ作られている。


Connecting to the Nike+ API with C#
 APIの一覧表がある。
Accessing Nike+ data with PHP
 PHPからアクセスするクラス。SimpleXMLとCurlが必要。
Nike+ iPod Stats Wordpress Plugin
 Wordpressのプラグイン。


で、C#の記事のAPIの一覧表に従ってアクセスしてみると、USのサイトのアカウントになってしまい、日本のサイトに記録されているデータが出てこない。

ということで、FirefoxにLive HTTP Headersを入れて、日本のサイトへのアクセスを少し調べてみた。下記のようにすると、日本のサイトからデータを取り出すことができた。

ログイン
https://secure-nikeplus.nike.com/nikeplus/v1/services/app/external_profile_login.jsp?login=[ログインID]&password=[パスワード]&locale=ja%5Fjp

ログインするとクッキーが2個セットされる。(xxxxはクッキーの値)
Set-Cookie: AnalysisUserId=xxxx; domain=.nike.com; path=/; expires=Friday, 31-Dec-2010 23:59:59 GMT
Set-Cookie: PSESSIONID=xxxx; domain=.nike.com; path=/

以降はこのクッキーをヘッダに入れてアクセスする。

ユーザのプロファイル
https://secure-nikeplus.nike.com/nikeplus/v1/services/app/get_user_data.jsp

runの一覧
https://secure-nikeplus.nike.com/nikeplus/v1/services/app/run_list.jsp

ブラウザでアクセスすれば、クッキーは自動的に処理されるので、3つのURLを順にブラウザのアドレス欄に入れるだけでよい(ログインIDとパスワードは置き換えて)。そうすれば、どんなXMLデータが返ってくるかわかる。

こんな感じ。





Thursday, July 3, 2008

Nike+のトレーニングがおかしい件

Nike+のトレーニングがおかしい。

プランに従って、その日に走る→積算されない。いつまでたっても0Kmのまま。
プランの次の日に走る→積算される。
プランの次の次の日に走る→積算されない。

常に次の日に走るようにして、順調に「0kmの遅れ」で来たのだが、一度雨が降って、次の次の日に走ったら、その後はずっと「8kmの遅れ」になり、この遅れが解消できない。本当は走っているのに…

そこで、やったこと。

iPodをPCに接続すると、リムーバブルディスクとして見える。(たとえばE:)

E:\iPod_Control\Device\Trainer\Workouts\Empeds\4H812RWSVSX

の辺りにNike+のデータが入っている(最後の記号列はおそらくセンサーのシリアル番号)。この下にlatestとsynchedという2つのフォルダがあり、走るとlatestの下にファイルができて、iTunesで同期すると、Nike+のサイトに送信され、送信されたファイルはsynchedに移動するらしい。

そこで、雨で1日遅れたデータをsynchedからlatestにコピーして、日付を1日前にする。修正は3か所。

ファイル名
2008-06-30 19;00;47.xml

2008-06-29 19;00;47.xml

ファイルの中身
<time>2008-06-30T18:11:35+09:00</time>

<time>2008-06-29T18:11:35+09:00</time>

<starttime>2008-06-30T18:11:35+09:00</starttime>

<starttime>2008-06-29T18:11:35+09:00</starttime>

一度、iPodを外して、もう一度接続すると、修正したデータがNike+のサイトに送信される。

これで「8kmの遅れ」がなくなるかと思ったら、まだだめ。

トレーニングを一度削除して、同じ日程でもう一度作成しなおす。
これでようやく「0kmの遅れ」になった。

データを消すだけなら、Nike+のサイトでできるので、修正前のデータを一応消しておく。




使っている人があまりいないのか、検索しても文句を言っている人は少ない様子。

ここで少し文句が出ていた。
http://forums.nike.com/thread.jspa?messageID=187710
(言語選択出たら、英語を選択)

Nikeの人らしい人が、
Please don't go crazy trying to figure out why the progress bar in the Nike+ Coach Training Overview is indicating that you're behind while your My Runs > With Training view indicates that you're right on pace. It's not you! It's us. We're having some problems with the beta version of the training tool, and it's taking a little bit longer than anticipated to sort them out.

We apologize. It's not fun or motivating to see "you are x miles behind" every time you log in. I hope we're able to fix this problem soon, and to properly recognize all of your hard training.
と書いている。

(意訳)
ちゃんとトレーニングしているのに「遅れ」って出るのはなぜだとあまり追及しないでね。あなたのせいではありません。私たちのせいです。ベータ版のトレーニングツールに問題があるのはわかっています。直すのは思ったより時間がかかりそうです。

本当にすみません。ログインするたびに「xマイルの遅れ」と出るのは楽しくないし、やる気もでないでしょう。なるべく早く問題を解決して、あなたのハードトレーニングをきちんと認識できるようにしたいと思います。
そのあと、代わりに、Nike Running BlogのTraining Logを使ってくれと書いてあるのだけど、これはアメリカのサイト。日本のサイトにはこの機能はない。

試しにアメリカのサイトにアクセスしてみたところ、日本のサイトのアカウントとアメリカのサイトのアカウントは別らしい。で、アメリカのサイトにアカウント登録してみた。すると、不思議なことにスクリーン名は共通らしく、日本のアカウントと同じ名前は使えなかった。わけがわからない。

iPodのNike+は日本のサイトに登録してしまい、iPod側の設定を直す方法を調べていないので、とりあえず、アメリカのサイトはアカウントを作っただけで、まだデータを送ったりはしていない。