RSSリーダを使うことで、あるブログに新しく投稿されたエントリはチェックできますが、コメントをつけたエントリにその後どのようなコメントがついたか、コメントをつけなくても議論がどのように進行しているかをチェックしたいことがあります。はてなアンテナを使えばそういうのもチェックできるのかもしれませんが、チェックのタイミングを自分で設定したいので、アンテナ的なスクリプトを書こうと思いました。
最初は、エントリのmd5ダイジェストを使って、それが変更されていたら新しいコメントがついたことだとしていました。でも、どこからそのエントリに来たかとかのリファラを表示している人のエントリだとコメントなどがついたわけではなくてもハッシュ値が変わってしまうことがあります。ということで、単純に行数が変わっていたら新しいコメントがついたと判断するようにしてみました。
せっかくのアンテナなんだし、ブログエントリ以外も追いかけても良いような気もするので、ハッシュを取る場合もあるかな。
ということで、アンテナ用のエントリクラスはこんな感じかな。
class entry:
    ##
    def _get_page(self):
	f = urllib.urlopen(self.url)
	p = f.read()
	f.close()

	return p

    ##
    def _count_lines(self, page = ''):
	if not page:
	    page = self._get_page()

	return len(page.split('\n'))

    ##
    def _get_hash(self, page = ''):
	if not page:
	    page = self._get_page()

	return md5.new(page).digest()

    ##
    def _get_title(self, page):
	org_codec = pykf.guess(page)
	if org_codec in range(1, 6):
	    c = ("", "ascii", "sjis", "euc-jp", "jis", "utf-8")

	    upage = unicode(page, c[org_codec], "ignore")
	    epage = upage.encode("euc-jp", "ignore") 

	    title_pat = re.compile('<title>(.*?)</title>', re.I|re.S)
	    title = title_pat.search(epage).group(1)
	    title = title.replace('\n', ' ')
	else:
	    title = self.url

	return title

    ##
    def __init__(self, url, use_hash = '0'):
	now = time.time()

	self.url = url
	self.use_hash = int(use_hash)
	self.registered = now
	self.updated = now

	page = self._get_page()
	self.title = self._get_title(page)
	if self.use_hash:
	    self.checker = self._get_hash(page)
	else:
	    self.checker = self._count_lines(page)

    ##
    def check_update(self):
	if self.use_hash:
	    tmp_checker = self._get_hash()
	else:
	    tmp_checker = self._count_lines()

	if tmp_checker != self.checker:
	    self.checker = tmp_checker
	    self.updated = time.time()
Posted by setomits at 10:03 | Comments: 2
Re: アンテナ用エントリクラス
あぁ、それで「Python-urllib/1.15」からのアクセスが来る様になったわけですね。
ご指摘頂きましたtitleの件、対応致しました。
Posted by shunuhs at 12:27 on 2005 Nov 10th
Re: アンテナ用エントリクラス
そういうわけでした。ってちゃんとUAをチェックしてるんですね。すごい。
titleの件、無理強いしたようですみませんでした。
# というのはshunuhsさんとこのsh1.2 pyblosxom : pyblosxomでタイトル表示: pytitleプラグイン作成の話なのでした。
Posted by setomits at 12:34 on 2005 Nov 10th
Leave a comment
Required fields are marked with *
search
calendar
Feb 2012
SunMonTueWedThuFriSat
   1234
567891011
12131415161718
19202122232425
26272829   
archives
photos on flickr
www.flickr.com