ベーコンナンバー 整理整頓
3 月 21

以前ニコニコ動画をダウンロードするスクリプトを書いたけど、
あれは純粋に動画だけで、コメントがダウンロードできてない。

ということで、今度はコメントもダウンロードしてみる。

はじめにざっとニコニコ動画の仕様をおさらいすると、

  1. 動画画面へアクセスする(例えばhttp://www.nicovideo.jp/watch/sm2721967)
  2. Flashデータを取りにhttp://www.nicovideo.jp/api/getflv?v={動画ID}へアクセス(動画IDは1でいうsm2721967)
  3. 2のレスポンスで動画に関する様々なデータが返ってくる
  4. 3のレスポンスの中のurl=hogehogeへアクセスすると動画をダウンロードできる

だったけど、コメントはデータさらに2のレスポンスの中のms=hogehogeへアクセスすると取得できる。
ただしアクセスする際は

<thread user_id=”{user_id}” res_from=”{取得コメント数}” version=”20061206″ thread=”{thread_id}” />

をポストしてやる必要がある。

user_idはニコニコ画面上でも確認できるuser_idのこと。一応2のレスポンスに含まれてるので、それを使えばいい。
上の取得コメント数はres_from=”-500″とすると500件分のコメントがダウンロードできる。
thread_idは2のレスポンスデータに含まれているthread_idをセット。

ということで、当日ランキング1位のニコニコ動画のコメントを取得するスクリプトはこんな感じ。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
require 'rubygems'
require 'mechanize'
require 'kconv'
require 'cgi'
 
agent = WWW::Mechanize.new
#ログインする
agent.post('https://secure.nicovideo.jp/secure/login?site=niconico',
'mail' => 'メールアドレス','password' => 'パスワード')
 
#ランキングページから1位の動画ページへ遷移
ranking_page = agent.get('http://www.nicovideo.jp/ranking/mylist/daily/all')
video_link = (ranking_page.parser/"a.video").first
video_id = video_link["href"].scan(/smd+$/).first
agent.get(video_link["href"])
 
 
#動画URLの取得
content = agent.get('http://www.nicovideo.jp/api/getflv?v=' + video_id)
hash = Hash.new
content.body.scan(/([^&]+)=([^&]*)/).each {|v| hash[v[0]] = v[1]}
video_url = CGI.unescape(hash['url'])
 
#動画ファイルダウンロード
open(video_id+'.flv','wb'){|f| f.print agent.get_file(video_url)}
 
#コメントデータ取得
comment_host, path = %r{http://([w.]+)(.*)}.match(CGI.unescape(hash['ms'])).to_a.values_at(1,2)
post_data = "<thread user_id="#{hash['user_id']}" res_from="-500" version="20061206" thread="#{hash['thread_id']}" />"
comment = Net::HTTP.start(comment_host,80){|http|
  res = http.post(path,post_data)
  res.body
}
 
open(video_id+'_comment.xml','wb'){|f| f.print comment}

基本的にrubyでニコニコ動画をダウンロードするスクリプトにコメントデータ取得部分を
追加しただけです。

それでは快適なニコニコライフを!

関連のある記事

One Response to “rubyでニコニコ動画のコメントを取得するスクリプト”

  1. 【Ruby】iTunes Connectから売上データを取得するスクリプトを書いてみた | iphoneアプリで稼げるのか Says:

    [...] 基本的に昔書いたrubyでニコニコ動画のコメントを取得するスクリプトと内容は同じ。 [...]

コメントする