/* * readitlater.js * read it later apiをたたく * API Reffernce : http://readitlaterlist.com/api/docs/ * TODO:sendに対応する */ let PLUGIN_INFO = readitlater read it later の apiをたたく 0.0.2 3.0 3.0 ninja.tottori https://github.com/vimpr/vimperator-plugins/raw/master/readitlater.js 数字を入れるとその数だけリストを取得します。  :ril get num 3 とか read => 指定すると既読のものだけ取得します。 :ril get read みたいな tags => 指定するとtagがついているものだけ取得します。 :ril stats since, list, unread, read の情報がとれます ]]> ; commands.addUserCommand(['ril','readitlater'], 'read it late plugin', function(args){ ReadItLater.add(args); }, { options : [], subCommands: [ new Command(["add"], "Add a page to a user's list", function (args) { ReadItLater.add(args); },{ options : [ [["url","u"],commands.OPTION_STRING,null, [[ buffer.URL ,"target url"]] ], [["title","t"],commands.OPTION_STRING,null, [[ buffer.title ,"title"]] ], ], } ), new Command(["get"], "Retrieve a user's reading list", function (args) { ReadItLater.get(args); },{ options : [ [["num"],commands.OPTION_INT], [["read","-r"],commands.OPTION_NOARG], [["tags","-t"],commands.OPTION_NOARG], //[["myAppOnly"],commands.OPTION_NOARG], ], } ), new Command(["stats"], "Retrieve information about a user's list", function (args) { ReadItLater.stats(); },{} ), /* new Command(["test"], "Return stats / current rate limit information about your API key", function () { ReadItLater.apiTest(); },{} ), */ ], }, true ); let ReadItLater = { api_key : (liberator.globalVariables.readitlater_api_key) ? liberator.globalVariables.readitlater_api_key : "966T6ahYgb081icU10d44byL31p5bF20" , text : function(){ // {{{ let req = new libly.Request( "https://text.readitlaterlist.com/v2/text" , // url null, // headers { // options asynchronous:true, postBody:getParameterMap( { apikey : this.api_key, url : buffer.URL, mode : "less", images : 0, } ) } ); req.addEventListener("onSuccess",function(data){ e(data.responseText) }); req.addEventListener("onFailure",function(data){ liberator.echoerr(data.statusText); liberator.echoerr(data.responseText); }); req.post(); }, // }}} get : function(args){ // {{{ // document => http://readitlaterlist.com/api/docs#get let manager = Components.classes["@mozilla.org/login-manager;1"].getService(Components.interfaces.nsILoginManager); let logins = manager.findLogins({},"http://readitlaterlist.com","",null); let req = new libly.Request( "https://readitlaterlist.com/v2/get" , // url null, // headers { // options asynchronous:true, postBody:getParameterMap( { apikey : this.api_key, username : encodeURIComponent(logins[0].username), password : encodeURIComponent(logins[0].password), format : "json", count : (args["num"]? args["num"] : 30 ), state : (args["read"]) ? "read" : "unread", tags : (args["tags"]) ? 1 : 0, myAppOnly : (args["myAppOnly"]) ? 1 : 0, } ) } ); req.addEventListener("onSuccess",function(data){ let res = libly.$U.evalJson(data.responseText); liberator.echo( +
#ReadItLater Your List
); for (let key in res.list){ liberator.echo(
{res.list[key].title}
); } }); req.addEventListener("onFailure",function(data){ liberator.echoerr(data.statusText); liberator.echoerr(data.responseText); }); req.post(); }, // }}} add : function(args){ // {{{ let manager = Components.classes["@mozilla.org/login-manager;1"].getService(Components.interfaces.nsILoginManager); let logins = manager.findLogins({},"http://readitlaterlist.com","",null); let req = new libly.Request( "https://readitlaterlist.com/v2/add" , // url null, // headers { // options asynchronous:true, postBody:getParameterMap( { apikey : this.api_key, username : encodeURIComponent(logins[0].username), password : encodeURIComponent(logins[0].password), url : encodeURIComponent((args["url"]) ? (args["url"]) : buffer.URL), title : encodeURIComponent((args["title"]) ? args["title"] : buffer.title), } ) } ); req.addEventListener("onSuccess",function(data){ liberator.echo("[ReadItLater] OK.") }); req.addEventListener("onFailure",function(data){ liberator.echoerr(data.statusText); liberator.echoerr(data.responseText); }); req.post(); }, // }}} stats : function(){ // {{{ let manager = Components.classes["@mozilla.org/login-manager;1"].getService(Components.interfaces.nsILoginManager); let logins = manager.findLogins({},"http://readitlaterlist.com","",null); let req = new libly.Request( "https://readitlaterlist.com/v2/stats" , // url null, // headers { // options asynchronous:true, postBody:getParameterMap( { apikey : this.api_key, username : encodeURIComponent(logins[0].username), password : encodeURIComponent(logins[0].password), format : "json", } ) } ); req.addEventListener("onSuccess",function(data){ let res = libly.$U.evalJson(data.responseText); liberator.echo( +
#ReadItLater Stats
+
since : {unixtimeToDate(res.user_since)}
list : {res.count_list}
unread : {res.count_unread}
read : {res.count_read}
); }); req.addEventListener("onFailure",function(data){ liberator.echoerr(data.statusText); liberator.echoerr(data.responseText); }); req.post(); }, // }}} apiTest : function(){ // {{{ let req = new libly.Request( "https://readitlaterlist.com/v2/api" , // url null, // headers { // options asynchronous:true, postBody:getParameterMap( { apikey : this.api_key, } ) } ); req.addEventListener("onSuccess",function(data){ liberator.echo(
X-Limit-User-Limit : {data.transport.getResponseHeader("X-Limit-User-Limit")}
X-Limit-User-Remaining : {data.transport.getResponseHeader("X-Limit-User-Remaining")}
X-Limit-User-Reset : {data.transport.getResponseHeader("X-Limit-User-Reset")}
X-Limit-Key-Limit : {data.transport.getResponseHeader("X-Limit-Key-Limit")}
X-Limit-Key-Remaining : {data.transport.getResponseHeader("X-Limit-Key-Remaining")}
X-Limit-Key-Reset : {data.transport.getResponseHeader("X-Limit-Key-Reset")}
); }); req.addEventListener("onFailure",function(data){ liberator.echoerr(data.statusText); liberator.echoerr(data.responseText); }); req.post(); }, // }}} } function unixtimeToDate(ut) { var t = new Date( ut * 1000 ); t.setTime( t.getTime() + (60*60*1000 * 9) ); // +9は日本のタイムゾーン return t; } function getParameterMap(parameters){ let map = ""; for (let key in parameters){ if (map) map += "&"; map += key + "=" + parameters[key]; } return map } // for debug function e(v,c){ if(c) util.copyToClipboard(v); liberator.log(v,-1) }