Subscribed unsubscribe Subscribe Subscribe

Pythonで自分のダイアリーについたブックマークを確認

id:CortYumingさんと話してて、あったら便利かなぁ、と思って書いてみた。
はてなAPIでとれるものを調べてみたカンジでは

  • 自分のダイアリーについた総ブックマーク数
    • 被ブックマーク合計数取得APIというのがある。*1
  • 自分のダイアリーについた新着ブックマーク

前者はXML-RPCで取得する。これはPythonの標準モジュールxmlrpclibで簡単に取れるらしい。
http://www.python.jp/doc/release/lib/module-xmlrpclib.html
後者は多分RSSでしか取れない。標準モジュールではRSSのフィードを解析することができないらしいので、feedparserというライブラリを使ってみた。easy_installでサクッと入った。
http://www.feedparser.org/

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import codecs
import feedparser
import sys
from xmlrpclib import ServerProxy

sys.stdout = codecs.getwriter('utf_8')(sys.stdout)

try:
    # アカウント名取得
    user = sys.argv[1]
    
    # 新着ブックマーク
    rss = 'http://b.hatena.ne.jp/bookmarklist.rss?url=http%3A%2F%2Fd.hatena.ne.jp%2F' + user
    feed = feedparser.parse(rss)
    for entry in reversed(feed['entries']):
        # 記事のタイトルは entry['title'] で取得
        date = "%4d/%02d/%02d" % entry['updated_parsed'][:3]
        print '%s %s: %s' % (date, entry['author'], entry['summary'])

    # 被ブックマーク総数
    server = ServerProxy('http://b.hatena.ne.jp/xmlrpc')
    total = server.bookmark.getTotalCount('http://d.hatena.ne.jp/' + user)
    print 'total: %d' % (total)
        
except IndexError:
    print 'usage: ./hatebu.py <your_hatena_id>'

実行例:

$ ./hatebu.py
usage: ./hatebu.py <your_hatena_id>
$ ./hatebu.py sugyan
2009/04/23 yokochie: 
2009/04/23 hide-K: 
2009/04/23 ikasam_a: 
2009/04/23 jazzanova: 
2009/04/23 mopemope: 
2009/04/23 kamipo: 
2009/04/23 denken: 
2009/04/23 download_takeshi: shibuya.pm
2009/04/24 inc_aka: 16進数
2009/04/24 inc_aka: 
2009/04/24 dealforest: 
2009/04/25 taigou: 
2009/04/25 Kwappa: 「あ、『伝説の焼き肉』の人ですね!」とかなったらいいなぁ。というのが、本当に実現 したことに感激!!
2009/04/26 at_yasu: 
2009/04/26 myfinder: 
2009/04/29 minesouta: 
2009/04/29 pmakino: 
2009/05/01 hyoshiok: 1
2009/05/04 myfinder: 
2009/05/06 rabbit2go: 
2009/05/06 aki77: 『% wget -w5 --random-wait http://どこかのURL/{00..23}{00..59}.jpg』
2009/05/07 amachang: XPath を使わず更に短く!
total: 249

こんな感じでいいのかな…
xml.saxでRSS解析してみようと試みて失敗したり文字コードがうまくいかなかったり、たくさんつまづいた。
まだまだPythonうまく書けないわ…orz