Fork me on GitHub

2008/04/10

Recent entries from same category

  1. デスクトップアプリケーションでも認証可能なOAuth「xAuth」をpythonから試してみた。 Hatena
  2. Mumblesを使ったGitHubのGrowl通知アプリケーションを作った。 Hatena
  3. Python2.6にはcursesのバイナリが含まれていないので作る Hatena
  4. 無料ではてなブックマークとdeliciousを同期する方法 Hatena
  5. JSON見づらくないですか? Hatena

はてな
pythonにはxmlrpclibがあり、常駐型のSimpleXMLRPCServerやCGIから使えるCGIXMLRPCRequestHandlerというとても有用なモジュールが存在します。
たとえば
def plus(num1, num2):
    return num1 + num2
という関数をXMLRPCサーバから公開したい場合
from SimpleXMLRPCServer import CGIXMLRPCRequestHandler
handler = CGIXMLRPCRequestHandler()
handler.register_function(plus)
handler.handle_request()
とすれば出来上がります。
またモジュールとしてインタフェースを提供したい場合は
class Foo:
    def plus(self, num1, num2):
        return num1 + num2
というインタフェースに対して
from SimpleXMLRPCServer import CGIXMLRPCRequestHandler
handler = CGIXMLRPCRequestHandler()
handler.register_instance(Foo())
handler.handle_request()
こうすれば出来上がり。
先ほど、NabeAtzz APIをXMLRPCとして呼び出せるインタフェースを作りました。
エントリポイントは
http://mattn.appspot.com/nabeatzz_xmlrpc
となります。試しにpythonでXMLRPC Clientを作成し呼び出してみます。
# -*- coding: utf-8 -*-
import sys
from xmlrpclib import ServerProxy

api = ServerProxy("http://mattn.appspot.com/nabeatzz_xmlrpc")
for n in range(1, 11):
  res = api.nabeatzz(n)
  print "%s : %s" % (res['number'], res['japanese'])
  if res.has_key('nabeatzz'):
    for c in res['nabeatzz']:
      print "  %s" % c
コードはこんな感じでしょうか。これを実行すると正しく
1 : いち
2 : に
3 : さん
  アホになる
4 : よん
5 : ご
  犬っぽくなる
6 : ろく
  アホになる
7 : なな
8 : はち
9 : きゅう
  アホになる
10 : じゅう
  犬っぽくなる
という結果が得られました。

blog comments powered by Disqus
WriteBacks

TrackBack ping me at
Post a comment

writeback message: Ready to post a comment.