2008年8月30日土曜日

Python: はてなブックマークのコメント一覧非表示機能について

このブログ記事をはてなブックマークに追加

はてなブックマークのコメント一覧を非表示にする機能が追加された。しかし、新着ブックマークからはコメントが読めてしまう。

例えば、はてなブックマークのコメント一覧非表示機能テストのページはコメントを非表示に設定しているが、その新着ブックマークのページを開くとコメントが表示されていることが分かる。さらに、下記のPythonスクリプトを

hatena_get_comments.py http://d.hatena.ne.jp/fk_2000/20080829/p1

のように実行させると、すべてのコメントとそのユーザ名を表示することができる。

これをGoogle App EngineでWebサービスとすることは簡単だろう。Webサービスの公開はモラルに欠けるようにも思うのでやめておくが、本当にコメントを読めなくするつもりなら今回の非表示機能は中途半端と云わざるを得ない。

因みに、個人的にはコメントを非表示にすることについては賛成とも反対とも考えておらず、あまり関心がない。しかし、はてなブックマークの存在意義にも関わってくるような機能についてはもう少し議論・熟考したほうが良いようにも思える。

hatena_get_comments.py

#!/usr/bin/env python # -*- coding: utf-8 -*- import sys, os, urllib, urllib2, xmlrpclib from HTMLParser import HTMLParser class HatenaHTMLParser(HTMLParser): is_user = False is_comment = False comments = [] current_user = "" current_comment = [] def handle_starttag(self, tag, attrs): if tag == "dd" and ("class", "bookmarker") in attrs: self.is_user = True elif tag == "span" and ("class", "comment") in attrs: self.is_comment = True def handle_endtag(self, tag): if self.is_user and tag == "dd": self.is_user = False if self.is_comment and tag == "span": self.is_comment = False self.comments.append((self.current_user, "".join(self.current_comment))) self.current_comment = [] def handle_data(self, data): if self.is_user: self.current_user = unicode(data) if self.is_comment: self.current_comment.append(unicode(data)) def get_comments(self): return self.comments def main(args): if len(args) < 2: print >>sys.stderr, u"Usage: %s ブックマークされているURL" % os.path.basename(args[0]) sys.exit(1) cnt = xmlrpclib.ServerProxy("http://b.hatena.ne.jp/xmlrpc").bookmark.getCount(args[1])[args[1]] url = "http://b.hatena.ne.jp/bookmarklist?url=%s" % urllib.quote_plus(args[1]) parser = HatenaHTMLParser() for i in range(0, cnt, 25): data = urllib2.urlopen(url + "&of=%d" % i).read() parser.feed(data) for user, comment in parser.get_comments(): print user, comment.encode("mbcs") if __name__ == "__main__": main(sys.argv)

0 コメント: