SharpHeaderCookieの使い方

新規作成

とりあえずVisualStudioを起動して新規のソリューション(プロジェクト)App1を作成します。Windowsフォームアプリケーションの.NET Framework4.5.1, 4.5.2, 4.6いずれかで作成してください。新規プロジェクトの作成

あ、説明のVisualStudioは2013 .NET Framework4.6です!それとニコニコ生放送のGetPlayerStatusの取得まで解説します。

SharpHeaderCookieのインストール


ソリューションエクスプローラからプロジェクト名を右クリックして【NuGetパッケージの管理】を起動します。

NuGetパッケージの管理

右側のオンライン検索にSharpHeaderCookieと入力

SharpHeaderCookieと入力

SharpHeaderCookieをインストール*1

依存関係もインストールされる

【NuGetパッケージの管理】を閉じます。ソリューションエクスプローラを確認してください。
SharpHeaderCookie、System.Data.SQLite、x86\IEPCookie.dll*2、Readme-SharpHeaderCookie.txtが追加されました。

追加されたファイルたち

カスタムコントロールの追加


コントロールをツールボックスに追加するには
ツールボックスを開き右クリックから【タブの追加】を選択し名前をSharpHeaderCookieにします。

タブの追加

SharpHeaderCookieタブを右クリックし【アイテムの選択】をクリックします。

アイテムの選択

.NET Frameworkコンポーネントタブの参照をクリックし.NET Frameworkのバージョンと同じSharpHeaderCookie.dllを開きます。

開く

【OK】をクリックすると【ツールボックス】のSharpHeaderCookieタブにいくつかカスタムコントロールが追加されます。

追加された

ブラウザ選択フォームの作成


ソリューションエクスプローラのプロジェクトを右クリックし【追加】→【windowsフォーム】をクリック。

新しいフォームの追加

フォーム名は【Form2.cs】そのままで【追加】をクリック。

フォーム追加された

ソリューションエクスプローラの【Form2.cs】をダブルクリックしフォームの【デザイン】を開きます。

form2のデザイン

ツールボックスからSharpHeaderCookieタブにある【BrowserControlNiconico】を選択し【Form2.cs[デザイン]】でクリックして追加します。

BrowserControlNiconico追加

【browserControlNiconico1】が入るようにフォームの大きさを広げます。

フォームを広げる

【browserControlNiconico1】の【プロパティ】の【Dock】を【Fill】にしてからフォームの大きさを調節します。

フォームの大きさ調節

【プロパティ】の【イベント】の【FormClosing】イベントをダブルクリックしイベントを作成します。

FormClosingイベントの作成

ソースコードを下記のように入力します。

public partial class Form2 : Form {
public SharpHeaderCookie.IGetBrowserCookie SelectedBrowserCookie { get; private set; }

public Form2(SharpHeaderCookie.IGetBrowserCookie browserCookie) {
InitializeComponent();

this.SelectedBrowserCookie = browserCookie;
browserControlNiconico1.SelectedBrowserCookie = this.SelectedBrowserCookie;
}

private void Form2_FormClosing(object sender, FormClosingEventArgs e) {
this.SelectedBrowserCookie = browserControlNiconico1.SelectedBrowserCookie;
}
}

ブラウザ選択のソースコードはこれだけです。

メインフォームの作成


Form1のデザインに【MenuStrip】(menuStrip1)を貼り付け、【ブラウザ選択】(ブラウザ選択ToolStripMenuItem)と【GetPlayerStatus】(getPlayerStatusToolStripMenuItem)のメニューと【TextBox】(toolStripTextBox1)を作成。そしてフォームのあいてるところに【TextBox】(textBox1)を貼り付け、【プロパティ】の【MultiLine】を【True】、【Dock】を【Fill】に設定しました。*3

メインフォームのツール配置

デザインの【ブラウザ選択】と【GetPlayerStatus】をダブルクリックしてイベントを作成して最後にメインフォームのソースコードを入力します。

public partial class Form1 : Form {
private SharpHeaderCookie.IGetBrowserCookie browserCookie;

public Form1() {
InitializeComponent();
}

private void ブラウザ選択ToolStripMenuItem_Click(object sender, EventArgs e) {
using(Form2 form = new Form2(browserCookie)) {
if(form.ShowDialog(this) == System.Windows.Forms.DialogResult.OK) {
this.browserCookie = form.SelectedBrowserCookie;
}
}
}

private async void getPlayerStatusToolStripMenuItem_Click(object sender, EventArgs e) {
textBox1.Clear();
if(browserCookie == null) {
return;
}
if(string.IsNullOrEmpty(toolStripTextBox1.Text)) {
return;
}

string playerStatus = null;
try {
Uri playerStatusUri = new Uri(string.Format("http://live.nicovideo.jp/api/getplayerstatus?v={0}", toolStripTextBox1.Text));
// CookieHeaderを取得
string cookieHeader = browserCookie.CookieHeader(playerStatusUri, "user_session");

// WebClientの使用例
//*
using(var wc = new System.Net.WebClient()) {
wc.CachePolicy = new System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.NoCacheNoStore);
wc.Encoding = Encoding.UTF8;
// HttpRequestHeader.Cookieにセットするだけ
wc.Headers[System.Net.HttpRequestHeader.Cookie] = cookieHeader;
wc.Headers[System.Net.HttpRequestHeader.UserAgent] = "test App1";
playerStatus = await wc.DownloadStringTaskAsync(playerStatusUri);
}
// */

}
catch { }
if(playerStatus == null) {
return;
}

textBox1.Text = playerStatus;
}
}


動作確認


メニューから【ブラウザ選択】をクリックしてお使いのブラウザを選択、OKしてメニューのテキストボックスにニコニコ生放送のIDを適当に入力、【GetPlayerStatus】をクリックして取得できたら完成!

実行したアプリ

サンプルのソースが配布ページからダウンロードできますのでNuGetインストールされた方はぜひ。

ToDo:


htmlをきれいにして画像をサムネ表示してうぃーんってでるなんかにかえる
もっとみやすくする!
  • 注1 依存関係のあるSQLiteも同時にインストールされます
  • 注2 IEの保護モードCookie取得用
  • 注3 今までずごく冗長な説明だったのではしょりました

シェアする

コメント

トラックバック

トラックバック用URL
http://www.youyoukankan.net/cms/action.php?action=plugin&name=TrackBack&tb_id=13
トラックバック
このエントリにトラックバックはありません