UnityNicoliveClientはニコニコ生放送の新配信番組をUnityから操作するクライアントです。
新配信のユーザ生放送にのみ対応しています。
UniRxの使用を前提にしています。
- ログインしてユーザセッション取得
- 番組開始/終了
- 番組延長手段取得
- 番組延長
- 運営コメント投稿/削除
- BSPコメント投稿
- 番組情報取得
- 番組統計情報取得(来場者数、コメント数)
- コメント取得
- アンケートの実行
NiconicoUserClient.LoginAsyncを実行してNiconicoUserを取得NiconicoUserをNicoliveApiClientに渡してクライアント作成SetNicoliveProgramIdに番組IDを渡して操作対象番組を登録- 各種メソッドを実行
IEnumerator LoginCoroutine()
{
var mail = "ニコニコのメールアドレス";
var pass = "ニコニコのパスワード";
//ログイン実行
var u = NiconicoUserClient.LoginAsync(mail, pass).ToYieldInstruction();
yield return u; //ログイン処理を待機
//ログインに成功するとユーザ情報が返ってくる
NiconicoUser user = u.Result;
//クライアントにユーザ情報を渡して初期化
var client = new NicoliveApiClient(user);
//操作したい番組ID登録
client.SetNicoliveProgramId("lv123456");
//運営コメントを非同期で投稿
client.SendOperatorCommentAsync("テスト投稿");
//投稿が終わるのを同期的に待つ場合はToYieldInstruction()
yield return client.SendOperatorCommentAsync("テスト投稿").ToYieldInstruction();
}SetNicoliveProgramId()を実行する。これを実行しないとApiClientは動作しない。
client.SetNicoliveProgramId("lv123456");デフォルトではUnityNicoliveClientがUAに設定されています。
変更したい場合はSetCustomUserAgentから設定可能(できるだけ自身のアプリ名を設定してください)
client.SetCustomUserAgent("YourApplicationNameHere");GetCurrentCommunityProgramIdAsync() で取得可能。取得できない場合はOnError()が返る。
※番組作成後にAPIで取得できるようになるまで1分程度かかる点に注意。
//現在放送中の番組ID取得
client.GetCurrentCommunityProgramIdAsync()
.Subscribe(lv => Debug.Log(lv));チャンネル番組を含めて放送中IDが欲しい場合は、 GetScheduledProgramListAsync() 使う必要がある。
GetScheduledProgramListAsync()を利用すると、ユーザに紐付いた放送予定・放送中のコミュニティ・チャンネル番組を一覧で取得できる。
その中から該当のチャンネルIDの番組IDを検索する必要がある。
※番組作成後にAPIで取得できるようになるまで1分程度かかる点に注意。
var targetChannelId = "ch123456789";
client.GetScheduledProgramListAsync()
.Subscribe(programs =>
{
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 で取得可能
var programInfo = default(ProgramInfo);
client.GetProgramInfoAsync().Subscribe(x => programInfo = x);GetProgramInfoAsyncで番組情報(ProgramInfo)を取得するProgramInfoの中のRoomを使ってNicoliveCommentClientを初期化するNicoliveCommentClient.OnMessageAsObservable()を購読してコメントを受け取るNicoliveCommentClient.Connect()でコメントサーバに接続NicoliveCommentClient.Disconnect()で一時切断NicoliveCommentClient.Dispose()で破棄
使い終わったら必ずDispose()を実行すること!
IEnumerator CommentCoroutine(NiconicoUser user, NicoliveApiClient apiClient)
{
//番組情報取得
var pi = apiClient.GetProgramInfoAsync().ToYieldInstruction();
yield return pi;
// 番組の部屋一覧
// 自分が放送する番組の場合は全部屋取得できる
// 他人の放送の場合は「座席を取得済み」の場合のみ、その座席のある部屋の情報が1つ取得できる
var rooms = pi.Result.Rooms;
//先頭の部屋に接続するコメントクライアントを作成
var commentClient = new NicoliveCommentClient(rooms.First(), user.UserId);
//コメント購読設定
commentClient.OnMessageAsObservable.Subscribe(x => Debug.Log(x.Content));
//クライアント接続
commentClient.Connect(resFrom: 0);
yield return new WaitForSeconds(10);
//おかたづけ
commentClient.Disconnect();
commentClient.Dispose();
}IEnumerator EnqueteCoroutine(NicoliveApiClient client)
{
var title = "どれが好き?";
var questions = new string[] { "き○この山", "た○のこの里", "コ○ラのマーチ" };
//アンケートの実行
client.StartEnqueteAsync(title, questions);
//回答時間
yield return new WaitForSeconds(10);
//結果表示
var ri = client.ShowResultEnqueteAsync().ToYieldInstruction();
yield return ri; //APIの結果待ち
var enqueteResult = ri.Result;
//結果表示
Debug.Log(enqueteResult.Title);
foreach (var i in enqueteResult.Items)
{
//各要素の回答率
Debug.Log(string.Format("{0}:{1}%", i.Name, i.Rate));
}
//結果表示待機
yield return new WaitForSeconds(3);
//アンケート終了
client.FinishEnqueteAsync();
}//失敗時はOnErrorが通知される
client.SendOperatorCommentAsync("テスト投稿")
.Subscribe(_ => { }, ex => Debug.LogError(ex));NicoliveApiClientが提供する各種メソッドは全てHot変換(PublishLast)済み。
そのため明示的なSubscribe()は省略可能。
client.SendOperatorCommentAsync("テスト投稿").Subscribe();
client.SendOperatorCommentAsync("テスト投稿"); //Subscribeを省略しても実行されるMITライセンス
UniRx Copyright (c) 2014 Yoshifumi Kawai https://github.com/neuecc/UniRx/blob/master/LICENSE
websocket-sharp Copyright (c) 2010-2018 sta.blockhead https://github.com/sta/websocket-sharp/blob/master/LICENSE.txt