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

ニコニコ動画APIメモ

ニコニコ動画

getthumbinfoでコミュニティ動画の情報はとれない。こんなレスポンスが帰ってくる。
http://www.nicovideo.jp/api/getthumbinfo/1215439832

<?xml version="1.0" encoding="UTF-8"?>
<nicovideo_thumb_response status="fail">
<error>
<code>COMMUNITY</code>
<description>community</description>
</error>
</nicovideo_thumb_response>

エラーコードはNOT_FOUNDとかじゃなくてCOMMUNITY。COMMUNITYの情報は入手できません,と突っぱねられているわけだ。これじゃあ手の出しようが無い。
ちなみにマイメモリーも似たような形式のURLだけど,thumbinfoはきちんと入手できる。
コミュニティ動画の再生ページにはきちんとデータが埋め込まれている。

var Video = {
	v:            '1215439832',
	id:           'sm3883037',
	tags:         ['\u30a2\u30a4\u30c9\u30eb\u30de\u30b9\u30bf\u30fc','\u4e03\u5915P','\u30b2\u30fc\u30e0','\u30a2\u30a4\u30de\u30b9MAD\u51e6\u5973\u4f5c','\u671f\u5f85\u306e\u65b0\u4eba\uff08\u4e88\u5b9a\uff09','iM@S\u6d0b\u697d\u30b3\u30e9\u30dcPV','\u6ce3\u3051\u308b\u30a2\u30a4\u30de\u30b9','\u4e03\u5915\u9769\u547d','\u8a55\u4fa1\u3055\u308c\u308b\u3079\u304d','\u30cb\u30b3\u30de\u30b9\u4e09\u5927\u60b2\u5287'],
	lockedTags:   ['\u30a2\u30a4\u30c9\u30eb\u30de\u30b9\u30bf\u30fc','\u4e03\u5915P'],
	title:        '\u30a2\u30a4\u30de\u30b9\u306e\u96a0\u3057\u30b3\u30de\u30f3\u30c9\u3067\u65e9\u901f\u629c\u304dMAD\u3092\u3064\u304f\u3063\u3066\u307f\u305f',
	description:  '\u308f\u3051\u306d\u30fc\u3060\u308d\uff01\u5168\u90e8\u624b\u4f5c\u696d\u3067\u3059\u3002\u4ffa\u306e2\u30f6\u6708\u304c\uff01\u30c7\u30d3\u30e5\u30fc\u4f5c\u3068\u610f\u6c17\u8fbc\u3093\u3067\u3044\u305f\u306e\u306b\uff65\uff65\uff65\u3002765GJ\u3059\u304e\u308b\uff01\u4eca\u5ea6\u306f\u3061\u3083\u3093\u3068\u3057\u305f\u52d5\u753b\u3067\u623b\u3063\u3066\u304d\u307e\u3059\u3002\u591a\u5206\u3002\u871c\u67d1\uff1d\u672a\u5b8c\u3002\u25cf\u8ffd\u8a18\uff1a\u307f\u3093\u306a\u306e\u30b3\u30e1\u306e\u6696\u304b\u3055\u306b\u6ce3\u3044\u305f\u3002\u81ea\u5206\u306f\u501f\u308a\u7269P\u306a\u3093\u3067\u3001BB\u7d20\u6750\u304c\u3046\u307e\u304f\u96c6\u307e\u3063\u305f\u3089\u3044\u305a\u308c\u5b8c\u6210\u76ee\u6307\u305d\u3046\u304b\u306a\u3068\u304b\u8003\u3048\u3066\u307e\u3059\u3002\u3067\u3082\u3068\u308a\u3042\u3048\u305a\u5225\u306e\u30a2\u30a4\u30c7\u30a3\u30a2\u304c\u3042\u308b\u306e\u3067\u305d\u3063\u3061\u4f5c\u3063\u3066\u3001\u7cbe\u795e\u7684\u30ea\u30cf\u30d3\u30ea\u3067\u3082\u3057\u3088\u3046\u304b\u3068\u8003\u3048\u4e2d\u3002\u25cf\u305d\u308c\u3068\u3053\u306e\u52d5\u753b\u306e\u7d20\u6750\u306f\u307b\u307cveoh\u304b\u3089\u501f\u308a\u3066\u307e\u3059\u3002\u7d20\u6750\u4e0a\u3052\u3066\u304f\u308c\u3066\u308b\u4eba\u306b\u611f\u8b1d\u3002\u25cfP\u540d\u306f\u871c\u67d1\u3068\u8ff7\u3063\u305f\u3051\u3069\u30e1\u30e2\u30ea\u30a2\u30eb\u7684\u306a\u3053\u3068\u3082\u542b\u3081\u3066\u4e03\u5915P\u306b\u3057\u307e\u3059\u3002\u8272\u3005\u8003\u3048\u3066\u304f\u308c\u3066\u3042\u308a\u304c\u3068\u3046\uff01\u25cf\u672c\u7269\u306e\u30b8\u30a7\u30d0\u30f3\u30cb\u6765\u3066\u305f\u3093\u3067\u3059\u306d<a href=\"http:\/\/www.nicovideo.jp\/watch\/sm3884182\" class=\"video\">sm3884182<\/a>',
	thumbnail:    'http:\/\/tn-skr.smilevideo.jp\/smile?i=3883037',
	postedAt:     '2008/07/07 04:24:19',
	length:       69,
	viewCount:    30587,
	mylistCount:  904,
	isDeleted:    false,
	isMymemory:   false,
	isR18:        false
};

このデータを入手できればいいのにな。現状のAPIだとコミュニティ外の人も情報が入手できてしまうからコミュニティ動画へのアクセス制限されているのかな。
動画再生ページを解析してもいいけど面倒だし短時間の集中アクセス制限とかいろいろ考えなければならないことがある。
なんかいい方法は無いものか。隠しAPIとかあったらいいなー。
あとはgetthumbinfoと同じような感じでgetmylistinfoとかgetcommuinfoとか欲しいな。

0:22 追記

みーっけた!getflvを使えばいけそうだ。
http://www.nicovideo.jp/watch/1215439832
http://www.nicovideo.jp/api/getflv/1215439832

thread_id=1215439832&l=69&url=http%3A%2F%2Fsmile-pso61.nicovideo.jp%2Fsmile%3Fm%3D3883037.6791&link=http%3A%2F%2Fwww.smilevideo.jp%2Fview%2F3883037%2F43375&ms=http%3A%2F%2Fmsg.nicovideo.jp%2F13%2Fapi%2F&user_id=43375&is_premium=1&nickname=gifnksm&time=1215443976&done=true&needs_key=1&ng_rv=411

適当にデコードするとこんな感じ

thread_id=1215439832
l=69
url=http://smile-pso61.nicovideo.jp/smile?m=3883037.6791
link=http://www.smilevideo.jp/view/3883037/43375
ms=http://msg.nicovideo.jp/13/api/
user_id=43375
is_premium=1
nickname=gifnksm
time=1215443976
done=true
needs_key=1
ng_rv=411

3883037っていうビデオIDが入手できました。
問題は数字に付く動画ID。大抵はsmかnmだと思いますがこれを区別しなければならない。
試しにnmxxxxな動画をいくつか調べてみた。
http://www.nicovideo.jp/watch/nm3888351
http://www.nicovideo.jp/api/getflv/nm3888351

thread_id=1215430207
l=18
url=http://smile-pso41.nicovideo.jp/smile?s=3888351.57432
link=http://www.smilevideo.jp/view/3888351/43375
ms=http://msg.nicovideo.jp/32/api/
user_id=43375
is_premium=1
nickname=gifnksm
time=1215444667
done=true
ng_rv=411

http://www.nicovideo.jp/watch/nm3888009
http://www.nicovideo.jp/api/getflv/nm3888009

thread_id=1215428400
l=81
url=http://smile-pso42.nicovideo.jp/smile?s=3888009.33106
link=http://www.smilevideo.jp/view/3888009/43375
ms=http://msg.nicovideo.jp/23/api/
user_id=43375
is_premium=1
nickname=gifnksm
time=1215444856
done=true
ng_rv=411

あと比較用にコミュニティ動画じゃないsmxxxxな動画。
http://www.nicovideo.jp/watch/sm3801109
http://www.nicovideo.jp/api/getflv/sm3801109

thread_id=1215442151
l=136
url=http://smile-pso21.nicovideo.jp/smile?v=3891109.75626
link=http://www.smilevideo.jp/view/3891109/43375
ms=http://msg.nicovideo.jp/20/api/
user_id=43375
is_premium=1
nickname=gifnksm
time=1215445033
done=true
ng_rv=411

観覧権限の無いコミュニティ動画の場合。
http://www.nicovideo.jp/watch/1215391601
http://www.nicovideo.jp/api/getflv/1215391601

error=invalid_v1&done=true

うん。smとnmで違いが見あたらないね。困ったね。
小数点以下の数字が気になるけどなんだろうか。サーバとかキャッシュとかその当りの都合なんだろうか。

おまけ

公式動画の場合
http://www.nicovideo.jp/watch/zb3821789
http://www.nicovideo.jp/api/getflv/zb3821789

thread_id=1214845521
l=1863
url=http://smile-pso61.nicovideo.jp/smile?m=3821789.42319
link=http://ch.nicovideo.jp/
ms=http://msg.nicovideo.jp/3/api/
user_id=43375
is_premium=1
nickname=gifnksm
time=1215445486
done=true
ng_rv=411
ng_up=%E3%81%86%E3%81%96%E3%81%84=%EF%BD%97%EF%BD%97%EF%BD%97%EF%BD%97%EF%BD%97&%E6%AD%BB%E3%81%AD=%EF%BD%97%EF%BD%97%EF%BD%97%EF%BD%97%EF%BD%97&%E3%81%8D%E3%82%82%E3%81%84=%EF%BD%97%EF%BD%97%EF%BD%97%EF%BD%97%EF%BD%97&%E3%83%96%E3%82%B9=%EF%BD%97%EF%BD%97%EF%BD%97%EF%BD%97%EF%BD%97&%E3%83%96%E3%82%B5%E3%82%A4%E3%82%AF=%EF%BD%97%EF%BD%97%EF%BD%97%EF%BD%97%EF%BD%97&%E3%81%B0%E3%81%8B=%EF%BD%97%EF%BD%97%EF%BD%97%EF%BD%97%EF%BD%97&%E4%B8%8B%E6%89%8B=%EF%BD%97%EF%BD%97%EF%BD%97%EF%BD%97%EF%BD%97&%E3%82%AB%E3%82%B9=%EF%BD%97%EF%BD%97%EF%BD%97%EF%BD%97%EF%BD%97&%E3%82%AF%E3%82%BA=%EF%BD%97%EF%BD%97%EF%BD%97%EF%BD%97%EF%BD%97&%E3%82%B4%E3%83%9F=%EF%BD%97%EF%BD%97%EF%BD%97%EF%BD%97%EF%BD%97&%E6%AE%BA%E3%81%99=%EF%BD%97%EF%BD%97%EF%BD%97%EF%BD%97%EF%BD%97&%E6%AE%BA%E3%81%9B=%EF%BD%97%EF%BD%97%EF%BD%97%EF%BD%97%EF%BD%97&%E6%BD%B0%E3%81%99=%EF%BD%97%EF%BD%97%EF%BD%97%EF%BD%97%EF%BD%97

特に変なところは無し。動画情報のリンクが違うところになってるぐらいでしょうか。

0:56 追記

よく見たらnmとsmで違いがあるじゃないか。
urlが

http://smile-pso**.nicovideo.jp/smile?m=**.**

ってなってるのがmp4動画(多分smxxxx)で,

http://smile-pso**.nicovideo.jp/smile?v=**.**

ってなってるのがflv動画(これも多分smxxxx)で,

http://smile-pso**.nicovideo.jp/smile?s=**.**

ってなってるのがswf動画(ほとんどの場合nmxxxxなはず)。
とりあえずこれで判断できそう。zbとかzaとかがコミュニティ動画になってる可能性もあるけれど,まあ無視できる数だろうと思う。最悪もしかしてリンクをたくさん出せば済む。
あとは実装するだけ。うーん。なかなか面倒な仕事になりそうだ。