ユーザーブロマガは2021年10月7日(予定)をもちましてサービスを終了します

第二回 openrec.tvのコメントを取得しニコニコ動画風に表示する方法[録画職人向け]
閉じる
閉じる

新しい記事を投稿しました。シェアして読者に伝えましょう

×

第二回 openrec.tvのコメントを取得しニコニコ動画風に表示する方法[録画職人向け]

2017-03-27 13:08
    参考記事
    http://ch.nicovideo.jp/onnahakaere/blomaga/ar485427


    <!--はじめに

    私が実際にやっているやり方だとほとんど解説が出来ないので
    あえて全手動で録画初心者にも分かりやすくユーザーの多いwindowsOSでオープンレックのコメントを取得しxml変換する方法を考えながら書いていきたいと思います。

    はじめに-->


    用意するもの
    ・windows7以上のPC
    ・エクセル
    ・MultiRep
    ・グーグルクローム
    ・各種文字コード変換ツール

    まずグーグルクロームを立ち上げ
    今回の実験台になってもらう高田のページに飛ぶことからはじめよう。


    高田健志 オープンレックページ


    この場所でf12を押す。
    するとデ(ディ)ベロッパー・ツール(以下、ディベロッパーと呼ぶ)がグーグルクロームのボトム、またはサイドに表示される。




    このディベロッパーの中にNetwork(ネットワーク監視)のタブがあるのでそれをクリック
    コメントしている人の情報を抜き取るために
    Filter欄に chat/list を入力しておく


    これで準備OK
    この状態で高田健志の ゲームする という生放送録画を開く

    たぶん↓の方にあるよ



    録画をクリックするとTSの再生が開始される。
    するとディベロッパーツールにURLがリアルタイムに追加されていくのが分かる。


    ※今回は簡単に説明する為、このURLを手動で取得していく(誰でも出来るように)


    ①まず動画IDより下のパスが&from_dtから始まっているものを探す
    to_dtでは無くfromを探すこと

    一番最初のfromから始まるURLをコピーする



    コピーしたURLをメモ帳に分かりやすく貼っておく。



    ②次に動画の終わりまで残り1分~1分30秒までシークする
    すると一分後ぐらいにはTSが終わりプレミアの催促広告が出ますが・・・



    無視してシーク後に追加されたネットワークに追加された最後の&from_dtから始まっているURLをコピーする。


    またコピーしたURLはメモ帳に貼っておく。



    これで
    ①TS開始時に取得した最初のfromから始まるコメントURL
    ②TS終了時に取得した最後のfromから始まるコメントURL

    この2つがメモ帳に貼り付けられている状態になった。



    ではまず
    ①のURLを使って
    URLを分解して解読してみよう。

    https://www.openrec.tv/viewapp/api/v3/chat/list?
    サーバーの番号みたいなのがあるけどおそらくほぼ固定。あまり関係無し

    movie_id=92428
    動画化(生放送化)された番号、ニコニコでいうならばsm*****lv*****みたいな生ID?

    &from_dt=2016-08-22+06%3A16%3A55&to_dt=2016-08-22+06%3A17%3A54

    メールで例えたら
    fromは~から
    toは~まで
    そのままの意味だと思われる。

    そして赤文字の箇所が暗号化していてよく分からないんでこの箇所をデコード処理する。
    (%=エンコードされていると覚えること)

    URLエンコード・デコードツール


    上記ページでデコード変換する

    中身が見えた。日付と時間だったようだ↓

    &from_dt=2016-08-22 06:16:55&to_dt=2016-08-22 06:17:54

    (6時16分55秒から6時17分54秒まで)

    ようするに

    "動画ID_92428のチャットデータの
    2016年8月22日6時16分55秒から
    2016年8月22日6時17分54秒までの
    コメントを取得しました。"

    というURLであることが分かった。

    更にこれを図式すると以下のようなことが分かる。



    1分間のコメントだけじゃ取得したとは言えない。
    では仮に、この動画が約57分なのでディベロッパーを放置しておくと計算上57ファイルの1分間コメントデータを取得出来るはず
    この57ファイルを結合してやるとどうなる?

    図にするとこう


    1分置きのデータを拾っていくと分かるが
    次のつなぎ目のコメントが数個飛んでしまっていたり
    明らかにコメント数が少なくなっていたりする。
    おそらく検問(NG)した後のコメントデータを表示している為
    実際に表示するコメントが少なくなってんのかな

    これじゃ面白くないので
    1分範囲を動画の最大時間である57分範囲のURLに変換してやる。
    こうすれば全コメントつなぎ目など気にならないはず。

    ここでようやく②のURLの出番である。
    1のURLと同じように範囲指定の箇所を解析してみる。
    (動画IDなどの解説は省略)
    &from_dt=2016-08-22 07:13:11&to_dt=2016-08-22 07:14:10

    となっているので

    &to_dt=2016-08-22 07:14:10
    これが最後のコメントの時間になる。

    ようするに
    最初に取得した①のURLのfromである
    &from_dt=2016-08-22 06:16:55



    最後に取得した②のURLのtoである
    &to_dt=2016-08-22 07:14:10


    これらを組み合わせると全範囲になる。
    &from_dt=2016-08-22 06:16:55&to_dt=2016-08-22 07:14:10

    そして最後にURLとして認識させる為に時間部分をエンコードしてやる
    (英字は一応、半角大文字に修正してね)
    &from_dt=2016-08-22+06%3A16%3A55&to_dt=2016-08-22+07%3A14%3A10

    これで57分全体のコメントが取得出来るURLができた。

    図にしてやるとこんな感じのURLになったはず



    動画の時間は56分なので途切れることなく開始前と開始後のコメントも含むデータが取れたことが分かる。

    ではさっき作った57分のコメント取得URLを最初の①のURLの1分間のコメント取得URLに上書きしてやって(①のURLの&from~&to~のとこだけ書き換えてやる)

    実際にコメント情報が取得出来ているのかクロームでURLを展開し覗いてみる。


    こんな感じで改行したとすると500行ぐらかな。(500コメントぐらい)
    たまにuser_keyに実名みたいなのが混じってたので伏字にした。漏れてたらごめんなさい。

    これを最後までスクロールして最終コメント時刻を確認する。

    7時13分なのでおそらくこれが最終コメントだと思う。
    ということなので全コメントの取得に成功しました。お疲れ様でした。

    ちなみに、今回のコメント取得動画はわざわざ説明を簡単にする為に総コメント数1000以下の動画を選んだわけであるが
    コメント総数が1000以上の場合は少し工夫が必要になる。

    1000件以上の動画のコメントを取得する方法

    オープンレック側の仕様で時間範囲を指定してのコメント取得数の最大値は1000件であり
    これ以上のコメントを取得したい場合は以下のやり方を試すべし

    例)もし今回の動画が1000コメント以上だった場合、最終行を確認すると07:13:13となっていたので
    この時刻をURLエンコードに通す。


    このエンコード後の数値を現在見ているコメントリストのURLのfrom部分と書き換えてやる

    &from_dt=2016-08-22+ここに入れてやる&to_dt=2016-08-22+07%3A14%3A10




    &from_dt=2016-08-22+07%3A13%3A13&to_dt=2016-08-22+07%3A14%3A10



    こうすることで今度は
    7時13分13秒から動画の最終時間までのコメントを新たに1000件抽出出来るURLとなる。

    もちろん今回は1000件以内なので書き換える作業も必要無いけど
    人気の配信者の場合1000コメント以上は当たり前なので1000コメント以上の取得方法を覚えて損は無い。
    あと、ここはどうにかして自動化した方が楽です。


    ここまで理解出来たら後は簡単。
    txtフォルダという書庫を作ってやり、1ファイルごと(1000件ごと)このようにソースをまるごと保管する。
    今回は1000コメント以下の動画なので1ファイルのみでOK



    コメントリストの中身を見た感じだと、改行が存在しないようなので
    これだとxmlに変換しづらい。
    なので1コメントづつ改行を入れてやらなければならないので今の内に改行位置を決めてやる。
    見た感じuser_idで区切るとエリア分けしやすい気がする。

    改行に使用するソフトは腐るほどあるけどなるべく一括がいいのでこれを使う。

    MultiRep


    MultiRepを起動し、保管に使った書庫のtxtフォルダを指定してやり
    検索にuser_id
    置換に<br>
    と入力



    実行を押すと書庫にある全txtフォルダに改行が入るよ。





    そして書庫に戻りtxtの拡張子を.htmlにリネーム


    html化したファイルをブラウザで開き[ctrl a] → [ctrl c]




    エクセルを起動しA1辺りに貼り付ける

    無事1コメントずつ改行されたことが分かる。


    次にエクセル上で[ctrl h]で置換窓を開く

    検索する文字列に

    ":"*message":"
    を入力後、すべて置換



    次に上に同じく検索する文字列に
    ","stamp*2016-08-22
    ↑ここの年月日は動画によって変わる&最後に半角スペースを入れること

    置換後の文字列に
    ,(カンマ)
    を入力後、すべて置換


    次に上に同じく検索する文字列に
    ","is_fresh*user_color

    置換後の文字列に
    ,(カンマ)
    を入力後、すべて置換



    区切り位置を呼び出す。


    カンマを区切り位置に指定して区切る


    なお、この操作 オープンレック側は仕様変えたら出来なくなるんで
    自分で考えて置換した方がよろしい。

    とりあえずこれでだいぶスッキリしたんじゃないかな。


    一応不要データをC列に固めたが
    おそらく,(カンマ)で区切ったせいで先生の顔が割れてるはず

    (⌒|_ゝ⌒) ←暗号化してるけど多分こんな感じに

    時間だけでも修正してあげよう。
    修正したらC列以降は全削除して構いません。


    次に見ての通りコメントが変なことになってるんで変換してやる。
    A列ごとコピー



    Unicodeエスケープシーケンス


    コピーしたら上記ページに飛びエスケープ欄にA列のコードを全て貼りつけて解除を押すと見覚えのある言語になる。



    解除後のコメントを全コピーしたら
    sheet2のE1にクリップペースト

    sheet1の時間を
    sheet2のA1にクリップペーストする。


    (sheet1はバックアップに使う)


    これより下は自宅で書いたのでエクセルのバージョンが違いますがご了承下さい。。。

    B1に
    <chat vpos="



    C1にX秒*100の計算式を入れる
    参考にした記事だと86400乗算だけだとエクセル特有の小数点が残るので
    四捨五入の条件も入れてこんな感じにすれば小数点は消えるんじゃないかな。
    =(ROUND((
    A1-"0:00:00")*86400, 0))*100

    この関数の使い方は簡単に説明すると今回の動画の場合だと
    開始時間であるA1は06:17:01なのだから
    vposを100(1sec)にしたいのであれば0:00:0006:17:00に書き換えてやると
    06:17:01 - 06:17:00 = 1秒(100)となる。

    よーするに
    C1に
    =(ROUND((A1-"06:17:00")*86400, 0))*100
    を突っ込んでやれば1コメント目の開始位置を1秒に指定することが出来る。



    D1に
    ">


    F1に
    </chat>


    G1に
    =CONCATENATE(B1,C1,D1,E1,F1)


    後はB1~G1のセルの角っちょをダブルクリックしてオートフィル処理してやれば完成




    と思ったけど変な顔文字にオートフィルを邪魔される。。。



    というわけで後は完成したG列をxmlのテンプレートとかに投げ込んでxml化し


    最後に、こめたんとかでffmpegでエンコードした動画ファイルと一緒に開いてコメントと動画のタイミングが合ってるかを確認すること
    (動画化方法が分からない人は第一回の記事を見てね)

    時間が合ってればそのままさきゅばすで結合して動画化で終わり
    ズレてたら再びエクセルに戻ってC1の計算式に加算・減算を追加してやって調節しxmlを上書きすればOK



    とりあえずオプの仕組みとかはほぼ解説せず
    誰でも出来るような全手動のやり方で書いてみましたが。
    やはりどこかしら自動化しないとツイキャスのxml化よりも面倒くせえなと思いました。
    そして手動でももっと簡略化出来るはず。

    現状はこんな感じで参考になる程度で見てもらえばなと思います。

    質問あればツイッターに投げて下さい。
    広告
    コメントを書く
    コメントをするには、
    ログインして下さい。