examples/shortenurl.lua
author Myhailo Danylenko <isbear@ukrpost.net>
Tue, 07 Aug 2012 02:46:54 +0300
changeset 126 5f0025da31e6
parent 125 3e2421384d7a
child 127 9157566033e8
permissions -rw-r--r--
Remove stray debug message
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    24
local curlcommand = "curl -s https://www.googleapis.com/urlshortener/v1/url -H 'Content-type: application/json' -d %s"
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
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    34
		local jid = main.current_buddy ()
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    35
		local replystring = ''
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    36
		main.bgread ( ( curlcommand ):format ( shell_escape ( json.encode ( { longUrl = args }, encodeoptions ) ) ),
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    37
			function ( data )
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    38
				if not data then
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    39
					-- eof
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    40
					local reply = json.decode ( replystring )
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    41
					if reply and reply.id then
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    42
						if jid and main.yesno ( main.option ( 'lua_shorten_post_url' ) ) then
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    43
							main.run ( ('say_to -q %s %s'):format ( jid, reply.id ) )
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    44
						else
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    45
							print ( ('Shortened url: %s'):format ( reply.id ) )
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    46
						end
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    47
					else
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    48
						-- XXX extract message from json?
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    49
						print ( ('Failed to shorten url: %s'):format ( replystring ) )
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    50
					end
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    51
					return false
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    52
				else
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    53
					replystring = replystring .. data
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    54
					return true
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    55
				end
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
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    58
	end )
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    59
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    60
-- vim: se ts=4 sw=4: --