miauのブログ

はてなダイアリー「miauの避難所」をはてなブログに移行しました

wedata に AppSnap 用のデータベース作ってみた

昨日から Windows 7 RC を試してるんですが、今回は各種ツールのインストールに GetIt を使ってます。

これが結構便利なんですが、英語圏のツールしか登録されていないのが難点。ということで国産ツールのデータをちまちま作っていこうと思います。今構築中の PC にはよほどのことがない限り GetIt/AppSnap 経由でツールを入れる縛りにしようかと。

データの作成については以下のページが参考になりました。

データの共有

で、どうせならデータを共有して誰でも編集できるようにしちゃいたい、ということで wedata にデータベース作っちゃいました。

wedata には .ini として公開するインターフェイスは無いようなので、このままの形では GetIt/AppSnap からは利用できません。Yahoo!Pipes か何かをかまして .ini に変換しようと考えていますけど、何かいい方法があれば教えてください。(実装していただけると楽です・・・。というか wedata 側で対応できれば楽なので質問中。)→変換サービス作りました

wedata へのデータ登録

wedata へのデータ登録ですが、JSON 形式で「アイテムの一括追加」というのができるようになっていますので、.ini を JSON に変換してこれを登録するのが楽です。.ini から JSON に変換するのは、たぶんこんな感じでいけると思います。

import sys
import ConfigParser
if sys.version_info[:2] >= (2, 6): # If using Python 2.6 or later
    import json
else:
    # % easy_install simplejson
    import simplejson as json

parser = ConfigParser.SafeConfigParser()
try:
    parser.readfp(sys.stdin)
except ConfigParser.MissingSectionHeaderError, ConfigParser.ParsingError:
    sys.stderr.write('parse error')
    exit()

out = []
for section in parser.sections():
    data = parser.items(section, True) # raw = True
    out.append({'name': section, 'data': dict(data)})

print json.dumps(out)

これを ini2json.py とかいう名前で保存して、

python ini2json.py < userdb.ini

みたいに実行すると json が出力されると思うので、これをどんどん登録していただけると。

ちなみに JSON まわりの import 処理は以下の URL を参考にしました。(というかまんまパクってます。)

今後やりたいこと

できれば .ini をもっと簡単に作る仕組みも用意したいところ。Firefox 拡張を作ってしまえば、

  • スクレーピング時の URL&正規表現設定
  • ダウンロード時の URL 確認

みたいに面倒な作業が解決できそうなんだけど・・・時間&能力不足なのでとりあえず保留で・・・。