UnityNicoliveClient
UnityNicoliveClient copied to clipboard
UnityNicoliveClient
UnityNicoliveClientはニコニコ生放送の新配信番組をUnityから操作するクライアントです。
新配信のユーザ生放送にのみ対応しています。
導入方法
R3版(v1.0.0~)
UPMから導入してください。
https://github.com/TORISOUP/UnityNicoliveClient.git?path=Assets/TORISOUP/NicoliveClient/Plugins
UniRx版
依存ライブラリ
次のライブラリを別途導入する必要があります。
- R3
- R3.Unity
- UniTask
機能一覧
- ログインしてユーザセッション取得
- 番組開始/終了
- 番組延長手段取得
- 番組延長
- 運営コメント投稿/削除
- 番組情報取得
- 番組統計情報取得(来場者数、コメント数)
- コメント取得
- アンケートの実行/終了
使い方
基本的な使い方
NiconicoUserClient.LoginAsyncを実行してNiconicoUserを取得NiconicoUserをNicoliveApiClientに渡してクライアント作成SetNicoliveProgramIdに番組IDを渡して操作対象番組を登録- 各種メソッドを実行
public async UniTask LoginAsync(string mail, string pass, CancellationToken ct)
{
//ログイン実行
NiconicoUser user = await NiconicoUserClient.LoginAsync(mail, pass, ct);
//クライアントにユーザ情報を渡して初期化
var client = new NicoliveApiClient(user);
//操作したい番組ID登録
client.SetNicoliveProgramId("lv123456");
//運営コメントを非同期で投稿
await client.SendOperatorCommentAsync("名前", "テスト投稿", "white", false, ct);
}
操作する番組の設定
SetNicoliveProgramId()を実行する。これを実行しないとApiClientは動作しない。
client.SetNicoliveProgramId("lv123456");
UserAgentを設定する(推奨)
デフォルトではUnityNicoliveClientがUAに設定されています。
変更したい場合はSetCustomUserAgentから設定可能(できるだけ自身のアプリ名を設定してください)
client.SetCustomUserAgent("YourApplicationNameHere");
自分が今放送している番組のID取得
コミュニティ番組のみでよい場合
GetCurrentCommunityProgramIdAsync() で取得可能。
※番組作成後にAPIで取得できるようになるまで1分程度かかる点に注意。
//現在放送中の番組ID取得
string[] programs = await client.GetCurrentCommunityProgramIdAsync(ct);
チャンネル番組を含む場合
チャンネル番組を含めて放送中IDが欲しい場合は、 GetScheduledProgramListAsync() 使う必要がある。
GetScheduledProgramListAsync()を利用すると、ユーザに紐付いた放送予定・放送中のコミュニティ・チャンネル番組を一覧で取得できる。
その中から該当のチャンネルIDの番組IDを検索する必要がある。
※番組作成後にAPIで取得できるようになるまで1分程度かかる点に注意。
var targetChannelId = "ch123456789";
var programs = await client.GetScheduledProgramListAsync(ct);
foreach (var programSchedule in programs)
{
if (programSchedule.SocialGroupId == targetChannelId
&& programSchedule.Status == ProgramStatus.OnAir
&& programSchedule.Status == ProgramStatus.Test //テスト放送も判定に含めるなら必要
)
{
Debug.Log(targetChannelId + "は現在、" + programSchedule.ProgramId + "で配信中です。");
return;
}
}
Debug.Log(targetChannelId + "は現在配信していません。");
番組の詳細情報取得
GetProgramInfoAsync で取得可能
ProgramInfo result = await client.GetProgramInfoAsync("lv123456", ct);
コメントを取得する
GetProgramInfoAsyncで番組情報(ProgramInfo)を取得するProgramInfoの中のRoomを使ってNicoliveCommentClientを初期化するNicoliveCommentClient.OnMessageAsObservable()を購読してコメントを受け取るNicoliveCommentClient.Connect()でコメントサーバに接続NicoliveCommentClient.Disconnect()で一時切断NicoliveCommentClient.Dispose()で破棄
使い終わったら必ずDispose()を実行すること!
//番組情報取得
var pi = await client.GetProgramInfoAsync("lv12345", ct);
// 番組の部屋一覧
// 自分が放送する番組の場合は全部屋取得できる
// 他人の放送の場合は「座席を取得済み」の場合のみ、その座席のある部屋の情報が1つ取得できる
var rooms = pi.Rooms;
//先頭の部屋に接続するコメントクライアントを作成
using var commentClient = new NicoliveCommentClient(rooms.First(), user.UserId);
//コメント購読設定
commentClient.OnMessageAsObservable.Subscribe(x => Debug.Log(x.Content));
//クライアント接続
commentClient.Connect(resFrom: 0);
await UniTask.Delay(TimeSpan.FromSeconds(10));
//おかたづけ
commentClient.Disconnect();
アンケートの実行
// アンケート開始
await client.StartEnqueteAsync(
"lv12345",
"好きな食べ物は?",
new[] { "バナナ", "りんご", "カレー" }, ct);
// 結果表示&取得
var result = await client.ShowResultEnqueteAsync("lv12345", ct);
foreach (var data in result.Items)
{
Debug.Log($"{data.Name} : {data.Rate}%");
}
// アンケート終了
await client.FinishEnqueteAsync("lv12345", ct);
配布ライセンス
MITライセンス
権利表記
UniRx Copyright (c) 2014 Yoshifumi Kawai https://github.com/neuecc/UniRx/blob/master/LICENSE
R3 Copyright (c) 2024 Cysharp, Inc. https://github.com/Cysharp/R3/blob/main/LICENSE
UniTask Copyright (c) 2019 Yoshifumi Kawai / Cysharp, Inc. https://github.com/Cysharp/UniTask/blob/master/LICENSE
websocket-sharp Copyright (c) 2010-2018 sta.blockhead https://github.com/sta/websocket-sharp/blob/master/LICENSE.txt
NugetForUnity Copyright (c) 2018 Patrick McCarthy https://github.com/GlitchEnzo/NuGetForUnity/blob/master/LICENSE