ニコニコ動画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とかがコミュニティ動画になってる可能性もあるけれど,まあ無視できる数だろうと思う。最悪もしかしてリンクをたくさん出せば済む。
あとは実装するだけ。うーん。なかなか面倒な仕事になりそうだ。