From 952242168babec26e4c80a321ce5abc3e551eabd Mon Sep 17 00:00:00 2001 From: Benjamin Franzke Date: Tue, 14 Jan 2014 11:13:47 +0100 Subject: quvi/zdf: Support hd formats THis commits also cleans up the code a bit. --- .../libquvi-scripts/lua/website/zdfmediathek.lua | 60 +++++++++++++++++----- 1 file changed, 46 insertions(+), 14 deletions(-) diff --git a/.local/share/libquvi-scripts/lua/website/zdfmediathek.lua b/.local/share/libquvi-scripts/lua/website/zdfmediathek.lua index ca2cc28..af061fc 100644 --- a/.local/share/libquvi-scripts/lua/website/zdfmediathek.lua +++ b/.local/share/libquvi-scripts/lua/website/zdfmediathek.lua @@ -5,10 +5,9 @@ function ident(self) local r = {} r.domain = "zdf%.de" r.formats = "default|best" - r.categories = C.proto_rtmp + r.categories = C.proto_http local U = require 'quvi/util' - r.handles = U.handles(self.page_url, {r.domain}, - {"/ZDFmediathek/"}) + r.handles = U.handles(self.page_url, {r.domain}, {"/ZDFmediathek/"}) return r end @@ -26,28 +25,61 @@ function parse(self) self.id = self.page_url:match("/ZDFmediathek/#?/?beitrag/video/(%d+)") or error ("no match: media id") - local xmlwebservice_url = "http://www.zdf.de/ZDFmediathek/xmlservice/web/beitragsDetails?id=" .. self.id + local xml = { "http://www.zdf.de/", + "ZDFmediathek/xmlservice/web/beitragsDetails?id=", self.id } - local c = quvi.fetch(xmlwebservice_url, {fetch_type='config'}) - if c:match('') then - local s = c:match('(.-)[\n<]') - error( (not s) and "no match: error message" or s ) + local c = quvi.fetch(table.concat(xml), {fetch_type='config'}) + if not(c:match('ok')) then + local msg = { 'error: ', xml_get(c, 'statuscode', false), + ' - ', xml_get(c, 'debuginfo', false) } + error(table.concat(msg)) end - self.title = c:match('([^<]*)') - or error("no match: media title") + self.title = xml_get(c, 'title', false) + self.thumbnail_url = c:match(''.. + '([^<]+)') - self.thumbnail_url = c:match('([^<]*)') + local url = c:match('veryhigh%s*' .. + '(http://n?rodl%.zdf%.de/[^<]+%.mp4)') - local url = c:match('veryhigh[ \n]*(http://nrodl.zdf.de/[^<]*\.mp4)') - - if (c:match('1024')) then + if (c:match('576%s*1024')) then url = string.gsub(url, "1456k_p13v11", "2256k_p14v11") end + meta = c:match('hd%s*([^>]+%.meta)') + if meta then + url = http_mp4_from_meta(meta) or url + -- OLD code: + -- known replacements from veryhigh mp4 to hd mp4: + -- either: suffix _hd instead of _vh + --url = string.gsub(url, "_vh.mp4", "_hd.mp4") + -- or: + --url = string.gsub(url, "1596k_p13v9", "3056k_p15v9") + end + self.url = { url } return self end + +-- utlity + +-- +function http_mp4_from_meta(meta_url) + local c = quvi.fetch(meta_url, {fetch_type='config'}) + local path = c:match("mp4:(.-%.mp4)") + + return path and "http://nrodl.zdf.de/none/" .. path or nil +end + + +--For very simple XML value extraction. +function xml_get(d, e, is_cdata) + local p = is_cdata and '.-%w+%[(.-)%].-' or '(.-)' + local t = {'<',e,'>', p, ''} + return d:match(table.concat(t)) + or error(table.concat({'no match: element: ',e})) +end + -- vim: set ts=4 sw=4 tw=72 expandtab: -- cgit