Posts Tagged ‘API’
ニコニコ動画のマイリストページに埋め込まれている情報(DOM)
ニコニコ動画の再生ページに埋め込まれている情報 | Web scratch のマイリストページ版みたいなものです。
マイリストにもAPIがありますが(ニコニコ動画のAPIまとめ | Web scratch )マイリストページにいるならば、わざわざAPI叩かなくてもいろんな情報が取得できます。
なんでわざわざDOMから情報を取ってるかというと、変更の影響を受けにくかったりするからです。
ここでのマイリストは人が公開してるマイリストのこと。
my Mylist.groupList id (number): マイリストID user_id (number): マイリストのユーザーID name (string): マイリストのタイトル description (string): マイリスト説明文 public (boolean): true // 公開状況 default_sort (number): 1 (1-17) create_time (number): UNIX時間(util.unix2で戻せる) update_time (number): UNIX時間 icon_id (number): 0 sort_order (number): 0 my.currentItems [0]...配列 item_type (number): 0 item_id (string): 接頭辞がない動画番号(常時) description (string): マイリスト登録者による説明文 item_data video_id (string): 接頭辞がある動画番号(sm数字) title (string): 動画タイトル thumbnail_url (string): サムネイルURL first_retrieve (number): 投稿日時(UNIX時間) update_time (number): 更新日時(UNIX時間) view_counter (string): 再生数 mylist_counter (string): マイリスト数 num_res (string): コメント数 group_type (string): default length_seconds (string): 再生時間(秒) deleted (string): 0 (削除状態0-3?) last_res_body (string): 最近のコメント(文字列) watch_id (string): 接頭辞なしの動画番号(コミュ、マイメモリー以外だと接頭辞がある) watch (number): 0 create_time (number): マイリスト登録日時(UNIX時間) update_time (number): マイリスト更新日時(UNIX時間)
Firebugなどから、console.dir(my)などして構造を確認しておくといいです。
DOMから動画情報を取得するのを少しだけ手助けする関数群を置いておきます。(思ったより役に立たない)
(function () {
var w = unsafeWindow;
Mylist = {
// マイリストの属性
/*
Mylist.groupListのツリー
id (number): マイリストID
user_id (number): マイリストのユーザーID
name (string): マイリストのタイトル
description (string): マイリスト説明文
public (boolean): true // 公開状況
default_sort (number): 1 (1-17)
create_time (number): UNIX時間(util.unix2で戻せる)
update_time (number): UNIX時間
icon_id (number): 0
sort_order (number): 0
*/
// Mylist.groupList - my.CurrentGroupのコピー
groupList: function () {
return w.my.currentGroup;
},
/*
my.currentItemsのツリー
item_type (number): 0
item_id (string): 接頭辞がない動画番号(常時)
description (string): マイリスト登録者による説明文
item_data
video_id (string): 接頭辞がある動画番号(sm数字)
title (string): 動画タイトル
thumbnail_url (string): サムネイルURL
first_retrieve (number): 投稿日時(UNIX時間)
update_time (number): 更新日時(UNIX時間)
view_counter (string): 再生数
mylist_counter (string): マイリスト数
num_res (string): コメント数
group_type (string): default
length_seconds (string): 再生時間(秒)
deleted (string): 0 (削除状態0-3?)
last_res_body (string): 最近のコメント(文字列)
watch_id (string): 接頭辞なしの動画番号(コミュ、マイメモリー以外だと接頭辞がある)
watch (number): 0
create_time (number): マイリスト登録日時(UNIX時間)
update_time (number): マイリスト更新日時(UNIX時間)
*/
// Mylist.itemList - my.currentItemsのコピー
itemList : function(){
return w.my.currentItems;
},
}
// utility関数群
utils = {
playlength : transPlaylength,
unix2 : unixTodate,
clone : clone,
}
// 再生時間を分秒に変換
function transPlaylength(length){
return (length / 60).toFixed(2).toString().split(".").join("分") + "秒";
}
// 10桁の数字(UNIXTIME)から2009/10/1 00:00形式で返す
function unixTodate(x){
var t=new Date(x*1000);
return t.getFullYear() + "/" + fillZero(t.getMonth() + 1) + "/" + fillZero(t.getDate()) + " " + fillZero(t.getHours()) + ":" + fillZero(t.getMinutes()) + ":" + fillZero(t.getSeconds());
}
// http://d.hatena.ne.jp/javascripter/20080514/1210791575
// 先頭を0で埋める デフォルト2桁
function fillZero(num , digit){
var n = (digit) ? digit : 2;// デフォルト値
var zero=new Array(n).join('0');//0をn-1文字分つなげた文字列を作る。n==4だと'000'
var str=zero+num;//zeroとthisをくっつけた文字列を作る。
var result=str.substr(-n);//strの後ろから、n文字分の文字列を取ってくる。
return result;
}
// オブジェクトのコピーのコピーを作成
function clone(obj){
return (typeof uneval == "function") ? eval(uneval(obj)) : false;
}
})();どんな風に使うかというと、上の関数群を読み込んで使用します。
DOMへのアクセスをするものと少しのutility関数群から構成されています。
再生時間を分秒に直したり、UNIX時間で格納されている時間を2009/10/1 00:00形式に直したりするだけです。
// ==UserScript==
// @name Nico mylist Test
// @namespace http://efcl.info/
// @include http://www.nicovideo.jp/mylist/*
// @require http://gist.github.com/raw/239541/1dab27439133948bd6309f4ba959921a8ce938b9/NicoMylistDom.js
// ==/UserScript==
var t = Mylist.itemList();// DOM my.currentItemsにアクセス
var cpObj = utils.clone(t);// オブジェクトのコピー作成(元の値を残す)
console.log(cpObj.length)
for(var i =0,l =cpObj.length;i<l;i++){
console.log(i + " : " + cpObj[i].item_data.title + "投稿日 : "+ utils.unix2(cpObj[i].item_data.first_retrieve))
}
cpObj[i-1].item_data.title = "buzz";//コピーしたものを書き換える
console.log(t[i-1].item_data.title)// 元のDOMには影響ない上の関数群のテスト例です。インストールしてマイリストページに行くとコンソールに例が表示されるので参考にどうぞ
ニコニコ動画のAPIまとめ
ニコニコのマイリスト周りにAPIがいろいろ増えていたので、列挙してみる。
使い方は http://res.nimg.jp/js/nicoapi.js をよく読む。
見方としては
分別
メソッド名
URL(http://www.nicovideo.jp/api/foo/bar という感じで使う)
クエリー(それぞれの要素を&でつなげて指定)
返ってくるもの
という感じで書いている。
- Cathode Music: ニコニコ動画(9)APIを纏めた
- http://tewi.blogspot.com/2009/11/9api.html
も併せて読む。
書き方の一例(testという名前のマイリストを新規作成する)
Nico make mylist ←のブックマークレットをニコニコ動画上のトークンがあるページで実行する
var token = NicoAPI.token;
location.href = “http://www.nicovideo.jp/api/mylistgroup/add?name=test&description=&public=1&default_sort=1&icon_id=0&token=”+token;
APIのURLに引数となるクエリーを&区切りでつなげていったURLにアクセスすると正否を表すjsonが返ってくる。
書き込み権限が必要なAPIにはtokenも必要となる。
tokenはNicoAPI.token = “xxxxx-xxxxx-xxxxxxxxxxxx”という感じでページに埋め込まれているので、
Greasemonkeyからならvar token = unsafeWindow.NicoAPI.token で取得できるはず。
基本的に返ってくるものはjson形式
適当にパラメータの説明
- item_typeは0であることがほとんどらしい。動画が0、静画が5。
- item_idは接頭辞のない数字だけの動画番号を指定する
- id_listは id_list[0][]=item_id という感じのパラメータになる
NicoAPI.Deflist
とりあえずマイリスト
list
とりあえずマイリストの一覧を取得
"/api/deflist/list"
jsonフォーマットで返ってくる
add
とりあえずマイリストに追加
"/api/deflist/add",
{ "item_type": item_type,
"item_id": item_id,
"description": description }
item_typeは接頭辞のない数字だけの動画番号を指定する
update
とりあえずマイリストを更新
"/api/deflist/update",
{ "item_type": item_type,
"item_id": item_id,
"description": description }
remove
とりあえずマイリストから削除
"/api/deflist/delete",
{ "id_list": id_list }
move
とりあえずマイリストから移動
"/api/deflist/move"
{ "target_group_id": target_group_id,
"id_list": id_list }
copy
とりあえずマイリストからコピー
"/api/deflist/copy"
{ "target_group_id": target_group_id,
"id_list": id_list }
NicoAPI.MylistGroup
マイリスト
list
jsonフォーマットでマイリスト一覧を取得
マイリストの名前やidなど(中身はNicoAPI.Mylistで)
"/api/mylistgroup/list"
get
指定したマイリストIDの詳細を取得
listに含まれてるのと同じ内容?
"/api/mylistgroup/get"
{ "group_id": group_id }
add
マイリストを新規作成
"/api/mylistgroup/add"
{ "name": name,
"description": description,
"public": is_public,// 0:非公開 1:公開
"default_sort": default_sort,
"icon_id": icon_id }
update
マイリスト情報を更新
"/api/mylistgroup/update",
{ "name": name,
"description": description,
"public": is_public,
"default_sort": default_sort,
"icon_id": icon_id }
remove
マイリストを削除する
"/api/mylistgroup/delete",
{ "group_id": group_id }
sort
マイリストのソートの実行
マイリスト情報の"default_sort"で指定したソート法でソートし直す
"/api/mylistgroup/sort"
{ "group_id_list": group_id_list }
icon_idの指定
左から順に0,1,2,3となっていて 数字で指定
default_sortのソート法の指定
| ソート方法 | ID |
| 登録が古い順 | 0 |
| 登録が新しい順 | 1 |
| メモ昇順 | 2 |
| メモ降順 | 3 |
| タイトル昇順 | 4 |
| タイトル降順 | 5 |
| 投稿が新しい順 | 6 |
| 投稿が古い順 | 7 |
| 再生が多い順 | 8 |
| 再生が少ない順 | 9 |
| コメントが新しい順 | 10 |
| コメントが古い順 | 11 |
| コメントが多い順 | 12 |
| コメントが少ない順 | 13 |
| マイリスト登録が多い順 | 14 |
| マイリスト登録が少ない順 | 15 |
| 時間が長い順 | 16 |
| 時間が短い順 | 17 |
NicoAPI.Mylist
マイリストの動画操作
list
指定したマイリストの動画一覧を取得
"/api/mylist/list",
{ "group_id": group_id }
add
指定したマイリストの動画を加える
"/api/mylist/add",
{ "group_id": group_id,
"item_type": item_type,
"item_id": item_id,
"description": description }
update
指定したマイリストの動画情報を更新
"/api/mylist/update",
{ "group_id": group_id,
"item_type": item_type,
"item_id": item_id,
"description": description }
remove
指定したマイリストの動画を削除
"/api/mylist/delete",
{ "group_id": group_id,
"id_list": id_list }
id_listの形式
function make_id_list(item_type, item_id) {
var id_list = {};
id_list[item_type] = jQuery.makeArray(item_id);
return id_list;
}
move
指定したマイリストの動画を別のマイリストに移動
"/api/mylist/move",
{ "group_id": group_id,
"target_group_id": target_group_id,
"id_list": id_list }
例)
http://www.nicovideo.jp/api/deflist/move?id_list%5B0%5D%5B%5D=動画番号&target_group_id=マイリスト番号&token=トークン
指定したマイリストの動画を別のマイリストにコピー
copy
"/api/mylist/copy",
{ "group_id": group_id,
"target_group_id": target_group_id,
"id_list": id_list }NicoAPI.Watchitem
ウォッチリスト
list
ウォッチリストの一覧を取得
"/api/watchitem/list"
watchitem配列にウォッチリストに登録したユーザー名やIDが入っている
exist
ウォッチリストのitem確認
"/api/watchitem/exist",
{ "item_type": item_type,
"item_id": item_id }
add
ウォッチリストに加える
"/api/watchitem/add",
{ "item_type": item_type,
"item_id": item_id }
remove
ウォッチリストから削除する
"/api/watchitem/delete",
{ "id_list": id_list }
NicoAPI.Mymemory
マイメモリー
list
マイメモリーに入れている動画一覧を取得
"/api/mymemory/list"
remove
マイメモリーからid_listで指定した動画を削除
"/api/mymemory/delete",
{ "id_list": id_list }
NicoAPI.Friendlist
フレンドリスト
list
"/api/friendlist/list",
{ "sort": options.sort,
"order": options.order,
"offset": options.offset,
"count": options.count }
remove
"/api/friendlist/delete",
{ "target_user_id": target_user_id }
NicoAPI.Mylistcomment
マイリストコメント
list
"/api/mylistcomment/list"
{ "item_type": item_type,
"item_id": item_id }
nicoapi.jsには書いてないので、この指定方法が正しいか分からない。
json形式でマイリストが返ってくる
実際にこのAPIを叩くと
{“mylistcomment”:[],”status”:”ok”}
のような空が返ってきてしまう。正しく取得する方法があればお知らせ下さい。
例) sm9 のマイリストコメントを取得 http://www.nicovideo.jp/api/mylistcomment/list?item_type=0&item_id=1173108780 item_typeは0でないといけないらしい。(動画が0で、静画が5だそうです) item_idには接頭辞のない動画番号を指定。
例)Greasemonkeyからマイリストコメントのコメントを取得
getMylistcomments(function(res){
console.log(res)
});
function getMylistcomments(callback){
var itemId = document.getElementsByName("thread_id")[0].value;
GM_xmlhttpRequest( {
method : 'GET',
url : "http://www.nicovideo.jp/api/mylistcomment/list?item_type=0&item_id=" + itemId,
headers : {
'User-Agent' : 'Mozilla/5.0 Greasemonkey; Nico MylistComments'
},
onload : function (res) {
var jsObject = JSON.parse(res.responseText);
var l = jsObject.mylistcomment.length;
var result = [];
if (jsObject.status == "ok" && l > 0) {
for(var i =0;i<l;i++){
result.push(jsObject.mylistcomment[i].description)
}
callback(result)
}
}
});
}
remove
"/api/mylistcomment/delete",
{ "item_type": item_type,
"item_id": item_id,
"comment_user_id": comment_user_id }
静画関係のAPIはこちらを見た方がよいです。
- ニコ動マイリスト系APIまとめ – あたご型護衛艦日記
- http://d.hatena.ne.jp/aTaGo/20100811/1281552243
