# JSON入力コメント投下ブックマークレット

ニコニコ動画の投稿者コメントエディタ形式のJSONを入力して、コメントを投下するブックマークレットです。

# バージョン情報

v1.0 190727

# 使用方法

以下のリンクをブックマークして、ニコニコ動画の動画再生画面でブックマークを開く。
JSON入力コメント投下 v1.0

# 実行環境

制作環境

動作確認ブラウザ

基本的にPC版のニコニコ動画のみで動作します。

# 注意事項

このブックマークレットの動作が完璧かは保証できません。
また、ニコニコ動画の仕様が変更されると問題が出ることがあります。
なるべくコメントアートを本番投下する直前にテスト動画等で動作チェックしてください。

# オプション項目

## **_seek

### abs_seek

予め動画に合わせて調整済みのJSON情報を投下するための機能です。
JSON入力のtime情報のそのままの位置へコメントを投下します。

### diff_seek

起点となる地点は自分で指定しつつ、時間差で投稿するための機能です。
一番最初のコメントがloadボタンを押した時と等しくなるような位置へコメントを投下します。

    [
        {"time": "00:10.00","command": "","comment": "1"},
        {"time": "00:11.00","command": "","comment": "2"},
        {"time": "00:12.00","command": "","comment": "3"}
    ]

このような入力で、16秒の時点でloadボタンを押した場合、

    [
        {"time": "00:16.00","command": "","comment": "1"},
        {"time": "00:17.00","command": "","comment": "2"},
        {"time": "00:18.00","command": "","comment": "3"}
    ]

のような入力とみなします。

### no_seek

自分で時間を合わせて投下するための機能です。
JSON入力のtime情報を無視してloadボタンを押した時の位置へコメントを投下します。

## manual/auto-post

手動投稿か自動投稿かを選択します。

手動投稿の場合、入力データが自動でプレイヤーの入力欄にセットされるので、
プレイヤーのコメントするボタンを手動で押して投稿します。

自動投稿の場合、最初の1コメント目だけ手動でボタンを押して投稿し、その後は送信可能になり次第自動で投稿されます。

## length_xx

コメントの長さチェックを選べます。

視聴者コメントの場合通常は75文字、
投稿者コメントの場合1024文字が制限なので、それがデフォルトになっています。

no_checkの場合長さチェックをしません。実験用途向けです。

## text_safe/unsafe

コメント内容が視聴者コメントで安全かどうかをチェックします。

チェック内容は以下です

通常、該当する内容を含むコメントは、その部分が削除されて反映されます。
なお投稿者コメントの場合は関係ないのでunsafeがデフォルトです。

## command_safe/unsafe

コマンド内容が視聴者コメントで安全かどうかをチェックします。

チェック内容は以下です。

なお投稿者コメントの場合は関係ないのでunsafeがデフォルトです。

## patissier

patissierコマンドの付与・削除などを指定できます。

patissierコマンドはコメントの残り方をコントロールするコマンドです。
詳しくは https://www37.atwiki.jp/commentart/pages/16.html 等を参照してください

## 184

184コマンドを自動付与するか削除するか指定します。
184コマンドは通常、送信時に動画プレイヤーによって自動的に付与されます。

184コマンドがある場合、コメント情報のコメントをした人を表すIDは匿名(何日かで変わる英数字の列)になります。
184コマンドがない場合、コメント情報のコメントをした人を表すIDはID番号(アカウントに割り当てられた固定番号)になります。

184_autoの場合特に何もしないので、大抵の場合匿名IDによるコメントになります。
184_removeの場合184が付与されないように邪魔するので、非匿名IDによるコメントになります。
(U+3000の特殊挙動やコマンドの最大長128文字を使い切ることで邪魔します。)

# その他の事項

## ファイルドロップ読み込み

入力欄付近にファイルドロップでファイル内容を文字コードUTF-8のテキストとして読み込みます。

入力欄の外にドロップしてしまうとブラウザがファイルを開く(ページ遷移する)ので注意してください。
メッセージ欄に"drop file to read"と表示されて入力欄がグレーアウトしてる間は読み込み可能です。

## 投稿動作中のエラー検知

以下のような場合にエラーが出て投稿動作が中断されます。

time_changedとvideo_not_pausedについては、
manual_postかつno_seekの場合はエラーは出ないので、
手動でそれぞれのコメントを投下したい位置に移動して投稿できます。

## diff_seek中断からの再開方法

エラーなどでdiff_seek動作がキャンセルされた場合、
「直前に成功したコメントの時間情報」付きのデータを入力欄に残します。

    [
        {"time": "00:11.00"},
        {"time": "00:12.00","command": "","comment": "3"}
    ]

この状態で、直前に成功したコメントをダブルクリックしてその時間に移動してから、もう一度diff_seekで起動すると、
中断しなかった場合と同様にコメントすることができます。(誤差等はあります。)

## 投稿間隔について

視聴者コメントには連投規制(21秒以内に5コメント?)があるため、規制されないよう5.5秒程度の間隔が空くように設定されています。
このブックマークレットを通さずに投稿した分や最後の1コメントをした後等はカウントしていないので、注意してください。

投稿者コメントには特に規制がないので、動作上必要な間隔のみ空けて投稿できます。

## オプションをjsonデータに埋め込む

jsonデータのコメントのどれかに以下のようなpost_tool_option属性をつけることで、
データを入力した時点でその属性で指定したオプションを選択済み状態にします。

    {
        "time": "00:00.00",
        "command": "red big",
        "comment": "test",
        "post_tool_option":{
            "seek": "abs"
        }
    },

指定可能なオプションは以下のようになっています。

    {
        "seek": "abs" | "diff"| "no",
        "post": "manual" |"auto",
        "textLength": "75" | "1024" | "no",
        "textSafe": "safe" | "unsafe",
        "commandSafe": "safe" | "unsafe",
        "patissier": "no_change" | "add" | "remove",
        "184": "auto" | "remove",
    }