JSONWebSocket仕様の新ニコ実況に対応#9
Conversation
There was a problem hiding this comment.
気になる点としては、60秒ごとに空リクエストを送っていないこととvposに関することです。
あと、ニコニコ的にはUAで利用状況を把握しているみたいなのでUAは付けた用がよさそうなのと、コメントセッションでは必要じゃないぽいけど、視聴セッションではWebSocketで通信する際に一応サブタイトルを指定するようになっているのでそちらも付けた方が良さそうです。
あとfor (int disconnectedCount = 0; disconnectedCount < 5; ++disconnectedCount)直下に
var random = new Random();
await Task.Delay((disconnectedCount * 5000) + random.Next(0, 101));見たいな具合に連続した再接続にならないようにした方が良さそうです。
| private static ChatNiconicoCommentXmlTag getChatJSONTag(string str) { | ||
| JObject jsonObj = JObject.Parse(str); | ||
| // {"chat":{"thread":"M.kk-tzPBrneGMsNfDNO1skg","no":45929,"vpos":6496293,"date":1616936565,"date_usec":664450,"mail":"184","user_id":"EvrCRqk2e04B-pYS7q44kVU5HR4","anonymity":1,"content":"結局SBの勝ちかいw"}} | ||
| int vpos = int.Parse(jsonObj["chat"]["vpos"].ToString()); |
There was a problem hiding this comment.
極々まれにニコ生のAPI側の不具合なのか必須項目のvposが抜けてるデータが流れてくるので注意が必要かもしれません。
| using var tcpClinet = new TcpClient(msUri.Host, msUri.Port); | ||
| var socketStream = tcpClinet.GetStream(); | ||
| using var socketReader = new StreamReader(socketStream, Encoding.UTF8); | ||
| ClientWebSocket ws = new ClientWebSocket(); |
There was a problem hiding this comment.
RequestHeaderにUAを付けるのと、サブプロトコルに「msg.nicovideo.jp#json」を指定した方が良さそうです。
|
KeepAliveコマンド送信部分を実装しました。 |
noriokun4649
left a comment
There was a problem hiding this comment.
早速の対応ありがとうございます!
UAは利用者の把握をするのが目的なので、なおした方が良さそうです。
|
|
||
| private readonly HttpClient httpClient; | ||
| private readonly NiconicoCommentJsonParser parser = new NiconicoCommentJsonParser(true); | ||
| private readonly string WEBSOCKET_CLIENT_UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36"; |
There was a problem hiding this comment.
UAは
TVTComment/Model/ChatCollectService/TsukumijimaJikkyoApiChatCollectService.cs
の最後あたりにあるようなUAにした方がよいです。
There was a problem hiding this comment.
@noriokun4649 ニコニコ側が今後、UAでTVTCommentからの通信をブロックするのではないかと少々心配ではありますが、まあ本家のnicojk等はもう長年やっていましたので、おそらく問題ないでしょう。
There was a problem hiding this comment.
むしろUAが付加されてないリクエストやMozilla系のUAわブロックするような変更も過去にあったため、ルールを守った利用方法であれば問題ないと考えています。
何かしら問題があった場合でもニコニコ側からのコンタクトもしやすいですしね。(これが主な目的のようです

Newtonsoft.Jsonを導入し、ニコ実況のJSONWebSocketAPIに接続してコメントデータを取得するように改造しました。
※もともとのXMLベースのWebsocketAPIは死んだっぽくってTVTCommentが落ちまくりです。
C#のソースをいじるのは実は1億年ぶりです。実装は凄く雑かもしれないが一応当方の環境では問題なさそうです。
変なところもしあれば勝手に修正してくださいm