- デザインテンプレート
- プラグイン機能
- 検索(プラグイン実装)
- ページング(プラグイン実装)
- 編集(プラグイン実装)
- コメント/トラックバック(プラグイン実装)
Weblogにあります。適当にmicroformatに対応してあります。
この後codereposに上げる予定です。![]()
でもどのディレクトリに上げていいか分かりません><
追記
http://coderepos.org/share/browser/websites/appspot.com/blog/trunk
にアップした。
Weblogにあります。適当にmicroformatに対応してあります。
この後codereposに上げる予定です。![]()
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()
こうすれば出来上がり。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 : じゅう
犬っぽくなる
という結果が得られました。
{% if callback %}{{ callback }}({% endif %}{ number: {{ number }}, japanese: '{{ japanese }}', nabeatzz : [{% if nabeatzz %}'{{ nabeatzz|join:"','" }}'{% endif %}] }{% if callback %}){% endif %}
「value|join: "xxx"」とか便利ですね。
<?xml version="1.0" encoding="UTF-8"?>
<response>
<number>{{ number }}</number>
<japanese>{{ japanese }}</japanese>{% for c in nabeatzz %}
<nabeatzz>{{ c }}</nabeatzz>{% endfor %}
</response>
こんな感じです。これはすごい!フツーすぎます。
#!-*- coding:utf-8 -*-
import os
import cgi
from google.appengine.ext.webapp import template
ndg = [
{0: ''},
{0: 'じゅう'},
{0: 'ひゃく', 3: 'ぴゃく', 6: 'ぴゃく', 8: 'ぴゃく'},
{0: 'せん', 3: 'ぜん'},
]
dig = [
{0: ''},
{0: 'まん'},
{0: 'おく'},
{0: 'ちょう'},
{0: 'けい'},
{0: 'がい'},
{0: 'じょ'},
{0: 'じょう'},
{0: 'こう'},
{0: 'かん'},
{0: 'せい'},
{0: 'さい'},
{0: 'ごく'},
{0: 'こうがしゃ'},
{0: 'あそうぎ'},
{0: 'なゆた'},
{0: 'ふかしぎ'},
{0: 'むりょうたいすう'}
]
num = [
{0: 'ぜろ'},
{0: 'いち'},
{0: 'に'},
{0: 'さん'},
{0: 'よん'},
{0: 'ご'},
{0: 'ろく', 3: 'ろっ'},
{0: 'なな'},
{0: 'はち', 3: 'はっ', 4: 'はっ'},
{0: 'きゅう'}
]
def num2ja(arg):
sn = str(arg)
ln = len(sn)
if sn == 0:
return num[0][0]
if ln >= 17*4+1:
return dig[17][0]
n = 0
ret = ""
while n < ln:
if sn[n] != 0 and (sn[n] != 1 or (ln-n)%4 == 1):
ret += num[int(sn[n])].has_key(ln-n) and num[int(sn[n])][ln-n] or num[int(sn[n])][0]
if sn[n] != 0:
ret += ndg[(ln-n-1)%4].has_key(sn[n]) and ndg[(ln-n-1)%4][int(sn[n])] or ndg[(ln-n-1)%4][0]
ret += dig[(ln-n-1)/4].has_key(sn[n]) and dig[(ln-n-1)/4][int(sn[n])] or dig[(ln-n-1)/4][0]
n += 1
return ret
try:
form = cgi.FieldStorage()
number = ""
format = "json"
nabeatzz = []
nabeatzz_3 = "アホになる"
nabeatzz_5 = "犬っぽくなる"
callback = ""
mime = {
'json': 'text/javascript',
'xml': 'text/xml',
}
if form:
if form.has_key('number'): number = int(form['number'].value)
if form.has_key('format'): format = form['format'].value
if form.has_key('callback'): callback = form['callback'].value
if number and format in mime.keys():
if (number % 3) == 0 or str(number).find("3") != -1: nabeatzz.append(nabeatzz_3)
if (number % 5) == 0: nabeatzz.append(nabeatzz_5)
template_values = {
'number' : number,
'japanese' : num2ja(number),
'nabeatzz' : nabeatzz,
'callback' : callback,
}
print "Content-Type: %s; charset=UTF-8" % mime[format]
print ""
path = os.path.join(os.path.dirname(__file__), 'nabeatzz.%s' % format)
print template.render(path, template_values)
else:
print "Content-Type: text/html; charset=UTF-8"
print ""
path = os.path.join(os.path.dirname(__file__), 'nabeatzz.html')
print template.render(path, {})
except:
print "Status: 400"
一応、動く物も用意しました。NabeAtzz APIおもいっきりネタですね...。
このブログを応援する