ココログのカレンダー形式リンク作成 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() # 好きに流用してください。
« ゆのはな体験版 | トップページ | …で作ってみたカレンダー »
「ウェブログ・ココログ関連」カテゴリの記事
- ココログオリジナルテーマにココロちゃんが無い!(2010.05.28)
- はてなしてます(2008.11.02)
- ココロのパンの缶詰(2008.08.10)
- こういうときに限って驚くほど初音ミク オリジナルが生きてくるものなのだ。(2008.01.21)
- ブログ妖精と VOCALOID とオプション(2008.01.06)
「Python」カテゴリの記事
- from __future__ import hatsune(2008.09.15)
- Pygame1.8.1出たよ!(2008.08.02)
- それは kokoro.py と言うプログラム(2008.04.27)
- smf2txt.py ‐ SMF をテキストに(2008.04.09)
- 2007年下半期ライトノベルサイト杯結果と、同じのに投票した方々(2008.01.28)