diff options
author | ebith | 2011-11-03 20:12:28 +0900 |
---|---|---|
committer | ebith | 2011-11-04 00:19:30 +0900 |
commit | c5181971191ebf7f3b0f4da555980e3e7cc9b4a4 (patch) | |
tree | b5ea5a6e5da3e5725936cdb49b15f70c19e0f2b2 /nicolist.js | |
parent | a06d9bfee181e47f42c99705ac90dd647ad60ddd (diff) | |
download | vimperator-plugins-c5181971191ebf7f3b0f4da555980e3e7cc9b4a4.tar.bz2 |
削除とマイリストの新規作成をできるようにした
Diffstat (limited to 'nicolist.js')
-rw-r--r-- | nicolist.js | 96 |
1 files changed, 80 insertions, 16 deletions
diff --git a/nicolist.js b/nicolist.js index ce1b9dd..85bdb20 100644 --- a/nicolist.js +++ b/nicolist.js @@ -5,20 +5,31 @@ var INFO = <plugin name="nicolist" - version="0.2" + version="0.3" summary="ニコニコ動画のマイリストを操作します" xmlns="http://vimperator.org/namespaces/liberator"> <author email="ebith.h@gmail.com">ebith</author> + <license href="http://www.opensource.org/licenses/bsd-license.php">New BSD License</license> <project name="Vimperator" minVersion="3.2"/> <item> <tags>:nicolist-add</tags> <spec>:nicolist add <a>mylist-id</a></spec> - <description><p>マイリストに動画を追加します</p></description> + <description><p><a>mylist-id</a>で指定したマイリストに動画を追加します</p></description> + </item> + <item> + <tags>:nicolist-delete</tags> + <spec>:nicolist delete <a>mylist-id</a> <a>item-id</a></spec> + <description><p><a>mylist-id</a>のみであればマイリストを削除、<a>item-id</a>の指定もあれば動画をマイリストから削除します</p></description> + </item> + <item> + <tags>:nicolist-new</tags> + <spec>:nicolist new <oa>-p<oa>ublic</oa></oa> <a>name</a> </spec> + <description><p><a>name</a>という名前でマイリストを新規作成します。<oa>-public</oa>を付けると公開マイリストになります</p></description> </item> <item> <tags>:nicolist-open</tags> <spec>:nicolist open <a>mylist-id</a> <a>video-id</a></spec> - <description><p>mylist-idのみであればマイリストを、video-idの指定もあれば動画を開きます</p></description> + <description><p><a>mylist-id</a>のみであればマイリストを、<a>video-id</a>の指定もあれば動画を開きます</p></description> </item> </plugin>; @@ -50,7 +61,6 @@ commands.addUserCommand( ['o[pen]'], 'マイリストか動画を開く', function (args) { - liberator.log(args); let [mylist_id, video_id] = args; if (video_id) { let url = 'http://www.nicovideo.jp/watch/' + video_id; @@ -65,6 +75,39 @@ commands.addUserCommand( completer: mylistCompleter, } ), + new Command( + ['n[ew]'], + 'マイリストを新しく作る', + function (args) { + let token = getToken(); + let url = 'http://www.nicovideo.jp/api/mylistgroup/add?name=' + args.literalArg + '&token=' + token; + if ( args['-public'] ) { url += '&public=1'; } + liberator.echo('nicolist new : ' + JSON.parse(util.httpGet(url).responseText).status); + }, + { + literal: 0, + options: [ [['-public', '-p'], commands.OPTION_NOARG] ], + } + ), + new Command( + ['d[elete]'], + 'マイリストか動画を削除する', + function (args) { + let token = getToken(); + let [mylist_id, item_id] = args; + if (item_id) { + let url = 'http://www.nicovideo.jp/api/mylist/delete?group_id=' + mylist_id + '&id_list[0][]=' + item_id + '&token=' + token; + liberator.echo('nicolist delete : ' + JSON.parse(util.httpGet(url).responseText).status); + } else if (mylist_id) { + let url = 'http://www.nicovideo.jp/api/mylistgroup/delete?group_id=' + mylist_id + '&token=' + token; + liberator.echo('nicolist delete : ' + JSON.parse(util.httpGet(url).responseText).status); + } + }, + { + literal: 1, + completer: mylistCompleter, + } + ), ] }, true @@ -72,28 +115,49 @@ commands.addUserCommand( function mylistCompleter (context, args) { if (args.completeArg == 0){ - let url = 'http://www.nicovideo.jp/api/mylistgroup/list'; - let mylistgroup = JSON.parse(util.httpGet(url).responseText).mylistgroup; + context.incomplete = true; context.title = ["id", "title"]; context.filters = [CompletionContext.Filter.textDescription]; context.compare = void 0; - context.completions = [ - [v.id, v.name] - for ([k, v] in Iterator(mylistgroup)) - ]; + + let url = 'http://www.nicovideo.jp/api/mylistgroup/list'; + util.httpGet(url, function (xhr) { + context.incomplete = false; + context.completions = [ + [v.id, v.name] + for ([k, v] in Iterator(JSON.parse(xhr.responseText).mylistgroup)) + ]; + }); } else if (args.completeArg == 1){ - let url = 'http://www.nicovideo.jp/api/mylist/list?group_id=' + args[0]; - let mylistitem = JSON.parse(util.httpGet(url).responseText).mylistitem.sort(sorter); + context.incomplete = true; context.title = ["id", "title"]; context.filters = [CompletionContext.Filter.textDescription]; context.compare = void 0; - context.completions = [ - [v.item_data.video_id, v.item_data.title] - for ([k, v] in Iterator(mylistitem)) - ]; + + let url = 'http://www.nicovideo.jp/api/mylist/list?group_id=' + args[0]; + util.httpGet(url, function (xhr) { + context.incomplete = false; + + if (/open/.test(context.name)) { + context.completions = [ + [v.item_data.video_id, v.item_data.title] + for ([k, v] in Iterator(JSON.parse(xhr.responseText).mylistitem.sort(sorter))) + ]; + } else if (/delete/.test(context.name)) { + context.completions = [ + [v.item_id, v.item_data.title] + for ([k, v] in Iterator(JSON.parse(xhr.responseText).mylistitem.sort(sorter))) + ]; + } + }); } } function sorter (a, b) { return - (a.create_time - b.create_time); } + +function getToken () { + let url = 'http://www.nicovideo.jp/my/mylist'; + return util.httpGet(url).responseText.match(/NicoAPI\.token.+/)[0].match(/\d{5}-\d{10}-[\d\w]{40}/)[0]; +} |