« ゆのはな体験版 | トップページ | …で作ってみたカレンダー »

2005年2月13日

ココログのカレンダー形式リンク作成 ver.1.0.2

# 要 Python
import xmlrpclib, xml.sax.saxutils, calendar, time, sys
URL = "http://tuchinoko.moe-nifty.com/oboegaki/" # ここを自分のココログ top に
NAME = "hoge" # ココログアカウント
PASS = "????????" # パスワード
MAXTITLES = 10000 # 取得する記事の最大数
class Post(object):
    def __init__(self, post):
        t = time.strptime(str(post["dateCreated"]).rstrip("Z")+"UTC",
                          "%Y-%m-%dT%H:%M:%S%Z")
        self.time = time.localtime(calendar.timegm(t))
        self.title = unicode(post["title"])
        self.link = post["link"]
    def get_date(self):
        t = self.time
        return t.tm_year, t.tm_mon, t.tm_mday
def make_calendar(year, month, month_data):
    calendar.setfirstweekday(calendar.SUNDAY)
    data = [
        '<table rules="cols" style="text-align:center;">\n',
        u'<caption>%d年 %d月</caption>\n' % (year, month),
        '<tr style="color:green; background-color:#ffc;">'
        u'<th style="color:red;">日</th>',
        u'<th>月</th><th>火</th><th>水</th><th>木</th><th>金</th>',
        u'<th style="color:blue;">土</th></tr>\n']
    for week in calendar.monthcalendar(year, month):
        data.append('<tr>')
        for day in week:
            data.append('<td>')
            if day:
                if day in month_data:
                    d = month_data[day]
                    p = d[-1] # その日の最初の post
##                    p = d[1] # その日の最後の post にするなら
                    t = [x.title for x in d]
                    t.reverse()
                    title = " | ".join(t)
##                    if len(d) > 1: # タイトル全部でなく数を表示する場合
##                        title = u"%s、他%d" % (p.title, len(d)-1)
##                    else:
##                        title = p.title
                    title = xml.sax.saxutils.quoteattr(
                        xml.sax.saxutils.unescape(title))
                    data.append('<a href="%s" title=%s>%d</a>' % (
                        p.link, title, day))
                else:
                    data.append('%d' % (day,))
            data.append('</td>')
        data.append('</tr>\n')
    data.append('</table>\n')
    return "".join(data)
try:
    server = xmlrpclib.ServerProxy("http://app.cocolog-nifty.com/t/api")
    blogs = server.blogger.getUsersBlogs("", NAME, PASS)
except Error, v:
    print "ERROR", v
    sys.exit()
for i in blogs:
    if i["url"] == URL:
        ID = i["blogid"]
        print "blog:", unicode(i["blogName"])
        break
else:
    print URL,"not found."
    sys.exit()
try:
    posts = server.metaWeblog.getRecentPosts(ID, NAME, PASS, MAXTITLES)
except Error, v:
    print "ERROR", v
    sys.exit()
data = {}
min_time = (10000,)
max_time = (0,)
for i in posts:
    p = Post(i)
    d = p.get_date()
    if d in data:
        data[d].append(p)
    else:
        data[d] = [p]
    min_time = min(min_time, p.time)
    max_time = max(max_time, p.time)
##    print "%4d/%2d/%2d" % p.get_date(), p.title
all_calendars = []
for year in range(max_time.tm_year, min_time.tm_year-1, -1):
    year_calendars = []
    for month in range(12, 0, -1):
        month_calendar = {}
        for day in range(1, 32):
            k = (year, month, day)
            if k in data:
                month_calendar[day] = data[k]
        if month_calendar:
            year_calendars.append((month, month_calendar))
    if year_calendars:
        all_calendars.append((year, year_calendars))
data = [
    '<?xml version="1.0" encoding="utf-8"?>\n',
    '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"',
    ' "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">\n',
    '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">\n',
    '<head>\n',
    '<title>calendar</title>\n',
    '</head>\n<body>\n']
for year, year_calendars in all_calendars:
    data.append(u'<h4>%d年</h4>\n' % (year,))
    year_data = []
    for month, month_calendar in year_calendars:
        print u"%4d年%2d月 %3d posts" % (year, month, len(month_calendar))
        year_data.append(make_calendar(year, month, month_calendar))
    data.append('<hr />\n'.join(year_data))
data.append('</body>\n</html>')
f = file("calendar.htm", "w") # 作成する html ファイル名
f.write("".join(data).encode("utf-8"))
f.close()
# 好きに流用してください。

« ゆのはな体験版 | トップページ | …で作ってみたカレンダー »

Python」カテゴリの記事

ウェブログ・ココログ関連」カテゴリの記事

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/68856/2907038

この記事へのトラックバック一覧です: ココログのカレンダー形式リンク作成 ver.1.0.2:

« ゆのはな体験版 | トップページ | …で作ってみたカレンダー »

ブログ妖精

  • ココロ

Affiliate

無料ブログはココログ