JogNote のデータをエクスポートする Python ライブラリ

f:id:kyoshidajp:20130122225930p:plain
エクササイズ SNS の JogNote からデータをエクスポートする Python ライブラリを書いてみました。

指定した期間の

  • 日付
  • 種別(ランニング、自転車、水泳、ウォーキング)
  • 距離
  • 時間

をエクスポートします。

Python は Perl に似たスクリプト言語です。読みやすく、書きやすく、それでいてライブラリが豊富なので、様々な分野で利用されています。詳しくは次のサイトなどが参考になります。

動作環境

  • OS: Mac OS X
  • Python: 2.7.1

で書きました。Windows でも動作するはずですが確認していません。Python のバージョンは 3.X には対応していません。

また、proxy 環境では環境変数の http_proxy にセットしておけば動くかもしれません。

必要なライブラリ

実行するには次のライブラリが必要です。

それぞれインストールまたはモジュールサーチパスに追加してください。

かんたんな使い方

次の様にして直接実行するとデータを export.csv というファイル名の CSV で出力します。

$ python jognote.py -i userid -p password -s 2012/12 -e 2013/01

-i オプションにはログインのユーザID、-p オプションにはパスワードを指定します。

JogNote はログイン時の認証として OpenID(Yahoo! JAPAN ID または mixi OpenID)に対応していますが、 JogNote 自体のログインのみに対応しています。OpenID から JogNote 自体のログインに切り替える方法は以前のエントリを参考にしてください。

-s オプションにはエクスポートする開始年月、-e オプションにはエクスポートする終了年月を yyyy/mm の形式で指定します。

ライブラリとしての使い方

個別のフォーマットとして出力したい場合はライブラリとして利用する事が出来ます。

テンプレートライブラリ Cheetah を使って HTML で出力するサンプルは次の様になります。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
from Cheetah.Template import Template
import jognote

jog = jognote.Jognote('yourid', 'password', '2012/12', '2013/01')
history = jog.export()

template = Template(file='cheetah.template')
template.history = history
print template.respond().encode('utf-8')

cheetah.template は以下の通り。

#encoding UTF-8
<html>
    <head>
        <title>HTML by Cheetah</title>
    </head>
    <body>
        <table border="1">
            <tr>
                <th width="25%">date</th>
                <th width="25%">name</th>
                <th width="25%">distance(km)</th>
                <th width="25%">time</th>
            </tr>
            #for $data in $history
            #set $time = '%02s:%02s:%02s' % data.time
            <tr>
                <td width="25%">$data.date</td>
                <td width="25%">$data.name</td>
                <td width="25%">$data.distance</td>
                <td width="25%">$time</td>
            </tr>
            #end for
        </table>
    </body>
</html>

JogNote クラスのインスタンスから export() を行うと、Workout インスタンスの配列が返ってきます。
Workout クラスの概要は次の様になっています。

class Workout(object):
    """
    ワークアウトクラス
    """

    RUN, SWIM, BIKE, WALK = range(4)

    def __init__(self, name=RUN):
        # 日付: datetime
        self.date = None
        # 種類: int
        #   0: RUN, 1: SWIM, 2: BIKE, 3: WALK
        self.name = name
        # 距離(km): str 
        self.distance = None
        # 時間: strのtuple
        self.time = None

あとがき

JogNote はランニング、自転車、水泳などの個人的な記録を記録するだけではなく、イベントや大会を通じて他のユーザと交流する日本では老舗のエクササイズ SNS です。

面白い機能もあって、例えば大会のページでは参加表明者の走行距離や男女比、都道府県の分布などがグラフで表示されてます。

ここを眺めるだけでも適度な緊張感とモチベーションがふつふつと湧いてきます。

利用は無料という事もあって、同様のウェブサービスとして恐らく日本で一番ユーザ数が多いのではないでしょうか。Alexa による統計情報はこんな感じ。

ただ、ここ数年ほとんど(目に見える)アップデートがされていないようです。JogNote(ジョグノート)開発ブログもしばらく更新されていません。

負荷軽減対策を行なっているようですが、それでも夜は読み込みがモッサリしたり「502 Bad Gateway」になってしまう事が多い気がします。基本的に今までと同じ無料で、課金制にする事でもっと沢山の良いサービスが受けられるように出来ないのかな、とも思います。

特にサービス自体のログインが https に対応していないので、せめてこれだけでも改善して欲しいです。