JKCommentGetterを使えば、ニコニコ実況のコメントを簡単に取得できる。これをLinuxで使ってみる。

JKCommentGetterの導入

ソースを取得する

git clone https://github.com/ACUVE/JKCommentGetter.git

実行してみる

$ cd JKCommentGetter
$ ruby JKCommentGetter.rb
JKCommentGetter.rb.orig:82: invalid multibyte char (US-ASCII)
JKCommentGetter.rb.orig:81: syntax error, unexpected $end, expecting tSTRING_CONTENT or tSTRING_DBEG or tSTRING_DVAR or tSTRING_END

エラーが出て動かない

文字コードを指定すると動く

$ ruby -Ku JKCommentGetter.rb
** 引数が足りません **

Usage: ruby JKCommentGetter.rb チャンネル 取得時間範囲のはじめ 取得時間範囲のおわり [option...]
Options:
  -m sec  --margin sec                取得時間範囲の前後を指定秒だけ広げます
  -s sec  --start-margin sec          取得時間範囲のはじめを指定秒だけ早くします
  -e sec  --end-margin sec            取得時間範囲のおわりを指定秒だけ遅くします
  -f [filename]  --file [filename]    出力するファイル名を指定します
  -x  --xml                           出力フォーマットをXMLにします
  -j  --jkl                           出力フォーマットをJikkyoRec互換っぽくします
  -t  --time-header                   NicoJKフォーマットの一番初めに時刻ヘッダを追加します
  -o comment  --comment commment      ファイルの頭の辺りに指定したコメントを追加します
  -b path  --base-path path           ファイル出力のフォルダを指定します
  -d  --directory                     チャンネルと同じ名前のフォルダの中にファイルを出力します
  -c  --check-file                    取得時間範囲がよく似たファイルが存在する場合ダウンロードしなくなります
  -a sec  --check-range sec           よく似たファイルと判定する時間範囲を設定します
  -r num  --retry num                 取得エラーが発生した際に再取得へ行く回数
  -i cookie  --cookie cookie          Cookieとして利用する文字列を与えます
  -p  --perfect                       完全なコメントが取得できたと保証できない時にエラーで落ちるようにします
  -w  --working-directory             カレントディレクトリをスクリプトがあるフォルダにします
  -h  --help                          このヘルプを表示し終了します

    詳細は README.md をご覧ください

スクリプトを直接実行するにはJKCommentGetter.rbとJKComment.rbの先頭に次の二行を追加する。

#! ruby -EUTF-8
# -*- mode:ruby; coding:utf-8 -*-
$ vi JKComment.rb
$ vi JKCommentGetter.rb #追記
$ chmod +x JKComment.rb JKCommentGetter.rb
$ ./JKCommentGetter.rb

そのままではログインにCookieが必要なので、自動取得できるようにする。JKCommentGetter.rbのgetCookieを書き換えてcurlでCookieを取得させる。

def getCookie
email="example@example.com"
password="password"
"user_session=" + `curl -c - -d "next_url=" -d "mail_tel=#{email}" -d "password=#{password}" "https://secure.nicovideo.jp/secure/login" | grep user_session | cut -f7 | tail -n1`
end

diff

--- JKCommentGetter.rb.orig 2015-02-21 18:30:04.786149458 +0900
+++ JKCommentGetter.rb 2015-02-21 21:22:13.915893007 +0900
@@ -19,6 +19,9 @@
include JKComment
def getCookie
+ email="example@example.com"
+ password="password"
+ "user_session=" + `curl -c - -d "next_url=" -d "mail_tel=#{email}" -d "password=#{password}" "https://secure.nicovideo.jp/secure/login" | grep user_session | cut -f7 | tail -n1`
# 引数でCookieが与えられなかった場合に呼ばれます。スクリプトの引数として与える場合は設定は不要です
# 設定がよくわからなかったらニコニコ動画にログインして http://jk.nicovideo.jp/ を開いて、

emailとpasswordはそれぞれ書き換える。

次のように使う

$ ruby -Ku JKCommentGetter.rb jk1 `date -d "4:00" +%s` 30m -x -f output.xml

この場合、NHK総合の4時から30分後までのログをXML形式でoutput.xmlに保存される。日付はUNIX時間かYYYYMMDDhhmmss形式で指定する。終わりの時間は経過時間を数字にs,m,h,dなどの単位をつけても指定できる。詳しい使い方は配布元に書いてある。

簡易スクリプト

対話形式でチャンネルと時間を指定するシェルスクリプトを書いてみた。

$ sh jkget.sh -x -f /path/to/output.xml
jk1   NHK 総合    jk101  NHKBS-1            jk231  放送大学
jk2   Eテレ       jk103  NHK BSプレミアム   jk234  BSグリーンチャンネル
jk4   日本テレビ  jk141  BS 日テレ          jk236  BSアニマックス
jk5   テレビ朝日  jk151  BS 朝日            jk238  FOX bs 238
jk6   TBS テレビ  jk161  BS-TBS             jk241  BSスカパー!
jk7   テレビ東京  jk171  BSジャパン         jk242  J Sports 1
jk8   フジテレビ  jk181  BSフジ             jk243  J Sports 2
jk9   TOKYO MX    jk191  WOWOWプライム      jk244  J Sports 3
jk10  テレ玉      jk192  WOWOWライブ        jk245  J Sports 4
jk11  tvk         jk193  WOWOWシネマ        jk251  BS釣りビジョン
jk12  チバテレビ  jk200  スターチャンネル1  jk252  IMAGICA BS
                  jk201  スターチャンネル2  jk255  BS日本映画専門チャンネル
                  jk202  スターチャンネル3  jk256  ディズニー・チャンネル
                  jk211  BSイレブン         jk258  Dlife
                  jk222  TwellV             jk910  SOLiVE24
Channel>1
jk1
Date>4:00
2015年  2月 22日 日曜日 04:00:00 JST
Length(min)>30
/path/to/JKCommentGetter.rb jk1 1424545200 30 -x -f /path/to/output.xml
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    57    0     0  100    57      0     49  0:00:01  0:00:01 --:--:--    51
log: jk1 を 2015-02-22 04:00:00 +0900 から 2015-02-22 04:30:00 +0900まで取得します
log: スレッド1424545201から読み込み開始: start_time=2015-02-22 04:00:01 +0900, end_time=2015-02-22 16:20:03 +0900
log: スレッド1424545201から629コメント読み込んだ: 2015-02-22 04:00:09 +0900
log: スレッド1424545201から読み取り完了: size=629
log: スレッド1424458801から読み込み開始: start_time=2015-02-21 04:00:01 +0900, end_time=2015-02-22 04:00:15 +0900
log: スレッド1424458801から1000コメント読み込んだ: 2015-02-22 01:06:28 +0900
log: スレッド1424458801から読み取り完了: size=6
log: /path/to/output.xml へ出力します
OFFSET: 0

OFFSETには開始時間を再生時間0秒に合わせるための秒数が表示される。こめたんぷれいやのシフトなどに指定する。

ソース

#!/bin/sh
JKGETTER=/path/to/JKCommentGetter.rb
cat << _EOT_ | column -s , -t >&2
jk1,NHK 総合,jk101,NHKBS-1,jk231,放送大学
jk2,Eテレ,jk103,NHK BSプレミアム,jk234,BSグリーンチャンネル
jk4,日本テレビ,jk141,BS 日テレ,jk236,BSアニマックス
jk5,テレビ朝日,jk151,BS 朝日,jk238,FOX bs 238
jk6,TBS テレビ,jk161,BS-TBS,jk241,BSスカパー!
jk7,テレビ東京,jk171,BSジャパン,jk242,J Sports 1
jk8,フジテレビ,jk181,BSフジ,jk243,J Sports 2
jk9,TOKYO MX,jk191,WOWOWプライム,jk244,J Sports 3
jk10,テレ玉,jk192,WOWOWライブ,jk245,J Sports 4
jk11,tvk,jk193,WOWOWシネマ,jk251,BS釣りビジョン
jk12,チバテレビ,jk200,スターチャンネル1,jk252,IMAGICA BS
, ,jk201,スターチャンネル2,jk255,BS日本映画専門チャンネル
, ,jk202,スターチャンネル3,jk256,ディズニー・チャンネル
, ,jk211,BSイレブン,jk258,Dlife
, ,jk222,TwellV,jk910,SOLiVE24
_EOT_
while :
do
read -p "Channel>" CHANNEL
[ 1 -eq `echo $CHANNEL | grep -c '^jk[0-9][0-9]*$'` ] && break
[ 1 -eq `echo $CHANNEL | grep -c '^[0-9][0-9]*$'` ] && CHANNEL=jk$CHANNEL; break
echo Invalid input. >&2
done
echo $CHANNEL >&2
while :
do
read -p "Date>" DATE
START=`date -d "$DATE" +%s`
[ $? -eq 0 ] && break
done
date -d "@$START" >&2
while :
do
read -p "Length(min)>" LENGTH
[ 1 -eq `echo $LENGTH | grep -c '^[0-9][0-9]*$'` ] && break
done
echo $JKGETTER $CHANNEL $START ${LENGTH} $@ >&2
ruby -Ku $JKGETTER $CHANNEL $START ${LENGTH}m $@
if [ `date -d "@$START" +%H` -ge 4 ]
then
OFFSET=14400
else
OFFSET=-72000
fi
echo -n "OFFSET: " >&2
expr `date -d "@$START" +%H` \* -3600 + `date -d "@$START" +%M` \* -60 + $OFFSET >&2
exit 0
view raw jkget.sh hosted with ❤ by GitHub

再生ソフト(Windows)

Linuxのソフトは不明。Androidにはエンコードが必要だがNicoLがある。

TVTestTvTPlayプラグインとNicoJKプラグインを利用する。
導入に手間はかかるがTSファイルの時間に合わせてログが再生される。この場合はrecpt1などにsidオプションを指定するとTOTが削られ使用できなくなる。TSファイル専用。
こめたんぷれいや
コメント設定でシフトを設定する必要はあるが、TSファイル以外の動画にも対応する。TSファイルの再生にはLavFiltersが必要。

2月 22nd, 2015

Posted In: ソフトウェア

タグ: , , , ,

Leave a Comment