From 6528f5dec6c1b2ccdec0d6873b428b044c851b63 Mon Sep 17 00:00:00 2001 From: Toni Gundogdu Date: Sun, 3 Nov 2013 01:31:37 +0200 Subject: [PATCH] Add website/dorkly.lua for dorkly.com Signed-off-by: Toni Gundogdu --- share/Makefile.am | 1 + share/lua/website/dorkly.lua | 95 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 share/lua/website/dorkly.lua diff --git a/share/Makefile.am b/share/Makefile.am index 10bc4e1..7cde81d 100644 --- a/share/Makefile.am +++ b/share/Makefile.am @@ -23,6 +23,7 @@ DIST_lua=\ lua/website/cbsnews.lua \ lua/website/clipfish.lua \ lua/website/dailymotion.lua \ + lua/website/dorkly.lua \ lua/website/foxnews.lua \ lua/website/funnyordie.lua \ lua/website/gaskrank.lua \ diff --git a/share/lua/website/dorkly.lua b/share/lua/website/dorkly.lua new file mode 100644 index 0000000..a0c1f1d --- /dev/null +++ b/share/lua/website/dorkly.lua @@ -0,0 +1,95 @@ + +-- libquvi-scripts +-- Copyright (C) 2013 Toni Gundogdu +-- +-- This file is part of libquvi-scripts . +-- +-- This library is free software; you can redistribute it and/or +-- modify it under the terms of the GNU Lesser General Public +-- License as published by the Free Software Foundation; either +-- version 2.1 of the License, or (at your option) any later version. +-- +-- This library is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +-- Lesser General Public License for more details. +-- +-- You should have received a copy of the GNU Lesser General Public +-- License along with this library; if not, write to the Free Software +-- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +-- 02110-1301 USA +-- + +local Dorkly = {} -- Utility functions unique to this script + +-- Identify the script. +function ident(self) + package.path = self.script_dir .. '/?.lua' + local C = require 'quvi/const' + local r = {} + r.domain = "dorkly%.com" + r.formats = "default" + r.categories = C.proto_http + local U = require 'quvi/util' + r.handles = U.handles(self.page_url, {r.domain}, + {"/video/%d+/", "/embed/%d+/"}) + return r +end + +-- Query formats. +function query_formats(self) + self.formats = 'default' + return self +end + +-- Parse media URL. +function parse(self) + self.host_id = "dorkly" + + self.id = self.page_url:match('/video/(%d+)/') + or self.page_url:match('/embed/(%d+)/') + or error('no match: media ID') + + if Dorkly.is_affiliate(self) then + return self + end + + local t = {'http://www.dorkly.com/moogaloop/video/', self.id} + local x = quvi.fetch(table.concat(t), {fetch_type='config'}) + + self.duration = tonumber(Dorkly.xml_get(x, 'duration', false)) + + self.thumbnail_url = Dorkly.xml_get(x, 'thumbnail', true) + + self.title = Dorkly.xml_get(x, 'caption', true) + + self.url = { Dorkly.xml_get(x, 'file', true) } + + return self +end + +-- +-- Utility functions +-- + +function Dorkly.is_affiliate(self) + if not self.page_url:match('/embed/') then + return false + end + local p = quvi.fetch(self.page_url) + local u = p:match('iframe.-src="(.-)"') or error('no match: iframe: src') + if not u:match('^http%:') then -- If the URL scheme is malformed... + u = table.concat({'http:',u}) -- ... Try to fix it. + end + self.redirect_url = u + return true +end + +function Dorkly.xml_get(x, e, is_cdata) + local c = is_cdata and '.-%w+%[(.-)%].-' or '(%d+)' + local t = {'<',e,'>', c, ''} + return x:match(table.concat(t)) + or error(table.concat({'no match: element: ',e})) +end + +-- vim: set ts=4 sw=4 tw=72 expandtab: -- 2.11.4.GIT