ニコニコ動画ログイン失敗時の処理

APIを使ってニコニコ動画にログインする方法については探すとたくさん見つかりましたが、ログイン失敗時にどのような応答があり、それに応じて処理をしているところがみつからなかったので、自分で調査して実装しました。

ニコニコ動画サイトでの確認

ニコニコ動画のログイン画面で、メールアドレスやパスワードを入力せずにログインボタンを押した時のレスポンスをChromeデベロッパツールで確認しました。

NetworkタブのNameが「login?site=niconico...」となっているところのRequest URLを見ると、「message=cant_login」とあったので、おそらくこれでログイン失敗が判別できるのかなと仮定。

f:id:uramonk:20150714214319p:plain

ソースコードでの確認

ソースコードのログインする箇所で、HttpWebResponseのResponseUri.AbsoluteUriを確認したところ、Chromeで見たものと同じURLがあり、「message=cant_login」もあったので、とりあえずこの文字があったらログイン失敗ということで判別はできました。

HttpWebRequest request = HttpWebRequest.CreateHttp(Constants.LoginUrl);
request.CookieContainer = new CookieContainer();
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = contentBytes.Length;

using (Stream stream = request.GetRequestStream())
{
    stream.Write(contentBytes, 0, contentBytes.Length);
}

HttpWebResponse response = null;
try
{
    response = (HttpWebResponse)request.GetResponse();
}
catch(WebException ex)
{
    // プロトコルエラーなどの処理
}
catch(Exception e)
{
    // 他のエラー処理
}
if(response != null)
{
    if(response.ResponseUri.AbsoluteUri.Contains("cant_login"))
    {
        // ログイン失敗!
    }
    else
    {
        // ログイン成功!
    }
}

正直判別方法はもうちょっとどうにかすべきですが、まずはこれで出来たということで。
やはりWeb関連はまだまだ勉強不足。