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

プンレクからコメントを取得してxmlファイルを作成する
閉じる
閉じる

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

×

プンレクからコメントを取得してxmlファイルを作成する

2019-01-14 20:08
  • 1
プンレクからコメントを取得する必要があったので、API使って取得してみました。
取得したコメントはxml形式じゃなかったので変換するとこまで、備忘録も兼ねて。


こちらを参考にさせていただきました。
https://ch.nicovideo.jp/takeshinge/blomaga/ar1198271


まず、F12押して開発者ツールを開き、ネットワークタブを選択します。
次に、放送ページを開くと、赤枠で囲ったように「chats?from_created=...」ってのが出てくるのでクリックすると右側に詳細が表示されます。
to_createdは使いません。from_createdです。


詳細の一番上に「Request URL」って項目があります。これがこの枠のコメントを取得できるURLです。
https://public.openrec.tv/external/api/v5/movies/枠のID/chats?from_created_at=2019-01-13T12:54:36.000Z
from_created_atの日時以降のコメントを一定数取得します。
今取得したURLは放送開始時の日時が指定されているのでアクセスすると放送開始時からのコメントを取得できます。
(APIから取得する際は、F5長押しなどで短時間での大量アクセス(1秒間に数百回とか)をしないようにご注意ください。
鯖落ちの原因になり、法律で罰せられる可能性があります。)


放送開始時の時間は後々vposに変える時に必要になるのでメモしておきましょう。

コメントが取得できたら全部コピーしてエディタなどに貼り付けます。


----------
※一回で全取得できなかった場合
取得した最後のコメントの「posted_at」の時刻を確認します。
"posted_at":"2019-01-13T22:20:06+09:00"
最後のコメント時刻の1秒後をfrom_created_atで指定すれば次のコメントを取得できるわけです。
ちょっとめんどくさいことに、posted_atはJST、from_created_atはUTCになってるので、最後のコメント時刻の9時間前の1秒後を指定してください。

取得したら一番外側の大かっこ[]がいらなので、それを除いた中身をコピーして、先ほど貼り付けたコメントの一番最後の中かっこ閉じの手前にカンマを入れてから貼り付けます。

これを繰り返せば全コメント取得できます。
----------


次に取得したコメントをxml形式に直していきます。
まずコメントごとに改行します。

置換可能なエディタで先ほど保存したtxtファイルを開きます。
正規表現を使えるようにして、検索欄に「"capture":null\},」、置換欄に「"capture":null\},\n」と入力して全置換します。(コメントが多いと処理に時間かかります)

置換出来たら全部コピーしてエクセルに貼り付けます。
ここからいらないデータを削ぎ落します。

ちなみにこの時点で絵文字は□□と表示されます。(どうせこの後さきゅばす変換で同じことになるので今回は無視)

まずはデータごとに列ごとに区切ります。
データタブの区切り位置からウィザードを開いてダブルクォーテーションで区切るようにします。


コメントと時刻以外は削除してください。

次に時刻をvposに変えます。
コメント時刻 - 放送開始時刻 × 100 でvposに変換できます。
このままだとエクセルが計算できないので形式を変えます。

まず1行目に放送開始時刻を挿入しておきます。
続いて隣の列に数式を入力します。
「=DATEVALUE(MIDB(B1,1,10))+TIMEVALUE(MIDB(B1,12,8))」
次にセルの書式設定からユーザー定義を選択して「yyyy/m/d h:mm:ss」と入力すれば完了です。あとはセルの右下にカーソルをやってカーソルが+になったら下までドラッグしてオートフィル処理します。


うまく変換できたらこうなるはずです。

では、vposに変換します。

D2に数式「=(C2-$C$1)*100」と入力します$C$1は絶対参照です。オートフィル処理したときもC1を参照し続けるようにします。(セル選択した後F4で絶対参照になります)

セルの書式設定はユーザー定義で「[s]」にします。大かっこで囲むことで60秒超えても繰り上がらなくなります。


上手くいったらまた下までオートフィル処理します。


このまま余計なB、C列消すとD列もエラーになるのでE列に値だけコピーします。
D列をコピーしたらE列を右クリして形式を選択して貼り付けを選択、値を選びます。
そのあと書式設定でユーザー定義を「[s]」にします。

B~D列消したらひとまず完了です。

後はxml形式に成形するだけです。
<chat vpos="
" no="
"></chat>


こんな感じで作ります。
noがないとコメントファイルとして認識できないので、忘れずに入れます。

最後に先頭行に

<?xml version="1.0" encoding="UTF-8"?>
<packet>

を追加して、最終行に
</packet>
を追加して、全てコピーしてエディタに貼り付けます。

すると、セルとの区切りで空白が挿入されてるので置換でどうにか取り除いて、xml形式で保存すれば完成です!


お疲れさまでした
広告
×
1分ごとの範囲でしかコメントを取得できないのですが、全範囲を一気に取得するのは可能ですか?
12ヶ月前
コメントを書く
コメントをするには、
ログインして下さい。