AbemaTVのコメントの共有NG(非公式)


現在実験中

実験的にNGワード/ユーザーの共有をしています。
現在はAbemaTV Chrome拡張(_bem_tv ext)で実験的に試しているところです。動作が安定してきたら他のAbemaTV関連ツールでも使ってもらえるように公開します。
直前3時間台分と現時間台を集計しています。(例えば21:35に共有されいるNGワードは18:00〜21:35の間、つまり18時,19時,20時の直前3時間台と現時間台の21:00〜21:35の間に集計されたものです。5分毎に更新されています。)
同一IPアドレス(v6の場合は上位64ビットのみで比較)からの同じNGワードの複数送信は1カウントとして集計され、上記の時間内に一定数以上送信されたワードが共有されます。また、送信数が特に多くNGワードにすべきと思われるワードは時々手動追加され、全チャンネルに常に共有されます。
(一般的すぎるワードなど関係ないコメントにも該当しそうなワードは適宜正規表現を自動的に加えています。)
簡易集計

共有NGワードの送受信方法(開発者向け)

最初にクライアント名を決めてください。クライアント名は半角英数字でこの共有NGワードにアクセスする拡張機能/スクリプト/アプリケーションなどのバージョンを含まない名称で、自由に設定できます。
パラメータに設定するチャンネルは対象となるチャンネルのabema-newsやanime24といったAbemaTVのURLに含まれる半角英数字のものを指定してください。
ヘッダに"Access-Control-Allow-Origin: *"が付与されているのでどこのオリジン/ドメインからでもJSからそのままリクエストできます。

共有されたNGワード/ユーザーIDを取得する場合

共有されたNGワードやユーザーIDは https://abema.nakayuki.net/ngshare/v1/sharedng/<チャンネル>.json?client=<クライアント名> をGETしてください。
JSONが帰ってきます。NGワードは"ngword"キーに配列が入っており、配列の各要素は{type: タイプ, word: 共有されたNGワード}というオブジェクトです。 NGユーザーIDは"nguser"キーに配列が入っており、配列の各要素は{type: タイプ, userid: 共有されたNGユーザーID}というオブジェクトです。
5分毎に更新されていますので、最初やチャンネル切り替え時に取得した後は5分毎に取得すればOKです。静的なjsonファイルをgetするだけでありclientパラメーターは必須ではありませんが一応つけてください。
タイプはtype: "shared"は集計して共有されたもので、type: "manual"は手動追加されたものです。

curlによる例(クライアント名:curlSample, チャンネル:CMチャンネル):
curl https://abema.nakayuki.net/ngshare/v1/sharedng/commercial.json?client=curlSample
jqueryによる例(クライアント名:jquerySample, チャンネル:CMチャンネル):
$.get("https://abema.nakayuki.net/ngshare/v1/sharedng/commercial.json", {client: "jquerySample"}, function (ret) {
    console.log(ret.ngword);//{type: "sharedまたはmanual", word: "/NGワードでーす/"}の配列
    console.log(ret.nguser);//{type: "sharedまたはmanual", userid: "NGUserID"}の配列
});
        

NGワード/ユーザーを送信する場合

NGワード/ユーザーがユーザーにより追加された場合など、ワードを送信する場合は https://abema.nakayuki.net/ngshare/v1/add_json.php にJSONをPOSTしてください。
POSTする内容はJSONで{"client": クライアント名, "channel": チャンネル, "words": ["NGワードその1", "/^NGワードその2$/", ...], "users": ["NGUserID1", "NGUserID2"]}といった感じのものです。words、usersキーはどちらか片方だけでもいいです。
各NGワードは//で囲むと正規表現として扱われ、囲まないとただの文字列としてこちら側で正規表現に変換されます。
{"status":"success"} というJSONが帰ってくればOKです。POSTする項目に不備があると"status": "error"となります。
放送画面を開いたとき(毎回)に予めユーザーが登録していたNGワード/NGユーザーIDを送信し、ユーザー側でNGを追加したときにはそれを送信してください。こちらから共有されて新たに追加されたワード/ユーザーIDは予めユーザー側で登録してあった場合を除き送信しないでください。

curlによる例(クライアント名:curlSample, チャンネル:CMチャンネル):
curl -v -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"client": "curlSample", "channel": "commercial", "words": ["NGワードその1", "/^NGワードその2$/", "NGワードその3"], "users": ["NGUserID1", "NGUserID2", "NGUserID3"]}' https://abema.nakayuki.net/ngshare/v1/add_json.php
jqueryによる例(クライアント名:jquerySample, チャンネル:CMチャンネル):
var data = {"client": "jquerySample",
    "channel": "commercial",
    "words": ["NGワードその1", "/^NGワードその2$/", "NGワードその3"],
    "users": ["NGUserID1", "NGuserID2", "NGUserID3"]
};
 $.ajax({url: 'https://abema.nakayuki.net/ngshare/v1/add_json.php', type: 'POST', data: JSON.stringify(data), contentType: 'application/json', dataType: 'json', success: function(result) {
    if (result.status == "success") { console.log("送信完了"); } else {console.log("エラー");}
}, error: function() {console.log("通信エラー")}});
        

古い方法(add.phpにPOST)はユーザーNGに対応していないので非推奨です。
mail: yuki(a)nakayuki.net