media/guardian.lua: Rewrite ident function
[libquvi-scripts.git] / share / media / guardian.lua
blobebc766cd6afa3d1ba7e70fede24e4f2bf412ac81
1 -- libquvi-scripts
2 -- Copyright (C) 2011,2013 Toni Gundogdu <legatvs@gmail.com>
3 --
4 -- This file is part of libquvi-scripts <http://quvi.sourceforge.net/>.
5 --
6 -- This program is free software: you can redistribute it and/or
7 -- modify it under the terms of the GNU Affero General Public
8 -- License as published by the Free Software Foundation, either
9 -- version 3 of the License, or (at your option) any later version.
11 -- This program is distributed in the hope that it will be useful,
12 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
13 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 -- GNU Affero General Public License for more details.
16 -- You should have received a copy of the GNU Affero General
17 -- Public License along with this program. If not, see
18 -- <http://www.gnu.org/licenses/>.
21 local Guardian = {} -- Utility functions unique to this script
23 -- Identify the media script.
24 function ident(qargs)
25 return {
26 can_parse_url = Guardian.can_parse_url(qargs),
27 domains = table.concat({'guardian.co.uk'}, ',')
29 end
31 -- Query available formats.
32 function query_formats(self)
33 self.formats = 'default'
34 return self
35 end
37 -- Parse media URL.
38 function parse(self)
39 self.host_id = "guardian"
41 local p = quvi.fetch(self.page_url)
43 self.title = p:match('"og:title" content="(.-)"')
44 or error('no match: media title')
46 self.id = p:match('containerID%s+=%s+["\'](.-)["\']')
47 or p:match('audioID%s+=%s+["\'](.-)["\']')
48 or ''
50 self.id = self.id:match('(%d+)') or error('no match: media ID')
52 self.duration = tonumber(p:match('duration%:%s+"?(%d+)"?') or 0) * 1000
54 self.thumbnail_url = p:match('"thumbnail" content="(.-)"')
55 or p:match('"og:image" content="(.-)"') or ''
57 self.url = {p:match('file:%s+"(.-)"')
58 or error('no match: media stream URL')}
60 return self
61 end
64 -- Utility functions
67 function Guardian.can_parse_url(qargs)
68 local U = require 'socket.url'
69 local t = U.parse(qargs.input_url)
70 if t and t.scheme and t.scheme:lower():match('^https?$')
71 and t.host and t.host:lower():match('guardian%.co%.uk$')
72 and t.path and (t.path:lower():match('/video/')
73 or t.path:lower():match('/audio/'))
74 then
75 return true
76 else
77 return false
78 end
79 end
81 -- vim: set ts=4 sw=4 tw=72 expandtab: