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")