curlで叩ける年齢計算サイト

本日のやっつけ仕事です。

きっかけ

作った

http://age.x86-64.jp/

使用例
http://age.x86-64.jp/1991/12/29Age: 22というレスポンスを得る。

しくみ

WebフレームワークはFlask, アプリケーションサーバはこのTrac同様にuWSGIです。フロントエンドはnginxです。

ソースコード

from flask import Flask
from datetime import date

app = Flask(__name__)
app.config.update(
    DEBUG=False,
)

@app.route('/')
def usage():
    return "Usage: http://age.x86-64.jp/yyyy/mm/dd <br> curl recommended."

@app.route('/<int:yyyy>/<int:mm>/<int:dd>')
def calculate(yyyy, mm, dd):
    """This part is from Stack Overflow: http://stackoverflow.com/a/2217537/1402144"""
    birthday = date(yyyy, mm, dd)
    today = date.today()
    years = today.year - birthday.year
    if all((x >= y) for x,y in zip(today.timetuple(), birthday.timetuple())):
        age = years
    else:
        age = years - 1
    """End StackOverflow"""
    return "Age: %d" % age

if __name__ == '__main__':
    app.run() # Change this to "pass" in order to run this via uwsgi.

はまってたところ

最初、calculate(yyyy, mm, dd)の返り値にageという変数を直接使おうとしていた (つまりreturn age) が、

TypeError: 'int' object is not callable.

というエラーを得た。上記のようにsprintfっぽく、return "%d" % age"として解決。

Comments

No comments.