• ニコ生新配信APIの実装 (C#)

    2017-11-25 03:00

    共通の事項

    ライブラリを追加

     Web APIのクライアントに必要なライブラリは基本的にASP.NET MVC 4に含まれていますが、依存関係もそれなりにあるので、NuGetを使用した方が楽です。
     GUIを使用する場合には下図のように”Microsoft ASP.NET Web API Client Libraries”を選択し、インストールします。

    ※.Net Framework 4.5以上必須




    usingの追加

    using System.Net.Http;
    using System.Net.Http.Formatting;
    using System.Runtime.Serialization;


    ※以降は全て非同期(asyncが必要)で処理です。
    User-Agentはアプリ名とバージョンを記載すること。
    データの送受信は全てjson形式。
    仕様変更される場合があります。

    例外処理などは省略してあります。

    運営コメント

    データクラスの追加

    [DataContract]
    public class PostComment
    {
    [DataMember(Name = "text")]
    public string text { get; set; }
    [DataMember(Name = "isPermanent")]
    public bool isPermanent { get; set; }
    [DataMember(Name = "color")]
    public string color { get; set; }
    [DataMember(Name = "userName")]
    public string userName { get; set; }
    }

    HTTP リクエスト (PutAsJsonAsync)

    using (HttpClientHandler handler = new HttpClientHandler())
    using (HttpClient client = new HttpClient(handler) { Timeout = TimeSpan.FromSeconds(10) })
    {
    client.DefaultRequestHeaders.Add("User-Agent", "クライアント名");
    handler.CookieContainer = container;

    PostComment _PostComment = new PostComment
    {
    text = "コメント",
    isPermanent = false,
    color = "",
    userName = ""
    };

    var response = await client.PutAsJsonAsync<PostComment>("http://live2.nicovideo.jp/watch/" + LiveID + "/operator_comment", _PostComment).ConfigureAwait(false);

    // 200 OKの場合は正常に送信など後はお好きなように。
    if (response.StatusCode == HttpStatusCode.OK)
    return true;
    }

    User-Agent : クライアントを判別できるものを付けてください。
    container
    : CookieContainer
    LiveID : lvを含む放送番号

    text : コメントテキスト
    isPermanent : /permでずっと表示するコメにするかどうか(true/false)
    color : コメントの色。red,blue,greenなど。省略可能。
    userName : コテハン。省略可能。

    基本的な情報は下記を参考。
    大百科の運コメAPI


    配信開始・停止

    データクラスの追加

    [DataContract]
    public class LiveState
    {
    [DataMember(Name = "state")]
    public string state { get; set; }
    }

    HTTP リクエスト (PutAsJsonAsync)

    using (HttpClientHandler handler = new HttpClientHandler())
    using (HttpClient client = new HttpClient(handler) { Timeout = TimeSpan.FromSeconds(10) })
    {
    client.DefaultRequestHeaders.Add("User-Agent", "クライアント名");
    handler.CookieContainer = container;

    LiveState _LiveState = new LiveState
    {
    state = "on_air"
    };

    var response = await client.PutAsJsonAsync<LiveState>("http://live2.nicovideo.jp/watch/" + LiveID + "/segment", _LiveState).ConfigureAwait(false);

    // responseにはstart_timeとend_timeが飛んで来るので後はお好きなように。
    string json = await response.Content.ReadAsStringAsync();

    // 409 Conflictの場合はすでに配信開始済み。
    if (response.StatusCode == HttpStatusCode.Conflict)
    return true;

    // 200 OKの場合は正常に開始。
    if (response.StatusCode == HttpStatusCode.OK)
    return true;

    // エラーの時は数秒待機してから再試行してください。
    return false;
    }

    配信停止はstateを変えるだけ。
    state ="end"

    延長リスト
    "http://live2.nicovideo.jp/watch/" + LiveID + "/extension";
    ここを叩くと、json形式で延長可能な一覧が取れる。

    延長

    データクラスの追加

    [DataContract]
    public class LiveExtension
    {
    [DataMember(Name = "minutes")]
    public int minutes { get; set; }
    }

    HTTP リクエスト (PostAsJsonAsync)

    using (HttpClientHandler handler = new HttpClientHandler())
    using (HttpClient client = new HttpClient(handler) { Timeout = TimeSpan.FromSeconds(10) })
    {
    client.DefaultRequestHeaders.Add("User-Agent", "クライアント名");
    handler.CookieContainer = container;

    LiveExtension _LiveExtension = new LiveExtension
    {
    minutes = 30 //延長可能な一覧から取得した時間をminutesに指定する。
    };

    var response = await client.PostAsJsonAsync<LiveExtension>("http://live2.nicovideo.jp/watch/" + LiveID + "/extension", _LiveExtension).ConfigureAwait(false);

    // responseにはstart_timeとend_timeが飛んで来るので後はお好きなように。
    string json = await response.Content.ReadAsStringAsync();
    }


    バックステージパス ※配信主でも送信可能

    データクラスの追加

    [DataContract]
    public class PostBspComment
    {
    [DataMember(Name = "text")]
    public string text { get; set; }
    [DataMember(Name = "userName")]
    public string userName { get; set; }
    [DataMember(Name = "color")]
    public string color { get; set; }
    }

    HTTP リスエスト (PostAsJsonAsync)

    using (HttpClientHandler handler = new HttpClientHandler())
    using (HttpClient client = new HttpClient(handler) { Timeout = TimeSpan.FromSeconds(10) })
    {
    client.DefaultRequestHeaders.Add("User-Agent", "クライアント名");
    handler.CookieContainer = container;

    PostBspComment _PostBspComment = new PostBspComment
    {
    text = "コメント",
    userName = "Wangdora",
    color = "red"
    };

    var response = await client.PostAsJsonAsync<PostBspComment>("http://live2.nicovideo.jp/watch/" + LiveID + "/bsp_comment", _PostBspComment).ConfigureAwait(false);

    // 200 OKの場合は正常に送信など後はお好きなように。
    if (response.StatusCode == HttpStatusCode.OK)
    return true;
    }


    アンケート

    アンケートの新APIはまだ実装されていませんが、新配信APIv1を利用するコードです。
    "http://live2.nicovideo.jp/watch/" + LiveID +"/player"
    ここからprogramIdとcsrfTokenを予め取得しておきます。

    string doc = GetNicoPage("http://live2.nicovideo.jp/watch/" + LiveID +"/player");
    string programId = Regex.Match(doc, "programId\":\"(.*?)\"").Groups[1].Value;
    string csrfToken = Regex.Match(doc, "csrfToken\":\"(.*?)\"").Groups[1].Value;

    jsonをパースしてもいいけど、ぶっこ抜くだけなので。

    アンケート開始

    using (HttpClientHandler handler = new HttpClientHandler())
    using (HttpClient client = new HttpClient(handler) { Timeout = TimeSpan.FromSeconds(10) })
    {
    client.DefaultRequestHeaders.Add("User-Agent", "クライアント名");
    handler.CookieContainer = container;

    Dictionary<string, string> data = new Dictionary<string, string>
    {
    { "programId", programId }
    };

    data.Add("question", Question);
    data.Add("items[0]", Q1);
    data.Add("items[1]", Q2);
    data.Add("items[2]", Q3);
    data.Add("items[3]", Q4);
    data.Add("items[4]", Q5);
    data.Add("items[5]", Q6);
    data.Add("items[6]", Q7);
    data.Add("items[7]", Q8);
    data.Add("items[8]", Q9);
    data.Add("csrfToken", csrfToken);

    var content = new FormUrlEncodedContent(data);
    var response = await client.PostAsync("http://live2.nicovideo.jp/unama/api/v1/programs/" + programId + "/enquete", content).ConfigureAwait(false);
    }

    Question : 質問
    Q1~Q9 : 選択肢
    QuestionとQ1は必須です。

    上記は省略してありますが、選択肢が無い場合はAddしないで下さい。↓

    if (!string.IsNullOrEmpty(Q2))
    data.Add("items[1]", Q2);


    アンケート結果表示・消去

    using (HttpClientHandler handler = new HttpClientHandler())
    using (HttpClient client = new HttpClient(handler) { Timeout = TimeSpan.FromSeconds(10) })
    {
    client.DefaultRequestHeaders.Add("User-Agent", "クライアント名");
    handler.CookieContainer = container;

    var content = new FormUrlEncodedContent(new Dictionary<string, string>
    {
    { "programId", programId },
    { "csrfToken", csrfToken }
    });

    var response = await client.PostAsync("http://live2.nicovideo.jp/unama/api/v1/programs/" + programId + "/enquete/show_result", content).ConfigureAwait(false);
    }

    結果表示を消去する場合は上記のclient.PostAsyncのurlを下記に変更して送信。
    "http://live2.nicovideo.jp/unama/api/v1/programs/" + programId + "/enquete/end"

    ※覚書なのでご自由に。APIが実装され次第追記。
  • 広告
  • OBS Studioの設定方法

    2017-10-15 05:001
    配信たん2の外部配信ツールタブで、OBS Studioを利用する場合、下記の設定が必要です。


    ニコ生プラグインを利用する場合
     OBS Studioへニコ生プラグインを追加してください。

     Ver2.2.0
     参考 ※掲示板の1203
     http://com.nicovideo.jp/community/co1048576
     少佐さんのバージョンであれば、配信開始・停止の処理で、アクティブ化、ホットキー送信が不要になります。


    配信たん2側の設定
     設定を下記のとおりにしてください。


    • OBS Studio へのパス / C:\Program Files (x86)\obs-studio\bin\64bit\obs64.exe (32bit版可)
    • プロファイルへのパス / 空欄
    • ホットキー送信 / Ver2.2.0以降は不要です。
    • アクティブ化 / ホットキーが上手く動作しない場合はチェックしてください。

    OBS側の設定 (Ver2.2.0)
     設定-配信 で配信種別をニコニコ生放送を選択し、自動で配信開始と枠移動を行う」をチェックします。
     ログインタイプはお好みでどうぞ。
     設定-詳細設定 の「自動的に再接続」「有効にする」をチェックします。

     マイクミュートを利用する場合は、OBSのホットキー設定で下記の通りに割り当ててください。
     ※ホットキー送信・アクティブ化が必要になります。


     マイクミュート → Ctrl + Shift + Alt + E

     マイクミュート解除 → Ctrl + Shift + Alt + E




     最後にOBS Sdutioを再起動してください。


    カスタムストリーミングサーバーを利用する場合

    配信たん2側の設定
     設定を下記のとおりにしてください。


    • OBS Studio へのパス / C:\Program Files (x86)\obs-studio\bin\32bit\obs32.exe (64bit版可)
    • プロファイルへのパス / C:\Users\名前\AppData\Roaming\obs-studio\basic\profiles\プロファイル名\
    • ホットキー送信 / 必ずチェックしてください。
    • アクティブ化 / ホットキーが上手く動作しない場合はチェックしてください。

    OBS側の設定
     設定-配信 で配信種別をカスタムストリーミングサーバーを選択します。
     URL、ストリームキーは空欄のままで大丈夫。
     OBSのホットキー設定で下記の通りに割り当ててください。
    

     配信開始 → Ctrl + Shift + Alt + S
     配信停止 → Ctrl + Shift + Alt + Q
     マイクミュート → Ctrl + Shift + Alt + E

     マイクミュート解除 → Ctrl + Shift + Alt + E



     最後にOBS Studioを再起動してください。


    シーンチェンジ機能を利用する場合
     配信たんとの連携は、6個まで登録できます。シーン名は分かりやすいものに変更しても大丈夫です。
     ※ホットキー送信・アクティブ化が必要になります。


     シーン1 → Ctrl + NumPad1
        ↓       ↓
     シーン6 → Ctrl + NumPad6



     設定が終わったらOBS Studioを再起動してください。

    位置を記録する場合
     配信たん2の設定で「位置を記憶する」にチェックを入れ、右側にあるボタンを押すと、現在のOBS Studioのウィンドウ位置と大きさを取得します。「一緒に起動する」チェックがある時、OBS Studioが起動直後にその位置へメインウィンドウが自動で移動するようになります。


  • Voiceroid Talk Plus Ver.8.1.0.0

    2017-10-07 06:00350111
    読みちゃんプラグイン Voiceroid Talk Plus Ver.8.1.0.0

    棒読みちゃんと連携でVOICEROIDが読み上げる!
    このプラグインは、VOICEROIDシリーズの購入が必要です。
    VOICEROID2(全話者)、VOICEROID+ EX版(全話者)、VOICEROID+(東北ずん子、結月ゆかり、民安ともえ、鷹の爪 吉田くん)、VOICEROID(月読アイ、月読ショウタ)、音街ウナTalk Ex、ギャラ子Talk、かんたん! AITalk 3、かんたん! AITalk 3 関西風にコメントを読ませます。




    インストール
    • 右上部にあるDounloadボタンより本体をダウンロードしてください。
    • VoiceroidTalkPlus.zipを解凍し、Plugin_VoiceroidTalkPlus.dllとVoiceroidTalkPlusReceiver.exeを棒読みちゃんフォルダへコピーします。
    • 棒読みちゃんのプラグイン設定でチェックを付けて有効にしてください。
    • 棒読みちゃんメイン画面の上に青いVRボタンが出ます。ボタンを押して、設定画面を開いてください。
    • 棒読みちゃんの 辞書登録-タグ-単純置換 および 正規表現 に登録されている単語(配信者機能)は、普通の棒読みちゃんが読み上げます。
    • Ver8.1.0.0より以前のバージョンをご利用中の場合は、設定が一度リセットされます。
    • VOICEROIDを管理者権限で起動している場合は、棒読みちゃんも管理者権限で起動して下さい。


    VOICEROID2は別売りです。
    Amazon VOICEROID2 琴葉 茜・葵
    [ガイドブック付き] [DL版]

    Amazon VOICEROID2 結月ゆかり [ガイドブック付き] [DL版]
    Amazon VOICEROID2 紲星あかり

    VOICEROID2


    使い方
    • プリセットを読み込むボタンを押してください。コマンドは利用したいものだけ追記してください。
    • 話者を導入した直後はVOICEROID2を一度再起動するとプリセットを読み込むようになります。
    • 常に読み上げる場合は、優先順位が最上部にある話者が読み上げます。行選択すると入れ替えできます。
    • 常に読み上げる場合でもコマンドは有効です。
    • 文章の先頭にコマンドがある場合、該当する話者が読み上げます。
    • ランダムに読み上げる場合はリスト内全てが対象です。ランダム読み上げでもコマンドは有効です。
    • ランダムの話者が2人以上ある場合に、棒読みちゃんを追加で含めることができます。(全部で3人以上)
    • ファイルパスはインストール先のフォルダにある「VoiceroidEditor.exe」を指定してください。
    • 他のVOICEROIDシリーズ、同一エンジン搭載のアプリ(かんたん!AITalk 3を除く)と併用できます。
    • みくみくまうす連携は、プリセット名に同一の名前が含まれている場合に連携できます。


    ※VOICEROID/VOICEROID+/VOICEROID+ EX シリーズは別売りです。
    Amazon VOICEROID+ 東北きりたん EX [DL版]
    Amazon VOICEROID+ 京町セイカ EX
    [DL版]
    Amazon VOICEROID+ 水奈瀬コウ EX
    [DL版]
    Amazon VOICEROID+ 琴葉 茜・葵 [DL版]
    Amazon VOICEROID+ 東北ずん子 EX
    [DL版][UP版]
    Amazon VOICEROID+ 結月ゆかり EX [DL版][UP版]
    Amazon VOICEROID+ 民安ともえ EX [DL版][UP版]
    Amazon VOICEROID+ 鷹の爪 吉田くん EX [DL版][UP版]
    Amazon VOICEROID+ 月読アイ EX [DL版][UP版]
    Amazon VOICEROID+ 月読ショウタ EX [DL版][UP版]



    VOICEROID / VOICEROID+ / VOICEROID EX


    使い方
    • 常に読み上げにチェックを入れるとラジオボタンでVOICEROIDを選択出来るようになります。
    • EXシリーズを利用の場合は該当の項目にチェックを入れて下さい。
    • 文章の先頭にコマンドがある場合、該当する話者が読み上げます。
    • ランダムに読み上げる場合は、起動しているVOICEROIDのチェックを2つ以上入れて下さい。
    • Intervalの値をVOICEROID/VOICEROID+の種類によって変更して下さい。※1
    • ファイルパス指定で棒読みちゃん起動時に一緒に起動させることが出来ます。
    • 月読アイとショウタは、多重起動することで同時に利用出来ます。
    ※1 Interval値について。(EX版は設定無し)
     この値を大きくすると、次の行を読みあげるまでの時間を調整出来ます。
     読み上げが尻切れになる場合は大きくしてみてください。
     おおよその値は結月ゆかり:280、民安ともえ:280、吉田くん:280、月読アイ:320、月読ショウタ:320
     アイとショウタは読み上げスピードが遅いので、320あたりで微調整して下さい。

    導入方法の動画 プラグイン導入の流れを動画にしました。





    同一エンジン搭載のアプリ

    • かんたん! AITalk 3のコマンドは 話者名) です。あんず) かほ) ななこ) のぞみ) せいじ) みやび) やまと)
    • かんたん!AITalk 3のランダム機能はVOICEROIDと併用出来ません。

    ■音街ウナTalk Ex
     音街ウナTalk Exは、声優「田中あいみ」の声をベースに株式会社インターネットが制作した文章読み上げソフトウェア。音声の合成エンジンには、株式会社エーアイが開発した音声合成エンジンAITalkを使用。(VOICEROIDと同じエンジン) ※動作確認済み

    音街ウナTalk Ex [DL版]


    ■ YAMAHA ヤマハ ボーカロイド VOCALOID3 Library ギャラ子 NEO 特典 ギャラ子Talk
     ギャラ子Talkとは、柴咲コウさんの声をもとに開発した「VOCALOID3」対応の女性歌声ライブラリ『VOCALOID3 Library ギャラ子 NEO』に、株式会社エーアイの音声合成エンジンAITalkRが採用されたナレーション作成ソフト「ギャラ子Talk」が特典として収録されています。 
    動作確認済み

    YAMAHA ヤマハ ボーカロイド VOCALOID3 Library ギャラ子 NEO


    ■ かんたん! AITalk 3、かんたん! AITalk 3 関西風
     かんたん! AITalk 3とは、株式会社エーアイが発売している音声読み上げソフトです。
    バラエティー豊かな話者から好きな話者を選ぶことができるパッケージです。 ※動作確認済み

    かんたん! AITalk 3 -5話者パック- [DL版]、関西風 2話者パック [DL版]


    みくみくまうす連携


     VOICEROIDのMMDモデルを表示し、外部配信ツールやデスクトップ上へ画面合成が可能で、コメントによる仕草や口パクしちゃう無料のアプリ。みくみくまうす Ver2.1.0 に対応しました。




    更新情報
     2017/06/29 (8.1.0.0)
      引き継げない設定がある為、すべての設定が初期化されます。
     
    2017/06/27 (8.0.2.1)
      VOICEROID2側の読み上げ中に停止してしまう対策をしました。
      棒読みちゃんをランダムに含める機能を追加しました。
      文字コードの変換処理を追加しました。
      読み上げ途中にVOICEROID2を終了させても固まらなくしました。
      みくみくまうす連携に関する問題を修正しました。
      全てのVOICEROIDと併用できるようにしました。(かんたん!AITalk 3を除く)
      プリセットを読み込むボタンを追加しました。
      コマンドを入力しなくても動作するようにしました。
      バックグラウンドで動作するようにしました。
      クリップボードを利用しない対策、尻切れ対策など修正しました。
      起動直後にウィンドウフォーカスがとれない不具合を修正しました。
     2017/06/12 (8.0.0.0)
      VOICEROID2に暫定対応しました。

     ※以降はダウンロードした圧縮ファイル内の Readme.txt を参照してください。


    動作環境
     Windows 7 / 8.1 / 10
     .Net Framework4.5.2以上
     棒読みちゃん
     VOICEROIDシリーズなどのいずれかをインストール済み


    ※無料で違う音声合成をお探しなら、Voicetext Talk をお試し下さい。
    ◇ 免責 ◇
     本ソフトウェアによって不測の不利益を被った場合でも一切の責任を負いかねますので予めご了承ください。
    ◇ 著作権・再頒布など ◇ 本ソフトウェアの著作権は、Wangdora が所有します。ソフトウェアの再配布を禁止します。
    ◇ お世話になった方々 ◇ 棒読みちゃん製作者 みちあき様
    ◇ 連絡先 ◇ Twitter : http://twitter.com/Wangdora ご利用の際には一報頂けると幸いです。



    カンパのお願い
     Amazonでのお買い物の際は、下記リンクをご利用して頂くと、アソシエイトプログラムによりお買い上げ金額の数%(商品により変動)が私に届きます。Amazonアソシエイトプログラム

     時々「お金を取ればいいのに」とのご意見を頂きます。基本的には無料でご利用頂けますが、気に入ってくださった方は、ご支援いただければ幸いです。アマゾンギフト券を wangdora@outlook.jp 宛にお送り下さい。Amazonギフト券- Eメールタイプ - Amazonボックス