examples/shortenurl.lua
author Myhailo Danylenko <isbear@ukrpost.net>
Tue, 07 Aug 2012 02:43:46 +0300
changeset 125 3e2421384d7a
child 126 5f0025da31e6
permissions -rw-r--r--
Examples updates (shortenurl) * some updates to marking (freezes now) * added defunct readonly * added shortenulr
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
					print ( 'lua reply: ' .. replystring )
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    41
					local reply = json.decode ( replystring )
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    42
					if reply and reply.id then
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    43
						if jid and main.yesno ( main.option ( 'lua_shorten_post_url' ) ) then
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    44
							main.run ( ('say_to -q %s %s'):format ( jid, reply.id ) )
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    45
						else
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    46
							print ( ('Shortened url: %s'):format ( reply.id ) )
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    47
						end
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    48
					else
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    49
						-- XXX extract message from json?
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    50
						print ( ('Failed to shorten url: %s'):format ( replystring ) )
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    51
					end
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    52
					return false
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    53
				else
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    54
					replystring = replystring .. data
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    55
					return true
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
			end )
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    58
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    59
	end )
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    60
3e2421384d7a Examples updates (shortenurl)
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    61
-- vim: se ts=4 sw=4: --