iPhone アプリの Moves からデータを JSON 形式で取得し、それを gpx 形式に変換する

はじめに

iPhone アプリの Moves は行動ログアプリとして非常に秀逸だと思うのだが、ユーザーが自由に使える形式でデータをエクスポートできないのが玉に瑕である。この瑕疵を埋めるため、以前、外部 Web サービスを利用して Moves からデータを取得しようと試みた(記事1記事2)。結果、そこそこ満足いく結果が得られたものの、使用している外部サービスの質がなかなかサイケ(婉曲表現)でストレスが溜まっていた(せめてまともな JSON ファイルぐらい吐いてほしかった)。なのでもう面倒だから最初から最後まで自分でやってしまおうと思い立ってコードを書いた。コードは末尾に載せる。

コードの使用方法

以下、このコードの使用法を簡単に解説する。基本的な使い方はコードの最初のコメントにも書いておいたので、そちらも参照していただけると幸いである。

moves-fetch.py

このコードを利用するためには、Moves へのデベロッパー登録が必要である。Google Account があれば ここ から登録が可能である。

ログインしたら "Create a New App" を押し、”Application name”, “Developer” を適当に決めて “Create” する。すると "Client ID” と “Client secret” という長い文字列がもらえるので、これを moves-fetch.py のコードの最初のほうの変数にそれぞれ直接書き込む。ちなみにこのコードは requests というモジュールに依存しているので pip install requests などでインストールしておく。

ここまでやったら $ python moves-fetch.py --requesturl を実行する。するとウェブブラウザが開いて8桁の番号が表示されるので、これを自分の iPhone の Moves アプリの中の 設定マーク→Apps→Enter PIN Code に打ち込む。Accept を押すとブラウザが勝手にリロードして、エラー画面が表示される。この画面には URL のような文字が書いてあるが、そこの code=& との間の文字列があなたの Request token である。よってこれも変数に書き込む。

次に $ python moves-fetch.py --accesstoken を実行する。すると Access Token がコンソールに表示されるのでこれも変数に書き込む。これで4つの変数が全て埋まるはずである。

ここまできたら $ python moves-fetch.py YYYYMMDD YYYYMMDD と2つの日付を指定して実行してやればその間の日付を含んだ JSON ファイルが作成される。

movesjson2gpx.py

moves-fetch.py を用いて取得したファイルを $ python movesjson2gpx.py filename.json のように与えてやれば、1日を1ファイルとして gpx ファイルに変換してくれる。以前の記事に書いたような JSON ファイルの整形は必要ない。

おわりに

ハードコーディングでごめんなさいね きれいにつくるのはあまりにめんどい ハワイに行きたい

コード

These scripts fetch storyline from Moves (http://m ...