1 local socket
= require("socket")
2 local http
= require("socket.http")
4 if not arg
or not arg
[1] or not arg
[2] then
5 print("luasocket cddb.lua <category> <disc-id> [<server>]")
9 local server
= arg
[3] or "http://freedb.freedb.org/~cddb/cddb.cgi"
12 local lines
= string.gfind(body
, "(.-)\r\n")
13 local status
= lines()
14 local code
, message
= socket
.skip(2, string.find(status
, "(%d%d%d) (.*)"))
15 if tonumber(code
) ~= 210 then
16 return nil, code
, message
20 local c
= string.sub(l
, 1, 1)
21 if c
~= '#' and c
~= '.' then
22 local key
, value
= socket
.skip(2, string.find(l
, "(.-)=(.*)"))
23 value
= string.gsub(value
, "\\n", "\n")
24 value
= string.gsub(value
, "\\\\", "\\")
25 value
= string.gsub(value
, "\\t", "\t")
29 return data
, code
, message
32 local host
= socket
.dns
.gethostname()
33 local query
= "%s?cmd=cddb+read+%s+%s&hello=LuaSocket+%s+LuaSocket+2.0&proto=6"
34 local url
= string.format(query
, server
, arg
[1], arg
[2], host
)
35 local body
, headers
, code
= http
.request(url
)
38 local data
, code
, error = parse(body
)
42 for i
,v
in pairs(data
) do
43 io
.write(i
, ': ', v
, '\n')