root/lang/javascript/vimperator-plugins/branches/2.2/retweet.js

Revision 35490, 3.3 kB (checked in by anekos, 11 months ago)

XPath の修正&コメントを付加できるようにした

Line 
1// PLUGIN_INFO//{{{
2var PLUGIN_INFO =
3<VimperatorPlugin>
4  <name>retweet</name>
5  <description>ReTweet This Page.</description>
6  <description lang="ja">開いているTweetをReTweetします。</description>
7  <author mail="from.kyushu.island@gmail.com" homepage="http://iddy.jp/profile/from_kyushu">from_kyushu</author>
8  <version>0.3</version>
9  <license>GPL</license>
10  <minVersion>1.2</minVersion>
11  <maxVersion>2.1</maxVersion>
12  <updateURL>http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk/retweet.js</updateURL>
13  <require type="plugin">_libly.js</require>
14  <detail><![CDATA[
15
16== Command ==
17Usage:
18  :rtt
19    ReTweet This Post.
20
21  ]]></detail>
22</VimperatorPlugin>;
23//}}}
24//
25(
26  function()
27  {
28    var password;
29    var username;
30    var passwordManager = Cc["@mozilla.org/login-manager;1"].getService(Ci.nsILoginManager);
31    var $U = liberator.plugins.libly.$U;
32
33    function getBody()
34    {
35      var body = $U.getFirstNodeFromXPath("//span[@class='entry-content']").innerHTML;
36      //return body.replace(/<[^>]*>/g, "");
37      var tags = body.match(/<[^>]*>/g);
38      for(var tag in tags)
39      {
40        body = body.replace(tags[tag],"");
41      }
42      return body;
43    }
44
45    function getUserName()
46    {
47      return $U.getFirstNodeFromXPath('//a[contains(concat(" ",normalize-space(@class)," "),"screen-name")]').innerHTML;
48    }
49
50    function getShortenUrl(longUrl)
51    {
52      var xhr = new XMLHttpRequest();
53      var req = "http://bit.ly/api?url=" + encodeURIComponent(longUrl);
54      xhr.open('GET',req, false);
55      xhr.send(null);
56      if(xhr.status != 200)
57      {
58        return longUrl;
59      }
60      return xhr.responseText;
61    }
62
63    function sendTwitter(url,name,body,comment)
64    {
65      var xhr = new XMLHttpRequest();
66      var statusText = (comment ? comment + " " : "") + "RT @" + name + " [" + url +"]: " + body;
67      return liberator.echo(statusText);
68      xhr.open("POST", "https://twitter.com/statuses/update.json", false, username, password);
69      xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
70      xhr.send("status=" + encodeURIComponent(statusText) + "&source=Vimperator");
71
72      liberator.echo("[RT] Your post was sent.");
73    }
74
75    commands.addUserCommand(
76      ['retweet[This]','rtt'],
77      'ReTweet This.',
78      function(args)
79      {
80        try
81        {
82          var logins = passwordManager.findLogins({}, "http://twitter.com","https://twitter.com",null);
83          var body = getBody();
84          var name = getUserName();
85          var url = getShortenUrl(buffer.URL);
86          if(logins.length)
87          {
88            username = logins[0].username;
89            password = logins[0].password;
90            sendTwitter(url,name,body,args.literalArg);
91          }
92          else if(liberator.globalVariables.twitter_username && liberator.globalVariables.twitter_password)
93          {
94            username = liberator.globalVariables.twitter_username;
95            password = liberator.globalVariables.twitter_password;
96            sendTwitter(url,name,body,args.literalArg);
97          }
98          else
99          {
100            throw "Accont not found";
101          }
102        }
103        catch(e)
104        {
105          liberator.echoerr(e);
106        }
107      },
108      {
109        literal: 0
110      },
111      true
112    );
113  }
114)();
Note: See TracBrowser for help on using the browser.