From 2f9d85352c89506c293461991b87d5e6925c4bc9 Mon Sep 17 00:00:00 2001 From: voqn Date: Sun, 4 Jan 2009 07:50:00 +0000 Subject: Add an echo message after twitter post. git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@27879 d0d07461-0603-4401-acd4-de1884942a52 --- twitter.js | 359 +++++++++++++++++++++++++++++++------------------------------ 1 file changed, 180 insertions(+), 179 deletions(-) (limited to 'twitter.js') diff --git a/twitter.js b/twitter.js index 1594ec3..c3e6f3a 100644 --- a/twitter.js +++ b/twitter.js @@ -1,179 +1,180 @@ -// Vimperator plugin: "Update Twitter" -// Last Change: 11-Nov-2008. Jan 2008 -// License: Creative Commons -// Maintainer: Trapezoid - http://unsigned.g.hatena.ne.jp/Trapezoid -// -// The script allows you to update Twitter status from Vimperator 0.6.*. -// -// Commands: -// :twitter some thing text -// post "some thing text" to twitter. -// :twitter! someone -// show someone's statuses. -// :twitter!? someword -// show search result of 'someword' from "http://twitter.1x1.jp". -// :twitter!@ -// show replies. -// :twitter!+ someone -// fav someone's last status.. -// :twitter!- someone -// un-fav someone's last status.. - -(function(){ - var passwordManager = Cc["@mozilla.org/login-manager;1"].getService(Ci.nsILoginManager); - var evalFunc = window.eval; - try { - var sandbox = new Components.utils.Sandbox(window); - if (Components.utils.evalInSandbox("true", sandbox) === true) { - evalFunc = function(text) { - return Components.utils.evalInSandbox(text, sandbox); - } - } - } catch(e) { liberator.log('warning: twitter.js is working with unsafe sandbox.'); } - - function sprintf(format){ - var i = 1, re = /%s/, result = "" + format; - while (re.test(result) && i < arguments.length) result = result.replace(re, arguments[i++]); - return result; - } - function sayTwitter(username, password, stat){ - var xhr = new XMLHttpRequest(); - xhr.open("POST", "http://twitter.com/statuses/update.json", false, username, password); - xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); - xhr.send("status=" + encodeURIComponent(stat)); - } - function favTwitter(username, password, user){ - var xhr = new XMLHttpRequest(); - xhr.open("POST", "http://twitter.com/statuses/user_timeline/" + user + ".json?count=1", false, username, password); - xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); - xhr.send(null); - xhr.open("POST", "http://twitter.com/favourings/create/" + window.eval(xhr.responseText)[0].id, false, username, password); - xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); - xhr.send(null); - } - function unfavTwitter(username, password, user){ - var xhr = new XMLHttpRequest(); - xhr.open("POST", "http://twitter.com/statuses/user_timeline/" + user + ".json?count=1", false, username, password); - xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); - xhr.send(null); - xhr.open("POST", "http://twitter.com/favourings/destroy/" + window.eval(xhr.responseText)[0].id, false, username, password); - xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); - xhr.send(null); - } - function showTwitterReply(username, password){ - var xhr = new XMLHttpRequest(); - xhr.open("POST", "http://twitter.com/statuses/replies.json", false, username, password); - xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); - xhr.send(null); - var statuses = evalFunc(xhr.responseText); - - var html = .toSource() - .replace(/(?:\r?\n|\r)[ \t]*/g, " ") + - statuses.map(function(status) - <> - {status.user.screen_name} - {status.user.name}‬ - .toSource() - .replace(/(?:\r?\n|\r)[ \t]*/g, " ") + - sprintf(': %s‬', status.text)) - .join("
"); - - //liberator.log(html); - liberator.echo(html, true); - } - function showFollowersStatus(username, password, target){ - var xhr = new XMLHttpRequest(); - var endPoint = target ? "http://twitter.com/statuses/user_timeline/" + target + ".json" - : "http://twitter.com/statuses/friends_timeline.json"; - xhr.open("POST", endPoint, false, username, password); - // for debug - //xhr.open("POST", "http://twitter.com/statuses/user_timeline/otsune.json", false, username, password); - xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); - xhr.send(null); - var statuses = evalFunc(xhr.responseText) || []; - - var html = .toSource() - .replace(/(?:\r?\n|\r)[ \t]*/g, " ") + - statuses.map(function(status) - <> - {status.user.screen_name} - {status.user.name}‬ - : {status.text} - .toSource() - .replace(/(?:\r?\n|\r)[ \t]*/g, " ")) - .join("
"); - - //liberator.log(html); - liberator.echo(html, true); - } - function showTwitterSearchResult(word){ - var xhr = new XMLHttpRequest(); - xhr.open("GET", "http://twitter.1x1.jp/rss/search/?keyword=" + encodeURIComponent(word) + "&text=1", false); - xhr.send(null); - var items = xhr.responseXML.getElementsByTagName('item'); - var html = .toSource() - .replace(/(?:\r?\n|\r)[ \t]*/g, " "); - for (var n = 0; n < items.length; n++) - html += <> - {items[n].getElementsByTagName('title')[0].textContent}‬ - : {items[n].getElementsByTagName('description')[0].textContent}‬ - -
- .toSource() - .replace(/(?:\r?\n|\r)[ \t]*/g, " "); - liberator.echo(html, true); - } - liberator.modules.commands.addUserCommand(["twitter"], "Change Twitter status", - function(arg, special){ - var password; - var username; - try { - var logins = passwordManager.findLogins({}, "http://twitter.com", "https://twitter.com", null); - if (logins.length) - [username, password] = [logins[0].username, logins[0].password]; - else - throw "Twitter: account not found"; - } - catch (ex){ - liberator.echoerr(ex); - } - - arg = arg.string.replace(/%URL%/g, liberator.modules.buffer.URL) - .replace(/%TITLE%/g, liberator.modules.buffer.title); - - if (special && arg.match(/^\?\s*(.*)/)) - showTwitterSearchResult(RegExp.$1) - else - if (special && arg.match(/^\+\s*(.*)/)) - favTwitter(username, password, RegExp.$1) - else - if (special && arg.match(/^\-\s*(.*)/)) - unfavTwitter(username, password, RegExp.$1) - else - if (special && arg.match(/^@/)) - showTwitterReply(username, password) - else - if (special || arg.length == 0) - showFollowersStatus(username, password, arg) - else - sayTwitter(username, password, arg); - },{ - bang: true - } - ); -})(); -// vim:sw=4 ts=4 et: +// Vimperator plugin: "Update Twitter" +// Last Change: 11-Nov-2008. Jan 2008 +// License: Creative Commons +// Maintainer: Trapezoid - http://unsigned.g.hatena.ne.jp/Trapezoid +// +// The script allows you to update Twitter status from Vimperator 0.6.*. +// +// Commands: +// :twitter some thing text +// post "some thing text" to twitter. +// :twitter! someone +// show someone's statuses. +// :twitter!? someword +// show search result of 'someword' from "http://twitter.1x1.jp". +// :twitter!@ +// show replies. +// :twitter!+ someone +// fav someone's last status.. +// :twitter!- someone +// un-fav someone's last status.. + +(function(){ + var passwordManager = Cc["@mozilla.org/login-manager;1"].getService(Ci.nsILoginManager); + var evalFunc = window.eval; + try { + var sandbox = new Components.utils.Sandbox(window); + if (Components.utils.evalInSandbox("true", sandbox) === true) { + evalFunc = function(text) { + return Components.utils.evalInSandbox(text, sandbox); + } + } + } catch(e) { liberator.log('warning: twitter.js is working with unsafe sandbox.'); } + + function sprintf(format){ + var i = 1, re = /%s/, result = "" + format; + while (re.test(result) && i < arguments.length) result = result.replace(re, arguments[i++]); + return result; + } + function sayTwitter(username, password, stat){ + var xhr = new XMLHttpRequest(); + xhr.open("POST", "http://twitter.com/statuses/update.json", false, username, password); + xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); + xhr.send("status=" + encodeURIComponent(stat) + "&source=Vimperator"); + liberator.echo("[Twitter] Your post " + '"' + stat + '" (' + stat.length + " charactors) was sent. " ); + } + function favTwitter(username, password, user){ + var xhr = new XMLHttpRequest(); + xhr.open("POST", "http://twitter.com/statuses/user_timeline/" + user + ".json?count=1", false, username, password); + xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); + xhr.send(null); + xhr.open("POST", "http://twitter.com/favourings/create/" + window.eval(xhr.responseText)[0].id, false, username, password); + xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); + xhr.send(null); + } + function unfavTwitter(username, password, user){ + var xhr = new XMLHttpRequest(); + xhr.open("POST", "http://twitter.com/statuses/user_timeline/" + user + ".json?count=1", false, username, password); + xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); + xhr.send(null); + xhr.open("POST", "http://twitter.com/favourings/destroy/" + window.eval(xhr.responseText)[0].id, false, username, password); + xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); + xhr.send(null); + } + function showTwitterReply(username, password){ + var xhr = new XMLHttpRequest(); + xhr.open("POST", "http://twitter.com/statuses/replies.json", false, username, password); + xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); + xhr.send(null); + var statuses = evalFunc(xhr.responseText); + + var html = .toSource() + .replace(/(?:\r?\n|\r)[ \t]*/g, " ") + + statuses.map(function(status) + <> + + {status.user.name}‬ + .toSource() + .replace(/(?:\r?\n|\r)[ \t]*/g, " ") + + sprintf(': ', status.text)) + .join("
"); + + //liberator.log(html); + liberator.echo(html, true); + } + function showFollowersStatus(username, password, target){ + var xhr = new XMLHttpRequest(); + var endPoint = target ? "http://twitter.com/statuses/user_timeline/" + target + ".json" + : "http://twitter.com/statuses/friends_timeline.json"; + xhr.open("POST", endPoint, false, username, password); + // for debug + //xhr.open("POST", "http://twitter.com/statuses/user_timeline/otsune.json", false, username, password); + xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); + xhr.send(null); + var statuses = evalFunc(xhr.responseText) || []; + + var html = .toSource() + .replace(/(?:\r?\n|\r)[ \t]*/g, " ") + + statuses.map(function(status) + <> + + {status.user.name}‬ + : + .toSource() + .replace(/(?:\r?\n|\r)[ \t]*/g, " ")) + .join("
"); + + //liberator.log(html); + liberator.echo(html, true); + } + function showTwitterSearchResult(word){ + var xhr = new XMLHttpRequest(); + xhr.open("GET", "http://twitter.1x1.jp/rss/search/?keyword=" + encodeURIComponent(word) + "&text=1", false); + xhr.send(null); + var items = xhr.responseXML.getElementsByTagName('item'); + var html = .toSource() + .replace(/(?:\r?\n|\r)[ \t]*/g, " "); + for (var n = 0; n < items.length; n++) + html += <> + {items[n].getElementsByTagName('title')[0].textContent}‬ + : + +
+ .toSource() + .replace(/(?:\r?\n|\r)[ \t]*/g, " "); + liberator.echo(html, true); + } + liberator.modules.commands.addUserCommand(["twitter"], "Change Twitter status", + function(arg, special){ + var password; + var username; + try { + var logins = passwordManager.findLogins({}, "http://twitter.com", "https://twitter.com", null); + if (logins.length) + [username, password] = [logins[0].username, logins[0].password]; + else + throw "Twitter: account not found"; + } + catch (ex){ + liberator.echoerr(ex); + } + + arg = arg.string.replace(/%URL%/g, liberator.modules.buffer.URL) + .replace(/%TITLE%/g, liberator.modules.buffer.title); + + if (special && arg.match(/^\?\s*(.*)/)) + showTwitterSearchResult(RegExp.$1) + else + if (special && arg.match(/^\+\s*(.*)/)) + favTwitter(username, password, RegExp.$1) + else + if (special && arg.match(/^\-\s*(.*)/)) + unfavTwitter(username, password, RegExp.$1) + else + if (special && arg.match(/^@/)) + showTwitterReply(username, password) + else + if (special || arg.length == 0) + showFollowersStatus(username, password, arg) + else + sayTwitter(username, password, arg); + },{ + bang: true + } + ); +})(); +// vim:sw=4 ts=4 et: -- cgit v1.2.3