media/bikeradar.lua: Relicense under AGPLv3+
[libquvi-scripts.git] / share / media / sapo.lua
blob78feac291964731c95c7b62629f830e0a7d395e1
1 -- libquvi-scripts
2 -- Copyright (C) 2010-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 SAPO = {} -- Utility functions unique to to this script.
23 -- Identify the media script.
24 function ident(qargs)
25 return {
26 can_parse_url = SAPO.can_parse_url(qargs),
27 domains = table.concat({'videos.sapo.pt'}, ',')
29 end
31 -- Parse the media properties.
32 function parse(qargs)
34 -- The thumbnail URL, or the duration, are not in the oembed data.
35 local p = quvi.http.fetch(qargs.input_url).data
37 qargs.thumb_url = p:match('"og:image" content="(.-)"') or ''
39 local d = p:match('(%d+%:%d+%:%d+)') or ''
40 local T = require 'quvi/time'
41 qargs.duration_ms = T.timecode_str_to_s(d) * 1000
43 local t = {'http://videos.sapo.pt/oembed?url=', qargs.input_url}
44 local d = quvi.http.fetch(table.concat(t,'')).data
46 local J = require 'json'
47 local j = J.decode(d)
49 qargs.id = qargs.input_url:match('/(%w+)$') or ''
50 qargs.title = j['title'] or ''
52 qargs.streams = SAPO.iter_streams(j)
54 return qargs
55 end
58 -- Utility functions
61 function SAPO.can_parse_url(qargs)
62 local U = require 'socket.url'
63 local t = U.parse(qargs.input_url)
64 if t and t.scheme and t.scheme:lower():match('^http$')
65 and t.host and t.host:lower():match('^videos%.sapo%.pt$')
66 and t.path and t.path:lower():match('^/%w+$')
67 then
68 return true
69 else
70 return false
71 end
72 end
74 function SAPO.iter_streams(j)
75 local m = j['html'] or error('no match: html')
76 local u = m:match('file=(.-)&') or error('no match: media stream URL')
78 local S = require 'quvi/stream'
79 local s = S.stream_new(u)
81 s.video.height = tonumber(j['height'] or 0)
82 s.video.width = tonumber(j['width'] or 0)
84 return {s}
85 end
87 -- vim: set ts=2 sw=2 tw=72 expandtab: