2008/04/10

Recent entries from same category

  1. Growl for Windowsで日本語が表示出来た Hatena
  2. Google App Engine Oilが素晴らしい Hatena
  3. Google App Engineで作れるアプリ数が3個から10個に増えた Hatena
  4. ゆの in Python Hatena
  5. pythonでコンソールが扱えるライブラリConsoleを試してみた Hatena

はてな
追記
日本語表記を返す様に修正しました。japaneseという属性で返ります。
例) 35 : さんじゅうご

JSONとXMLをサポートしています。
template engineでjavascriptとXMLがどう処理出来るかを調べてる間に、いつのまにか作ってしまっていました...。 JSONの場合は以下の様なテンプレート

nabeatzz.json
{% if callback %}{{ callback }}({% endif %}{ number: {{ number }}, japanese: '{{ japanese }}', nabeatzz : [{% if nabeatzz %}'{{ nabeatzz|join:"','" }}'{% endif %}] }{% if callback %}){% endif %}
「value|join: "xxx"」とか便利ですね。
次にXMLの場合は

nabeatzz.xml
<?xml version="1.0" encoding="UTF-8"?>
<response>
    <number>{{ number }}</number>
    <japanese>{{ japanese }}</japanese>{% for c in nabeatzz %}
    <nabeatzz>{{ c }}</nabeatzz>{% endfor %}
</response>
こんな感じです。これはすごい!フツーすぎます。
なお、templateについてはdjangoのtemplate engineと同じ物ですので「テンプレート作者のための Django テンプレート言語ガイド : Django オンラインドキュメント和訳」を参考にすると良いかと思います。

でpythonコードは以下

nabeatzz.py
#!-*- 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
おもいっきりネタですね...。

WriteBacks

TrackBack ping me at
Post a comment

writeback message: Ready to post a comment.