author | Myhailo Danylenko <isbear@ukrpost.net> |
Sat, 13 Oct 2012 20:57:03 +0300 | |
changeset 137 | 4fda19d05965 |
parent 136 | 2b04fad2f61a |
child 141 | 1e36a08d7734 |
permissions | -rw-r--r-- |
125
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
1 |
|
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
2 |
-- SHORTENURL |
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
3 |
|
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
4 |
-- uses: |
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
5 |
-- * goo.gl (online service) |
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
6 |
-- * curl (program) |
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
7 |
-- * lua-json (https://github.com/harningt/luajson/) |
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
8 |
-- * shell_escape (mcabberrc.lua) |
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
9 |
-- * option lua_shorten_post_url |
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
10 |
-- TODO: |
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
11 |
-- * other backends |
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
12 |
-- * detect curl/wget |
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
13 |
-- * ensure curl will not mess screen up |
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
14 |
-- * -s switch to send url automatically |
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
15 |
|
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
16 |
local json = require 'json' |
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
17 |
|
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
18 |
local encodeoptions = { |
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
19 |
strings = { |
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
20 |
encodeSet = '\\"%z\1-\031', -- do not escape /, google does not understand that |
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
21 |
} |
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
22 |
} |
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
23 |
|
127
9157566033e8
Support for goo.gl api key
Myhailo Danylenko <isbear@ukrpost.net>
parents:
126
diff
changeset
|
24 |
local curlcommand = "curl -s https://www.googleapis.com/urlshortener/v1/url%s -H 'Content-type: application/json' -d %s" |
125
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
25 |
|
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
26 |
main.command ( 'shorten', |
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
27 |
function ( args ) |
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
28 |
|
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
29 |
if ( not args ) or not args:match ( '%w' ) then |
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
30 |
print ( 'shorten: You must specify url' ) |
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
31 |
return |
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
32 |
end |
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
33 |
|
127
9157566033e8
Support for goo.gl api key
Myhailo Danylenko <isbear@ukrpost.net>
parents:
126
diff
changeset
|
34 |
local jid = main.current_buddy () |
9157566033e8
Support for goo.gl api key
Myhailo Danylenko <isbear@ukrpost.net>
parents:
126
diff
changeset
|
35 |
|
9157566033e8
Support for goo.gl api key
Myhailo Danylenko <isbear@ukrpost.net>
parents:
126
diff
changeset
|
36 |
local querystring = '' |
9157566033e8
Support for goo.gl api key
Myhailo Danylenko <isbear@ukrpost.net>
parents:
126
diff
changeset
|
37 |
local key = main.option ( 'lua_shorten_googl_key' ) |
9157566033e8
Support for goo.gl api key
Myhailo Danylenko <isbear@ukrpost.net>
parents:
126
diff
changeset
|
38 |
if key and key:match ( '%w' ) then |
9157566033e8
Support for goo.gl api key
Myhailo Danylenko <isbear@ukrpost.net>
parents:
126
diff
changeset
|
39 |
querystring = '?key=' .. key |
9157566033e8
Support for goo.gl api key
Myhailo Danylenko <isbear@ukrpost.net>
parents:
126
diff
changeset
|
40 |
end |
9157566033e8
Support for goo.gl api key
Myhailo Danylenko <isbear@ukrpost.net>
parents:
126
diff
changeset
|
41 |
|
125
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
42 |
local replystring = '' |
127
9157566033e8
Support for goo.gl api key
Myhailo Danylenko <isbear@ukrpost.net>
parents:
126
diff
changeset
|
43 |
|
9157566033e8
Support for goo.gl api key
Myhailo Danylenko <isbear@ukrpost.net>
parents:
126
diff
changeset
|
44 |
main.bgread ( ( curlcommand ):format ( querystring, shell_escape ( json.encode ( { longUrl = args }, encodeoptions ) ) ), |
125
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
45 |
function ( data ) |
127
9157566033e8
Support for goo.gl api key
Myhailo Danylenko <isbear@ukrpost.net>
parents:
126
diff
changeset
|
46 |
if data then |
9157566033e8
Support for goo.gl api key
Myhailo Danylenko <isbear@ukrpost.net>
parents:
126
diff
changeset
|
47 |
replystring = replystring .. data |
9157566033e8
Support for goo.gl api key
Myhailo Danylenko <isbear@ukrpost.net>
parents:
126
diff
changeset
|
48 |
return true |
9157566033e8
Support for goo.gl api key
Myhailo Danylenko <isbear@ukrpost.net>
parents:
126
diff
changeset
|
49 |
else -- eof |
125
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
50 |
local reply = json.decode ( replystring ) |
136
2b04fad2f61a
[examples] Fix non-table response handling in shortener
Myhailo Danylenko <isbear@ukrpost.net>
parents:
127
diff
changeset
|
51 |
if ( type ( reply ) == 'table' ) and reply.id then |
125
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
52 |
if jid and main.yesno ( main.option ( 'lua_shorten_post_url' ) ) then |
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
53 |
main.run ( ('say_to -q %s %s'):format ( jid, reply.id ) ) |
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
54 |
else |
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
55 |
print ( ('Shortened url: %s'):format ( reply.id ) ) |
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
56 |
end |
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
57 |
else |
136
2b04fad2f61a
[examples] Fix non-table response handling in shortener
Myhailo Danylenko <isbear@ukrpost.net>
parents:
127
diff
changeset
|
58 |
if type ( reply ) == 'table' and ( type ( reply.error ) == 'table' ) then |
127
9157566033e8
Support for goo.gl api key
Myhailo Danylenko <isbear@ukrpost.net>
parents:
126
diff
changeset
|
59 |
print ( ('Failed to shorten url: %u %s'):format ( reply.error.code, reply.error.message ) ) |
9157566033e8
Support for goo.gl api key
Myhailo Danylenko <isbear@ukrpost.net>
parents:
126
diff
changeset
|
60 |
else |
9157566033e8
Support for goo.gl api key
Myhailo Danylenko <isbear@ukrpost.net>
parents:
126
diff
changeset
|
61 |
print ( ('Failed to shorten url: Unknown response:\n%s'):format ( replystring ) ) |
9157566033e8
Support for goo.gl api key
Myhailo Danylenko <isbear@ukrpost.net>
parents:
126
diff
changeset
|
62 |
end |
125
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
63 |
end |
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
64 |
return false |
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
65 |
end |
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
66 |
end ) |
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
67 |
|
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
68 |
end ) |
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
69 |
|
3e2421384d7a
Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff
changeset
|
70 |
-- vim: se ts=4 sw=4: -- |