7cc@はてなブログ

JavaScriptとかとか

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

ポイント

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

正道

  • ログイン不要。
  • 取得確率と使い勝手が良いのは3番目の静画API。表示だけできればよいなら最後のiframeで。
  • クロスドメインで利用できるのは大百科APIだけだが、取得率が悪い

Vita/3DS 向けのAPIを追加。これも扱いやすい

何か URL response 動画ページから
アクセス可能
投稿動画RSS http://www.nicovideo.jp/user/33333333/video?rss=2.0 xml yes
大百科API http://api.nicodic.jp/page.summary/json/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
Vita/3DS http://api.ce.nicovideo.jp/api/v1/user.info?user_id=1 XML, JSON 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/json/u/2
レスポンス: {"title":"2","view_title":"戀塚","summary":"戀塚昭彦\ntwitter: @koizuka"};

jsonの部分はcallback関数名。標準では n が使われている。
http://api.nicodic.jp/page.summary/n/u/2

失敗

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>
理由: 未作成、管理者削除(?)

VITA / 3DS

レスポンスタイプ: XML, JSONが選べる。 JSONにしたいなら、パラメータに __format=json をつける。

成功: http://api.ce.nicovideo.jp/api/v1/user.info?user_id=1&__format=json

{
  "nicovideo_user_response": {
    "user": {
      "id": "1",
      "nickname": "しんの",
      "thumbnail_url": "http://dcdn.cdn.nimg.jp/nicoaccount/usericon/0/1.jpg?1446235447"
    },
    "vita_option": {
      "user_secret": "0"
    },
    "additionals": "",
    "@status": "ok"
  }
}

失敗: http://api.ce.nicovideo.jp/api/v1/user.info?user_id=0&__format=json

{
  "nicovideo_user_response": {
    "error": {
      "code": "PARAMERROR",
      "description": "パラメータが不正です"
    },
    "@status": "fail"
  }
}

邪道

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

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)
    }
});