aboutsummaryrefslogtreecommitdiffstats
path: root/notifier/subject_twitter_scraper.js
blob: f6de4ef194a8b56556a951c8d4d542d032c9157a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
/*** BEGIN LICENSE BLOCK {{{
    Copyright (c) 2008 suVene<suvene@zeromemory.info>

    distributable under the terms of an MIT-style license.
    http://www.opensource.jp/licenses/mit-license.html
}}}  END LICENSE BLOCK ***/
// PLUGIN_INFO//{{{
var PLUGIN_INFO =
<VimperatorPlugin>
    <name>{NAME}</name>
    <description>Twitter change notice(need login).</description>
    <description lang="ja">Twitter変更通知(ログイン済みであること)</description>
    <author mail="suvene@zeromemory.info" homepage="http://d.zeromemory.info/">suVene</author>
    <version>0.1.1</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_twitter_scraper.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_twitter_scraper');

var URL = 'http://twitter.com/home';

notifier.subject.register(notifier.SubjectHttp, {
    interval: 60,
    options: {
        url: URL,
        headers: null,
        extra: {}
    },
    parse: function(res) {
        // if (this.count == 0) return []; // for debug
        return res.getHTMLDocument('id("timeline")/li[@class=contains(concat(" ", @class, " "), " hentry ")]');
    },
    diff: function(cache, parsed) {
        var self = this;
        return parsed.filter(function(element)
                !cache.some(function(c) self.getContent(c) == self.getContent(element)));
    },
    getContent: function(element)
        $U.getFirstNodeFromXPath('descendant::span[@class="entry-content"]', element).textContent,
    buildMessages: function(diff)
        diff.map($U.bind(this, function(d)
            new notifier.Message('Twitter', $U.xmlSerialize(d),
                                 $U.getFirstNodeFromXPath('descendant::a[@class="entry-date"]', d))))
});

})();
// vim: set fdm=marker sw=4 ts=4 sts=0 et:

">anekos</author> <license>new BSD License (Please read the source code comments of this plugin)</license> <license lang="ja">修正BSDライセンス (ソースコードのコメントを参照してください)</license> <minVersion>2.0pre</minVersion> <maxVersion>2.0pre</maxVersion> <detail><![CDATA[ == Usage == :kawase[!] <VALUE> [<SOURCE> [<TARGET>]]: :kawase[!] <VALUE> <SOURCE1> <SOURCE2> ... <TARGET>: Convert <SOURCE> to <TARGET>. When used with "!", copy result to clipboard. === Example === :kawase 30000 JPY THB == Global Variables == - g:umihara_default_source - g:umihara_default_target === Example === >|| let g:umihara_default_source="USD" let g:umihara_default_target="JPY" ||< ]]></detail> <detail lang="ja"><![CDATA[ == Usage == :kawase[!] <金額> [<ソース> [<ターゲット>]]: :kawase[!] <金額> <ソース1> <ソース2> ... <ターゲット>: ソースをターゲットに換算します "!" 指定でクリップボードにコピーされます === Example === >|| :kawase 30000 JPY THB ||< == Global Variables == 引数省略時のデフォルト値を設定します - g:umihara_default_source - g:umihara_default_target === Example === >|| let g:umihara_default_source="USD" let g:umihara_default_target="JPY" ||< ]]></detail> </VimperatorPlugin>; // }}} (function () { const defaultSource = liberator.globalVariables.umihara_default_source || 'USD'; const defaultTarget = liberator.globalVariables.umihara_default_target || 'JPY'; const re = /<td nowrap>(\d+:\d+)<\/td><td>([\d,]+\.[\d,]+)<\/td><td><b>([\d,]+\.[\d,]+)<\/b><\/td><\/tr><\/table><\/div>/; const ContryCodes = [ ['USD', '\u30a2\u30e1\u30ea\u30ab\u30c9\u30eb'], ['GBP', '\u30a4\u30ae\u30ea\u30b9 \u30dd\u30f3\u30c9'], ['INR', '\u30a4\u30f3\u30c9 \u30eb\u30d4\u30fc'], ['IDR', '\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2 \u30eb\u30d4\u30a2'], ['ECS', '\u30a8\u30af\u30a2\u30c9\u30eb \u30b9\u30af\u30ec'], ['EGP', '\u30a8\u30b8\u30d7\u30c8 \u30dd\u30f3\u30c9'], ['AUD', '\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2 \u30c9\u30eb'], ['CAD', '\u30ab\u30ca\u30c0 \u30c9\u30eb'], ['KRW', '\u97d3\u56fd \u30a6\u30a9\u30f3'], ['KWD', '\u30af\u30a6\u30a7\u30fc\u30c8 \u30c7\u30a3\u30ca\u30fc\u30eb'], ['COP', '\u30b3\u30ed\u30f3\u30d3\u30a2 \u30da\u30bd'], ['SAR', '\u30b5\u30a6\u30b8 \u30ea\u30a2\u30eb'], ['SGD', '\u30b7\u30f3\u30ac\u30dd\u30fc\u30eb \u30c9\u30eb'], ['CHF', '\u30b9\u30a4\u30b9 \u30d5\u30e9\u30f3'], ['SEK', '\u30b9\u30a6\u30a7\u30fc\u30c7\u30f3 \u30af\u30ed\u30fc\u30ca'], ['THB', '\u30bf\u30a4 \u30d0\u30fc\u30c4'], ['TWD', '\u53f0\u6e7e \u30c9\u30eb'], ['CNY', '\u4e2d\u56fd \u5143'], ['CLP', '\u30c1\u30ea \u30da\u30bd'], ['DKK', '\u30c7\u30f3\u30de\u30fc\u30af \u30af\u30ed\u30fc\u30cd'], ['TRY', '\u30c8\u30eb\u30b3 \u30ea\u30e9'], ['JPY', '\u65e5\u672c \u5186'], ['NZD', '\u30cb\u30e5\u30fc\u30b8\u30fc\u30e9\u30f3\u30c9 \u30c9\u30eb'], ['NOK', '\u30ce\u30eb\u30a6\u30a7\u30fc \u30af\u30ed\u30fc\u30cd'], ['PYG', '\u30d1\u30e9\u30b0\u30a2\u30a4 \u30b0\u30a1\u30e9\u30cb'], ['PHP', '\u30d5\u30a3\u30ea\u30d4\u30f3 \u30da\u30bd'], ['BRL', '\u30d6\u30e9\u30b8\u30eb \u30ea\u30a2\u30eb'], ['VEF', '\u30d9\u30cd\u30ba\u30a8\u30e9 \u30dc\u30ea\u30d0\u30eb\u30fb\u30d5\u30a8\u30eb\u30c6'], ['PEN', '\u30da\u30eb\u30fc \u30bd\u30eb'], ['HKD', '\u9999\u6e2f \u30c9\u30eb'], ['MYR', '\u30de\u30ec\u30fc\u30b7\u30a2 \u30ea\u30f3\u30ae'], ['ZAR', '\u5357\u30a2\u30d5\u30ea\u30ab \u30e9\u30f3\u30c9'], ['MXN', '\u30e1\u30ad\u30b7\u30b3 \u30da\u30bd'], ['AED', 'UAE \u30c0\u30fc\u30cf\u30e0'], ['EUR', '\u6b27\u5dde \u30e6\u30fc\u30ed'], ['JOD', '\u30e8\u30eb\u30c0\u30f3 \u30c7\u30a3\u30ca\u30fc\u30eb'], ['RON', '\u30eb\u30fc\u30de\u30cb\u30a2 \u30ec\u30a6'], ['LBP', '\u30ec\u30d0\u30ce\u30f3 \u30dd\u30f3\u30c9'], ['RUB', '\u30ed\u30b7\u30a2\u30f3 \u30eb\u30fc\u30d6\u30eb'], ]; function echo (msg) { liberator.echo(<pre>{msg}</pre>); } let resultBuffer = ''; function kawase (value, clipboard, from, to) { [from, to] = [from || defaultSource, to || defaultTarget].map(function (it) it.toUpperCase()); if (from == '-') from = defaultSource; if (to == '-') to = defaultTarget; let url = 'http://quote.yahoo.co.jp/m5?a=' + value + '&s=' + from + '&t=' + to; var req = new XMLHttpRequest(); req.open('GET', url); req.onreadystatechange = function (aEvt) { if (req.readyState == 4 && req.status == 200) { let m = req.responseText.match(re); if (m) { let text = from + ' -> ' + to + '\n ' + from + ': ' + value + '\n ' + to + ': ' + m[3] + '\n rate: ' + m[2] + '\n time: ' + m[1]; echo(text); if (clipboard) { resultBuffer += text + '\n'; util.copyToClipboard(resultBuffer); } } else { liberator.echoerr('parse error'); } } }; req.send(null); } let extra = { argCount: '+', bang: true, completer: function (context, args) { if (args.length == 1) { // TODO - history } else { let def = args.length < 3 ? defaultSource : defaultTarget; context.title = ['Country Code', 'Country Name']; context.completions = [['-', def]].concat(ContryCodes); } } }; commands.addUserCommand( ['kawase'], 'Umihara Kawase Meow', function (args) { let as = args; resultBuffer = ''; liberator.echo('<<Results>>\n') if (as.length == 0) as.push('1'); while (as.length < 3) as.push('-'); for (let i = 1, l = as.length - 1; i < l; i++) { let [value, from, to] = [as[0], as[i], l == i ? '-' : as[l]]; liberator.log({ value: value, from: from, to: to }) value = eval(value); kawase(value, args.bang, from, to); } }, extra, true ); })(); // vim:sw=2 ts=2 et si fdm=marker: