From d6b22229b9ffabb1c5cde9cdfb98c8f8cdb24e09 Mon Sep 17 00:00:00 2001 From: ninjatottori Date: Wed, 13 Apr 2011 11:03:17 +0900 Subject: readitlater.js --- readitlater.js | 376 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 376 insertions(+) create mode 100644 readitlater.js (limited to 'readitlater.js') diff --git a/readitlater.js b/readitlater.js new file mode 100644 index 0000000..4a0715c --- /dev/null +++ b/readitlater.js @@ -0,0 +1,376 @@ +/* + * readitlater.js + * read it later apiをたたく + * API Reffernce : http://readitlaterlist.com/api/docs/ + * +*/ + +let PLUGIN_INFO = + + readitlater + read it later の apiをたたく + 0.0.1 + 3.0 + 3.0 + ninja.tottori + https://github.com/vimpr/vimperator-plugins/raw/master/readitlater.js + 数字を入れるとその数だけリストを取得します。 +  :ril get num 3 + とか + + readed => 指定すると既読のものだけ取得します。 + :ril get readed + みたいな + + tags => 指定するとtagがついているものだけ取得します。 + + :ril stats + since, list, unread, readed の情報がとれます + + + ]]> +; + + + + +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], + [["readed","-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["readed"]) ? "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}
+ readed : {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) +} + + -- cgit v1.2.3