miauのブログ

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

wedata を .ini に変換するサービスを GAE で作り直した

去年、

こんなものを作っていたんですが、ここで使っている AppJet は 2009 年 6 月末でサービス終了してしまっています。せっかく Python Hack-a-thon #3 に来たので、Python のリハビリがてら GAE for Python で作り直してみました。

できたもの

http://wedata.net/databases/AppSnap/items

のデータが、

http://wedata2ini.appjet.net/AppSnap

のような URL で .ini ファイルとして取得されます。この URL を GetIt や AppSnap で指定してやれば、リポジトリとして使えるはずです。Wedata は誰でもデータを追加/編集できるので、データベースを信用してしまうと変なアプリケーションをダウンロードさせられる可能性があります。その点は気をつけてください。
「AppSnap」の部分を Wedata のデータベース名に変えたらほかのデータベースも使えるはずです。

以降ソースです。エラー処理(404 とかのステータスコードの返し方)は手抜き実装がすぐに見つからなかったのでやってません。JS の時と同じで、.ini は改行コード CRLF で吐かないと AppSnap での読み取り時に最後の文字が削れてしまったので、強引に置換してます。

何かツッコミあればお願いします。

import sys
import os
import ConfigParser
import StringIO
from google.appengine.api import urlfetch
from django.utils import simplejson as json

print 'Content-Type: text/plain'
print ''

database_id = os.environ['PATH_INFO'][1:]

url = 'http://wedata.net/databases/%s/items.json' % database_id
result = urlfetch.fetch(url)
if result.status_code == 200:
    apps = json.loads(result.content)
    ini = ConfigParser.SafeConfigParser()
    for app in apps:
        name = app['name']
        ini.add_section(name)
        for key, val in app['data'].iteritems():
            ini.set(name, key, val)

    tmp = StringIO.StringIO()
    ini.write(tmp)
    print tmp.getvalue().replace("\n", "\r\n")