2005
Nov
9th
RSSリーダを使うことで、あるブログに新しく投稿されたエントリはチェックできますが、コメントをつけたエントリにその後どのようなコメントがついたか、コメントをつけなくても議論がどのように進行しているかをチェックしたいことがあります。はてなアンテナを使えばそういうのもチェックできるのかもしれませんが、チェックのタイミングを自分で設定したいので、アンテナ的なスクリプトを書こうと思いました。
最初は、エントリのmd5ダイジェストを使って、それが変更されていたら新しいコメントがついたことだとしていました。でも、どこからそのエントリに来たかとかのリファラを表示している人のエントリだとコメントなどがついたわけではなくてもハッシュ値が変わってしまうことがあります。ということで、単純に行数が変わっていたら新しいコメントがついたと判断するようにしてみました。
せっかくのアンテナなんだし、ブログエントリ以外も追いかけても良いような気もするので、ハッシュを取る場合もあるかな。
最初は、エントリの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
ご指摘頂きましたtitleの件、対応致しました。
titleの件、無理強いしたようですみませんでした。
# というのはshunuhsさんとこのsh1.2 pyblosxom : pyblosxomでタイトル表示: pytitleプラグイン作成の話なのでした。