時候の挨拶
30分プログラム、その251。時候の挨拶を出力するプログラム。
単に日付にあわせて、直子の代筆から時候の挨拶を取得して、ランダムに一つ出力するだけ。
詰ったのは、PythonでUTF-8以外を扱う方法。Python でUTF-8, shift_jis, euc_jpなど日本語を使う方法にあるようにcodecモジュールを使えばいいらしい。
たとえば、Shift_JISのWebページを取得する場合は、
fh = codecs.getreader('shift_jis')(urllib.urlopen(url))
としてやる。
使い方
$ python season_msg.py 余寒なお去りがたきおりから、ますますご発展の事お喜び申し上げます。 $ python season_msg.py 雪の消え間に久しぶりで黒い土が見えはじめましたが、皆様ますますご清栄のこととお喜び申し上げます。
ソースコード
#! /usr/bin/python # -*- mode:python; coding:utf-8 -*- # # season_msg.py - # # Copyright(C) 2008 by mzp # Author: MIZUNO Hiroki / mzpppp at gmail dot com # http://howdyworld.org # # Timestamp: 2008/02/22 21:42:04 # # This program is free software; you can redistribute it and/or # modify it under MIT Lincence. # import urllib import datetime import random import re import codecs import sys sys.stdout = codecs.getwriter('utf-8')(sys.stdout) class SeasonMessage: def current_message(self): """Get message for today""" return self.message(datetime.date.today()) def message(self,date): """Get message for 'date'""" return random.choice(self.all_messages(date)) def all_messages(self,date): """Get all meggages for 'date'""" return self.__parse(self.__open(date)) def __open(self,date): # jan: http://sample.teglet.co.jp/doc/133/ url = 'http://sample.teglet.co.jp/doc/%d/' % (date.month+132) return codecs.getreader('shift_jis')(urllib.urlopen(url)) def __parse(self,fh): l = [] r = re.compile(u"<br>・([^<>]+)") for line in fh.read().split("\r"): m = r.search(line) if m: l.append(m.group(1)) return l if __name__ == '__main__': sm = SeasonMessage() print sm.current_message()