7cc@はてなブログ

JavaScriptとかとか

ニコニコ動画で、ユーザーIDからニックネーム(ユーザーネーム)を取得する

ポイント

  • 公式のAPIが無い&公開されてはいないので、「マイページを直接叩くよりはマシ」という程度の認識で使う。
  • 確実に取得する方法はないので、ユーザーネーム取得に失敗した時のためにダミーテキストを用意してやると良い。 戻り値が空文字やnullでエラーにならないように。
  • メソッドは全てGET, パラメータはIDのみなので省略。

正道

  • ログイン不要。
  • 取得確率と使い勝手が良いのは3番目の静画API。表示だけできればよいなら最後のiframeで。
  • クロスドメインで利用できるのは大百科APIだけだが、取得率が悪い
何か URL response 動画ページから
アクセス可能
投稿動画RSS http://www.nicovideo.jp/user/33333333/video?rss=2.0 xml yes
大百科API http://api.nicodic.jp/page.summary/n/u/2 text/javascript (jsonp) yes
静画API http://seiga.nicovideo.jp/api/user/info?id=1 xml no
iframe http://ext.nicovideo.jp/thumb_user/1 HTML no

投稿動画RSS

レスポンスタイプ: xml
成功条件: 公開設定(ユーザーによる)

成功

url: http://www.nicovideo.jp/user/33333333/video?rss=2.0
レスポンス: <dc:creator>iueha</dc:creator>

失敗1

url: http://www.nicovideo.jp/user/1/video?rss=2.0
レスポンス: <dc:creator>非公開ユーザー</dc:creator>
理由: 非公開設定

失敗2

url: http://www.nicovideo.jp/user/0/video?rss=2.0
レスポンス: HTMLページ
理由: 存在しないユーザーID

大百科API

レスポンスタイプ: jsonp
成功条件: 作成されている

成功

url: http://api.nicodic.jp/page.summary/n/u/2
レスポンス: n({"title":"2","view_title":"戀塚","summary":"戀塚昭彦\ntwitter: @koizuka"});

失敗

url: http://api.nicodic.jp/page.summary/n/u/0
レスポンス: n(null);

静画API

レスポンスタイプ: xml
成功条件: 不明

成功

url: http://seiga.nicovideo.jp/api/user/info?id=1
レスポンス: <nickname>しんの</nickname>

失敗

url: http://seiga.nicovideo.jp/api/user/info?id=0
レスポンス: <nickname>-</nickname>

iframe

レスポンスタイプ: HTML
成功条件: ページが存在している & 公開設定(管理者による?)

成功

url: http://ext.nicovideo.jp/thumb_user/1
レスポンス: <title>しんのさんのプロフィール‐ニコニコ動画</title>

失敗1

url: http://ext.nicovideo.jp/thumb_user/0
レスポンス: <title>非公開プロフィール‐ニコニコ動画</title>
理由: 非公開

失敗2

url: http://ext.nicovideo.jp/thumb_user/9999999999999999999999999
レスポンス: <title>無効なプロフィール‐ニコニコ動画</title>
理由: 未作成、管理者削除(?)

邪道

「ニコる」がユーザー名を持ってくるのでそれを流用する。

http://www.nicovideo.jp/my/nicoru/active/?mode=details&link_id=sm9&user_ids=1%2C2%2C3%2C4&last_like_time=2014-10-10%2010:00:00&innerPage=1

  • 要ログイン
  • 複数のユーザー名を一括で取れる
  • 動画ページからアクセス可能
  • 小サイズのサムネもついてくる

それぞれ nicoru.js の 180、44行から抜粋・改変

// user_ids以外は何でも良い
var data = {
    'mode': 'details',
    'link_id': "sm9",
    'user_ids': "1,2,3,4", // コンマ区切りで複数ユーザー。コンマ前後のスペースは無し
    'last_like_time': "2014-10-10 10:00:00",
    'innerPage': 1
};

jQuery.ajax({
    type: 'GET',
    url: '/my/nicoru/active',
    data: data,
    dataType: 'html',
    success: function(result){
      console.log(result)
    }
});