ケータイ向け OpenSocial プラットフォーム「gumi Platform」

先日、モバイルSNS「gumi」が日本初となる携帯電話向けOpenSocialプラットフォームをリリースしました。実は、私もOpenSocialエンジン部分の開発に企画段階から関わっています。もともと gumi は、id:perezvon が Django で構築したサイトで、 OpenSocial エンジンの部分も Python で書いています。今回リリースされた gumi Platform の特徴としてはこんな感じです。

  • RESTful API ベースで JavaScript および IFRAME は使用しない(というか使えない)
  • APIへのアクセス制御には OAuth を採用
  • Viewer, Owner, Friends 情報を利用してソーシャル・アプリケーションを構築可能
  • 文字コードは UTF-8 を使用
  • 絵文字はドコモのUnicodeテキスト形式で記述し、他キャリア向けに自動変換
  • ホスティング環境として Google App Engine も利用可能(当然それ以外もOK)

下の画像を見てもらえれば、仕組みはイメージしてもらえると思いますが、携帯電話なので JavaScript が使えません。そこで、サードパーティ側から受け取った XML を gumi Platform 側で一枚の HTML にレンダリングして携帯電話に返すような構成になっています。

詳しくは、 Google Code にドキュメントがあるのでそちらを参照してください。

» gumi - Google Code

gumi Platformのリリースと前後して、2つほど検定/占い系のアプリも公開したのですが、一気にアクセスが来て大変な事になりました。やはりまだまだ世間はケータイなんだと実感しました。私も発売日に iPhone を手に入れたくちなのですが、使い勝手や安定性の点からいうと日本の携帯電話に一日の長がある感じがします。今は少し落ち着いたのですが、 Google App Engine のコンソールで見るとこんな感じです。

実際にソーシャルなアプリケーションを作ろうとすると、 OAuth の部分とかがかなり面倒くさいです。そこで、 Python 用には自動で OAuth 認証をして gumi API にアクセスするようなヘルパーライブラリを用意しています。他の言語用にも同様のライブラリも用意したいのですが、諸般の事情により今はそこまで手が回りません。

一番欲しいのはPHP用のライブラリなのですが。うーん、誰か作ってくれないかな…

Django Middleware で Traceback をコンソールに出力する

Django は、コンソールにデバッグ情報を出力してくれません(クリティカルなエラーは除く)。普通に開発している分には、ブラウザに表示される Traceback が充実しているので十分なのですが、API などブラウザ以外からリクエストが飛んでくるアプリケーションを開発している場合に、かなり不便なので Middleware を使ってコンソールに Traceback を出力するようにします。

まず、以下を middleware.py としてプロジェクト直下に保存。 request オブジェクトの内容も出力したい場合は、コメントを外します。

import traceback
import sys

class TracebackMiddleware():
    def process_exception(self, request, exception):
        print '######################## Exception ##################'
        print '\n'.join(traceback.format_exception(*sys.exc_info()))
        #print '-----------------------------------------------------'
        #print repr(request)
        print '#####################################################'

settings.py に ConsoleExceptionMiddleware の設定を追加。

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.middleware.doc.XViewMiddleware',
    'myapp.middleware.ConsoleExceptionMiddleware',
)

これでプログラム中でエラーが発生した際に manage.py を実行しているコンソールに Traceback 情報が表示されるようになります。以下サンプル。

関連リンク:
Django snippets: Middleware for printing of exception to console