/* * ニコニコ動画のマイリストを何かするプラグイン * http://twitter.com/ebith */ var INFO = xml` ebith New BSD License :nicolist-add :nicolist add mylist-id mylist-comment

mylist-idで指定したマイリストに動画を追加します。マイリストコメントの入力も可能です

:nicolist-delete :nicolist delete mylist-id item-id

mylist-idのみであればマイリストを削除、item-idの指定もあれば動画をマイリストから削除します

:nicolist-new :nicolist new -public name

nameという名前でマイリストを新規作成します。-publicを付けると公開マイリストになります

:nicolist-open :nicolist open mylist-id video-id

mylist-idのみであればマイリストを、video-idの指定もあれば動画を開きます

`; commands.addUserCommand( ['nicolist'], 'ニコニコ動画のマイリストを操作する', function(args) { liberator.echoerr('nicolist : サブコマンドが足りない!'); }, { subCommands: [ new Command( ['a[dd]'], 'マイリストに追加する', function (args) { let video_id = content.window.wrappedJSObject.video_id; if (!video_id) { return liberator.echoerr('nicolist : watchページじゃない!'); } let [mylist_id, description] = args; if (!description){ description = ''; } //undefinedが入っているとそれをマイリストコメントにしてしまうので。 let token = content.window.wrappedJSObject.so.variables.csrfToken; let url = 'http://www.nicovideo.jp/api/mylist/add?group_id=' + mylist_id + '&token=' + token + '&item_id=' + video_id + '&description=' + description; liberator.echo('nicolist add : ' + JSON.parse(util.httpGet(url).responseText).status); }, { literal: 1, completer: mylistCompleter, } ), new Command( ['o[pen]'], 'マイリストか動画を開く', function (args) { let [mylist_id, video_id] = args; if (video_id) { let url = 'http://www.nicovideo.jp/watch/' + video_id; liberator.open(url, liberator.NEW_TAB); } else if (mylist_id) { let url = 'http://www.nicovideo.jp/mylist/' + mylist_id; liberator.open(url, liberator.NEW_TAB); } }, { literal: 1, 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 ); function mylistCompleter (context, args) { if (args.completeArg == 0){ context.incomplete = true; context.title = ["id", "title"]; context.filters = [CompletionContext.Filter.textDescription]; context.compare = void 0; 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 && !/add/.test(context.name)){ context.incomplete = true; context.title = ["id", "title"]; context.filters = [CompletionContext.Filter.textDescription]; context.compare = void 0; 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]; } s="o"><VimperatorPlugin> <name>{NAME}</name> <description>hatena bottle change notice.</description> <description lang="ja">はてなボトルの変更通知</description> <author mail="suvene@zeromemory.info" homepage="http://zeromemory.sblo.jp/">suVene</author> <version>0.1.2</version> <license>MIT</license> <minVersion>2.0pre</minVersion> <maxVersion>2.0pre</maxVersion> <updateURL>http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk/notifier/subject_hatelabo_bottle.js</updateURL> </VimperatorPlugin>; //}}} (function() { var notifier = liberator.plugins.notifier; if (!notifier) return; var libly = notifier.libly; var $U = libly.$U; var logger = $U.getLogger('subject_hatelabo_bottle'); var URL = 'http://bottle.hatelabo.jp'; notifier.subject.register(notifier.SubjectHttp, { interval: 60, options: { url: URL, headers: null, extra: null }, parse: function(res) { // if (this.count == 0) return []; // for debug var doc = res.getHTMLDocument('id("body")//div[contains(concat(" ", @class, " "), " entry ")]'); return doc; }, diff: function(cache, parsed) parsed.filter(function(element) !cache.some(function(c) c.textContent == element.textContent)), buildMessages: function(diff) { return diff.map($U.bind(this, function(d) { var permalink = $U.getFirstNodeFromXPath('descendant::a[@class="hatena-star-uri"]', d); if (permalink) permalink = URL + permalink; return new notifier.Message('Hatelabo bottle', $U.xmlSerialize(d), permalink) })); } }); })(); // vim: set fdm=marker sw=4 ts=4 sts=0 et: