コメント取得には,ニコニコ動画のIDではなく,固有のスレッドIDが必要らしい.
- http://flapi.nicovideo.jp/api/getflv/sm** でスレッドIDとニコニココメント取得APIをのアドレス取得(動画毎にapiの番号が違うから気をつけて).この操作にはニコニコ動画のログイン情報のクッキーが必要.
- 取得したAPIにgetリクエストすればコメントのxmlを得られる.リクエストの形式は「http://msg.nicovideo.jp/**/api/thread?version=20090904&thread=***&res_from=-***」という具合.res_from=-***を指定すると,直近***件のコメントを取得できる.
- コメントのパースを適当にする.
ソースコード
# -*- coding: utf-8 -*- import urllib2, cookielib from urlparse import parse_qs import re class NiconicoCommentGetter: def __init__(self,username,password): cj = cookielib.CookieJar() # Cookieを格納するオブジェクト cjhdr = urllib2.HTTPCookieProcessor(cj) # Cookie管理を行うオブジェクト self.opener = urllib2.build_opener(cjhdr) # OpenDirectorオブジェクトを返す self.opener.open("https://secure.nicovideo.jp/secure/login","mail=%s&password=%s" % (username,password) ) def get(self,smID): # smIDからthreadIDの取得 r = self.opener.open('http://flapi.nicovideo.jp/api/getflv/' + smID) html = r.read() res = parse_qs(urllib2.unquote(html)) # threadIDからコメントxmlの取得 r = self.opener.open("%sthread?version=20090904&thread=%s&res_from=-1000" % (res['ms'][0],res['thread_id'][0]) ) xml = r.read() # コメントのパース(無理やり,仕様変わってダメになるかも) comments = [] rm = re.compile(">(.*)</chat") for line in xml.split('><') : g = rm.search(line) if( g != None ) : comments.append(g.group(1)) return comments commentGetter = NiconicoCommentGetter("email", "pw") for i in commentGetter.get("sm7"): print(i)
出力例
a 懐かしいな 最も古い動画? こんなのあるんだ sm7がなんで今更出現したの? はえ^~ 7コメ、記念カキコ とうこうびなぞすぎ 6と8無いよ なんでsm7が今更wwwwww ...(略)