読者です 読者をやめる 読者になる 読者になる

totorajの開発日記

僕がなんかメモる

ニコ動のAPI関連のメモ(1)

自分用のメモです。

間違った情報があるかもしれません。

マイリストをRSSで取得

RSS->JSONなどに変換してから処理をすると楽です。

node.jsだったら「xml2json」っていうモジュールがおすすめ!

RSSのURL

http://www.nicovideo.jp/mylist/<id>?rss=2.0

基本的な階層

xmljsonっぽく書くとこうなる

rss: {
  channel: {
    title: "マイリストタイトル"
    description: "マイリスト説明(改行含む)"
    putDate: "更新時間?"
    "dc:ccreator": "所有者"

    item: [
      {
        title: "動画タイトル"
        link: "動画URL"
        pubDate: "マイリスト登録時間"
        description: "「サムネ,動画説明文,再生時間,投稿時間,マイリストコメント」が含まれている"
      }
      ...
    ]
  }
}

切り出しが必要なところ

マイリストタイトル

/^.+?\s(.+)\u2010[^\u2010]+?$/

rss.channel.titleから切り出す。

サムネURL

/http:\/\/.+\.smilevideo\.jp\/smile\?i=[0-9]+/

rss.item[n].descriptionから切り出す。

マイリストコメント

/<p class="nico-memo">([\s\S]+?)<\/p><p class="nico-thumbnail">/

rss.item[n].descriptionから切り出す。

動画再生時間

/<strong class="nico-info-length">([0-9|:]+?)<\/strong>/

rss.item[n].descriptionから切り出す。

動画投稿時間

/<strong class="nico-info-date">(.+?)<\/strong>/

rss.item[n].descriptionから切り出す。

よくわからん表記方法なので適当に数字を切り出してそろえる。

動画取得関連

FLV or MP4

1. 動画のURLを取得

http://flapi.nicovideo.jp/api/getflv?v=<id>

上記のURLから動画のURLを取得

2. Cookieを取得

http://www.nicovideo.jp/watch/<id>

上記のURLからレスポンスヘッダのCookie「nicohistory」を取得

3. 動画を取得

1で取得したURLから動画を取得する。

リクエストヘッダに2で取得したnicohistoryを含めておかないと403を返される。

スマホ用のMP4

1. watchAuthKeyを取得するAPIのURLを取得

http://sp.nicovide.jp/watch/<id>

上記のURLから
#jsDataContainerの属性[data-watch_api_url]に設定されているURLを取得する。

取得する例(JavaScript)

// responseには文字列として再生ページのhtmlが入っている
response.match(/data-watch_api_url="(.+?)"/)[1].replace("&amp;","&");

2. watchAuthKeyを取得

1で取得したURLにアクセスしてwatchAuthKeyを取得。

帰ってくるJSONは下記を参考にしてください。

レスポンス(JSON)

{"watchAuthKey":"(ここにめっちゃ長いキー)","status":"ok","status_code":200}

3. Cookieと動画のURLを取得

http://flapi.nicovideo.jp/api/getflv?v=<id>
&device=iphone3
&watch_auth_key=<2で取得したkey>

上記のURLからレスポンスヘッダのCookienicohistory」と動画のURLを取得。

4. 動画を取得

3で取得したURLにリクエストを送るときにヘッダに3で取得したnicohistoryを含めておくと動画を取得できる