aboutsummaryrefslogtreecommitdiffstats
path: root/nicolist.js
diff options
context:
space:
mode:
authorebith2011-11-03 20:12:28 +0900
committerebith2011-11-04 00:19:30 +0900
commitc5181971191ebf7f3b0f4da555980e3e7cc9b4a4 (patch)
treeb5ea5a6e5da3e5725936cdb49b15f70c19e0f2b2 /nicolist.js
parenta06d9bfee181e47f42c99705ac90dd647ad60ddd (diff)
downloadvimperator-plugins-c5181971191ebf7f3b0f4da555980e3e7cc9b4a4.tar.bz2
削除とマイリストの新規作成をできるようにした
Diffstat (limited to 'nicolist.js')
-rw-r--r--nicolist.js96
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];
+}