[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#700205: unblock: libquvi-scripts/0.4.11-2 (pre-upload approval)



Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock

Hi,

I would like to update libquvi-scripts in wheezy to 0.4.11-2 (identical
to -1 already in experimental).

It includes fixes for various sites, see NEWS in the attached diff.
There's also support for a few new sites which is not really needed for
wheezy, but those changes are isolated from the rest and shouldn't break
anything else.

Alternatively I could look into backporting most of the commits marked
as "FIX" in NEWS to the version currently in unstable.

Note that the attached debdiff excludes boring details (mostly ChangeLog
and version number noise). Upstream also removed the tests from
tests/data/format/other, however the Debian packaging doesn't run them
anyway (they require a network connection and depend on volatile data).

Ansgar
diff --git a/NEWS b/NEWS
index 788554e..9857893 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,54 @@
+v0.4.11  (2013-02-01) / Toni Gundogdu
+
+Guido Leisker:
+  - Add support for myspass.de [2b79f18]
+  - Add support for wdrmaus.de [86d1c64]
+Toni Gundogdu:
+  - beeg.lua: Update title pattern [be81501]
+  - FIX: 1tvru.lua: title and media URL patterns [763338c]
+  - FIX: gaskrank.lua: media stream URL pattern [8c067a5]
+  - FIX: gen-news.sh: Find the closest tagname [89d31bc]
+  - FIX: lego.lua: All patterns [787be3d]
+  - FIX: metacafe.lua: Key parsing [4735455]
+  - FIX: theonion.lua: thumbnail URL pattern [8d6ee06]
+  - gaskrank.lua: Parse thumbnail URL [1e15082]
+
+ 71 files changed, 398 insertions(+), 821 deletions(-)
+
+
+v0.4.10  (2012-11-22) / Toni Gundogdu
+
+Toni Gundogdu:
+  - FIX: audioboo.lua: multiple patterns [b182505]
+  - FIX: break.lua: multiple patterns [6357cd1]
+  - FIX: dailymotion.lua: title pattern [bc35f74]
+
+ 10 files changed, 28 insertions(+), 127 deletions(-)
+
+
+v0.4.9  (2012-10-01) / Toni Gundogdu
+
+anon:
+  - Add website/beeg.lua (NSFW) [5d7233f]
+  - Add website/deviantclip.lua (NSFW) [1b12bc4]
+  - Add website/fastjizz.lua (NSFW) [9f1ce8b]
+  - Add website/jizzhut.lua (NSFW) [d509b1b]
+  - Add website/xnxx.lua (NSFW) [ac72d16]
+  - FIX: website/youjizz.lua [ebc42da]
+  - website/keezmovies.lua: Detect encrypted streams [9498be7]
+Martin Herkt:
+  - FIX: youtube.lua [5b1c002] (aka. server response code 403 (conncode=0))
+Toni Gundogdu:
+  - FIX: Add quvi/html.lua to DIST_lua [c681d03]
+  - website/arte.lua: Mark as FIXME [e815821]
+  - website/collegehumor.lua: Mark as FIXME [4f65343]
+  - website/xvideos.lua: Improve title parsing (#109) [e657f45]
+Tzafrir Cohen:
+  - website/tapuz.lua: Add tapuz flix support [bc24554]
+
+ 27 files changed, 622 insertions(+), 86 deletions(-)
+
+
 v0.4.8  (2012-08-21) / Toni Gundogdu
 
 anon:
diff --git a/debian/changelog b/debian/changelog
index ae7d8bb..2c25a57 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,19 @@
+libquvi-scripts (0.4.11-1) experimental; urgency=low
+
+  * New upstream release.
+  * debian/copyright: Update for new upstream release.
+
+ -- Ansgar Burchardt <ansgar@debian.org>  Sat, 09 Feb 2013 14:31:20 +0100
+
+libquvi-scripts (0.4.10-1) experimental; urgency=low
+
+  * New upstream release.
+  * Fix d/watch to allow xz|gz|bz2.
+  * Add new entry to d/copyright (share/lua/website/tapuz.lua).
+  * Remove d/patches. Upstream author include patch. 
+
+ -- Alejandro Garrido Mota <garridomota@gmail.com>  Sun, 16 Dec 2012 10:07:38 -0430
+
 libquvi-scripts (0.4.8-3) unstable; urgency=low
 
   * Backport upstream patch for new signature parameter on YouTube.
diff --git a/debian/copyright b/debian/copyright
index 6b27778..6c4b461 100644
--- a/debian/copyright
+++ b/debian/copyright
@@ -5,7 +5,7 @@ Upstream-Name: libquvi-scripts
 
 Files: *
 Copyright:
- 2009,2010,2011,2012 Toni Gundogdu <legatvs@gmail.com>
+ 2009-2013 Toni Gundogdu <legatvs@gmail.com>
  2010,2011,2012 quvi project
 License: LGPL-2.1+
 
@@ -49,6 +49,15 @@ Files: share/lua/website/lego.lua
 Copyright: 2012, Ross Burton <ross@burtonini.com>
 License: LGPL-2.1+
 
+Files: share/lua/website/myspass.lua
+       share/lua/website/wdrmaus.lua
+Copyright: 2013, Guido Leisker <guido@guido-leisker.de>
+License: LGPL-2.1+
+
+Files: share/lua/website/tapuz.lua
+Copyright: 2012, Tzafrir Cohen <tzafrir@cohens.org.il>
+License: LGPL-2.1+
+
 Files: debian/*
 Copyright: 2011 Alejandro Garrido Mota <garridomota@gmail.com>
 License: GPL-3+
diff --git a/debian/patches/688972-youtube.diff b/debian/patches/688972-youtube.diff
deleted file mode 100644
index 3c6945c..0000000
diff --git a/debian/patches/series b/debian/patches/series
deleted file mode 100644
index 74b736b..0000000
diff --git a/debian/watch b/debian/watch
index 21f7f8d..6f04864 100644
--- a/debian/watch
+++ b/debian/watch
@@ -1,2 +1,2 @@
 version=3
-http://sf.net/quvi/libquvi-scripts-(\d.*).tar.gz
+http://sf.net/quvi/libquvi-scripts-(.*).tar.(?:xz|gz|bz2)
diff --git a/doc/man7/libquvi-scripts.7 b/doc/man7/libquvi-scripts.7
index a04186d..68bd154 100644
--- a/doc/man7/libquvi-scripts.7
+++ b/doc/man7/libquvi-scripts.7
@@ -124,7 +124,7 @@
 .\" ========================================================================
 .\"
 .IX Title "libquvi-scripts 7"
-.TH libquvi-scripts 7 "2012-08-01" "v0.4.8" "libquvi-scripts manual"
+.TH libquvi-scripts 7 "2013-02-01" "v0.4.11" "libquvi-scripts manual"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/m4/version.m4 b/m4/version.m4
index d3dd50f..66d73c4 100644
--- a/m4/version.m4
+++ b/m4/version.m4
@@ -1 +1 @@
-m4_define([_LIBQUVI_SCRIPTS_VERSION], [0.4.8])
+m4_define([_LIBQUVI_SCRIPTS_VERSION], [0.4.11])
diff --git a/share/Makefile.am b/share/Makefile.am
index a8d03cf..a457c39 100644
--- a/share/Makefile.am
+++ b/share/Makefile.am
@@ -9,12 +9,12 @@ DIST_lua=\
  lua/website/README \
  lua/website/quvi/bit.lua \
  lua/website/quvi/const.lua \
+ lua/website/quvi/html.lua \
  lua/website/quvi/url.lua \
  lua/website/quvi/util.lua \
  lua/website/101greatgoals.lua \
  lua/website/1tvru.lua \
  lua/website/academicearth.lua \
- lua/website/arte.lua \
  lua/website/audioboo.lua \
  lua/website/bbc.lua \
  lua/website/break.lua \
@@ -22,7 +22,6 @@ DIST_lua=\
  lua/website/cbsnews.lua \
  lua/website/charlierose.lua \
  lua/website/clipfish.lua \
- lua/website/collegehumor.lua \
  lua/website/dailymotion.lua \
  lua/website/foxnews.lua \
  lua/website/funnyordie.lua \
@@ -35,6 +34,7 @@ DIST_lua=\
  lua/website/liveleak.lua \
  lua/website/mgnetwork.lua \
  lua/website/metacafe.lua \
+ lua/website/myspass.lua \
  lua/website/publicsenat.lua \
  lua/website/sapo.lua \
  lua/website/senat.lua \
@@ -42,6 +42,7 @@ DIST_lua=\
  lua/website/soundcloud.lua \
  lua/website/spiegel.lua \
  lua/website/tagtele.lua \
+ lua/website/tapuz.lua \
  lua/website/ted.lua \
  lua/website/tvlux.lua \
  lua/website/tvrain.lua \
@@ -50,35 +51,43 @@ DIST_lua=\
  lua/website/videa.lua \
  lua/website/videobash.lua \
  lua/website/vimeo.lua \
+ lua/website/wdrmaus.lua \
  lua/website/yfrog.lua \
  lua/website/youtube.lua
 
 if WITH_NSFW
 DIST_lua+=\
+ lua/website/beeg.lua \
+ lua/website/deviantclip.lua \
  lua/website/empflix.lua \
- lua/website/pornhub.lua \
+ lua/website/fastjizz.lua \
+ lua/website/jizzhut.lua \
+ lua/website/keezmovies.lua \
  lua/website/redtube.lua \
  lua/website/spankwire.lua \
  lua/website/tcmag.lua \
  lua/website/tnaflix.lua \
  lua/website/totallynsfw.lua \
  lua/website/xhamster.lua \
+ lua/website/xnxx.lua \
  lua/website/xvideos.lua \
  lua/website/youjizz.lua
 endif
 
 if WITH_FIXME
 DIST_lua+=\
+ lua/website/arte.lua \
  lua/website/bikeradar.lua \
  lua/website/blip.lua \
  lua/website/bloomberg.lua \
+ lua/website/collegehumor.lua \
  lua/website/francetelevisions.lua \
  lua/website/globo.lua \
  lua/website/pluzz.lua
 if WITH_NSFW
 DIST_lua+=\
- lua/website/tube8.lua \
- lua/website/keezmovies.lua
+ lua/website/pornhub.lua \
+ lua/website/tube8.lua
 endif
 endif # WITH_FIXME
 
diff --git a/share/Makefile.in b/share/Makefile.in
index 973ab11..c81a009 100644
diff --git a/share/lua/website/1tvru.lua b/share/lua/website/1tvru.lua
index 8ba6f2e..698516c 100644
--- a/share/lua/website/1tvru.lua
+++ b/share/lua/website/1tvru.lua
@@ -52,10 +52,10 @@ function parse(self)
 
     local p = quvi.fetch(self.page_url)
 
-    self.title = p:match(OTvRu.pattern('title', '(.-)'))
+    self.title = p:match("'title': '(.-)'")
                   or error("no match: media title")
 
-    self.url = {p:match(OTvRu.pattern('file', '(.-)'))
+    self.url = {p:match("'file': '(.-)'")
                   or error("no match: media stream URL")}
 
     self.thumbnail_url = p:match('"og:image" content="(.-)"') or ''
@@ -63,9 +63,11 @@ function parse(self)
     return self
 end
 
+--[[
 function OTvRu.pattern(key_name, value_pattern)
    return string.format("jwplayer%%('flashvideoportal_1'%%).*'%s': '%s'",
                           key_name, value_pattern)
 end
+]]--
 
 -- vim: set ts=4 sw=4 tw=72 expandtab:
diff --git a/share/lua/website/audioboo.lua b/share/lua/website/audioboo.lua
index 01d3061..030c7c5 100644
--- a/share/lua/website/audioboo.lua
+++ b/share/lua/website/audioboo.lua
@@ -43,22 +43,23 @@ end
 function parse (self)
     self.host_id = "audioboo"
 
-    local oe_url =
-        "http://audioboo.fm/publishing/oembed.json?url="; .. self.page_url
+    self.id = self.page_url:match('/boos/(%d+)%-')
+                or error('no match: media ID')
 
-    local oe = quvi.fetch(oe_url, {fetch_type='config'})
+    local p = quvi.fetch(self.page_url)
 
-    self.title = oe:match('"title":"(.-)"')
-                    or error('no match: media title')
+    self.title =
+        p:match('.+content=[\'"](.-)[\'"]%s+property=[\'"]og:title[\'"]')
+          or error('no match: media title')
 
-    self.thumbnail_url = oe:match('"thumbnail_url":"(.-)"') or ''
-
-    self.id = oe:match('id=."boo_embed_(.-)."')
-                or error('no match: media id')
-
-    self.url = {oe:match('a href=."(.-)."')
-                    or error('no match: media url')}
+    self.thumbnail_url =
+        p:match('.+content=[\'"](.-)[\'"]%s+property=[\'"]og:image[\'"]')
+          or ''
 
+    self.url = {
+        p:match('.+content=[\'"](.-)[\'"]%s+property=[\'"]og:audio[\'"]')
+          or error('no match: media stream URL')
+    }
     return self
 end
 
diff --git a/share/lua/website/beeg.lua b/share/lua/website/beeg.lua
new file mode 100644
index 0000000..29aa124
--- /dev/null
+++ b/share/lua/website/beeg.lua
@@ -0,0 +1,60 @@
+
+-- libquvi-scripts v0.4.11
+-- Copyright (C) 2012-2013  quvi project
+--
+-- This file is part of libquvi-scripts <http://quvi.sourceforge.net/>.
+--
+-- 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
+--
+
+-- Identify the script.
+function ident(self)
+    package.path = self.script_dir .. '/?.lua'
+    local C      = require 'quvi/const'
+    local r      = {}
+    r.domain     = "beeg%.com"
+    r.formats    = "default"
+    r.categories = C.proto_http
+    local U      = require 'quvi/util'
+    r.handles    = U.handles(self.page_url, {r.domain}, {"/%d+"})
+    return r
+end
+
+-- Query available formats.
+function query_formats(self)
+    self.formats = 'default'
+    return self
+end
+
+-- Parse media URL.
+function parse(self)
+    self.host_id = "beeg"
+
+    self.id = self.page_url:match('/(%d+)')
+                or error("no match: media ID")
+
+    local p = quvi.fetch(self.page_url)
+
+    self.title = p:match('<meta name="description" content="(.-)%.')
+                  or error("no match: media title")
+
+    self.url = {p:match("'file': '(http://.-)'")
+                  or error("no match: media stream URL")}
+
+    return self
+end
+
+-- vim: set ts=4 sw=4 tw=72 expandtab:
diff --git a/share/lua/website/break.lua b/share/lua/website/break.lua
index 55be152..19545f1 100644
--- a/share/lua/website/break.lua
+++ b/share/lua/website/break.lua
@@ -45,19 +45,21 @@ function parse(self)
 
     local p = quvi.fetch(self.page_url)
 
-    self.title = p:match('id="vid_title" content="(.-)"')
+    self.title = p:match("sVidTitle:%s+['\"](.-)['\"]")
                   or error("no match: media title")
 
-    self.id = p:match("ContentID='(.-)'")
+    self.id = p:match("iContentID:%s+'(.-)'")
                 or error("no match: media ID")
 
-    local fn = p:match("FileName='(.-)'")
-                or error("no match: file name")
+    self.thumbnail_url = p:match('"og:image" content="(.-)"') or ''
 
-    local fh = p:match('flashVars.icon = "(.-)"')
+    local n = p:match("videoPath:%s+['\"](.-)['\"]")
+                or error("no match: file path")
+
+    local h = p:match("icon:%s+['\"](.-)['\"]")
                 or error("no match: file hash")
 
-    self.url = {string.format("%s.flv?%s", fn, fh)}
+    self.url = {string.format("%s?%s", n, h)}
 
     return self
 end
diff --git a/share/lua/website/dailymotion.lua b/share/lua/website/dailymotion.lua
index 5ee6912..eec2353 100644
--- a/share/lua/website/dailymotion.lua
+++ b/share/lua/website/dailymotion.lua
@@ -63,7 +63,7 @@ function parse(self)
     local U = require 'quvi/util'
     local p = Dailymotion.fetch_page(self, U)
 
-    self.title = p:match('title="(.-)"')
+    self.title = p:match('"og:title" content="(.-)"')
                   or error("no match: media title")
 
     self.id = p:match("video/([^%?_]+)")
diff --git a/share/lua/website/deviantclip.lua b/share/lua/website/deviantclip.lua
new file mode 100644
index 0000000..1129f2a
--- /dev/null
+++ b/share/lua/website/deviantclip.lua
@@ -0,0 +1,73 @@
+
+-- libquvi-scripts v0.4.11
+-- Copyright (C) 2012  quvi project
+--
+-- This file is part of libquvi-scripts <http://quvi.sourceforge.net/>.
+--
+-- 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 Deviantclip = {} -- 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     = "deviantclip%.com"
+    r.formats    = "default"
+    r.categories = C.proto_http
+    local U      = require 'quvi/util'
+    r.handles    = U.handles(self.page_url, {r.domain}, {"/watch/.+"})
+    return r
+end
+
+-- Query available formats.
+function query_formats(self)
+    self.formats = 'default'
+    return self
+end
+
+-- Parse media URL.
+function parse(self)
+    self.host_id = "deviantclip"
+
+    self.id = self.page_url:match('/watch/(.+)')
+                or error("no match: media ID")
+
+    local p = quvi.fetch(self.page_url)
+
+    self.title = p:match('DC%.title" content="(.-)" ')
+                  or error("no match: media title")
+    self.title = self.title:gsub('&#x(%d+);', Deviantclip.to_utf8)
+
+    local U = require 'quvi/util'
+    self.url = {U.unescape (p:match('%[{"file":"(.-)",'))
+                  or error("no match: media stream URL")}
+
+    return self
+end
+
+--
+-- Utility functions
+--
+
+function Deviantclip.to_utf8(a) -- Unescape &#x00; to UTF-8
+    local H = require 'quvi/html'
+    return H.to_utf8("0x" .. a)
+end
+
+-- vim: set ts=4 sw=4 tw=72 expandtab:
diff --git a/share/lua/website/fastjizz.lua b/share/lua/website/fastjizz.lua
new file mode 100644
index 0000000..4bddf2c
--- /dev/null
+++ b/share/lua/website/fastjizz.lua
@@ -0,0 +1,72 @@
+
+-- libquvi-scripts v0.4.11
+-- Copyright (C) 2012  quvi project
+--
+-- This file is part of libquvi-scripts <http://quvi.sourceforge.net/>.
+--
+-- 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
+--
+
+-- Identify the script.
+function ident(self)
+    package.path = self.script_dir .. '/?.lua'
+    local C      = require 'quvi/const'
+    local r      = {}
+    r.domain     = "fastjizz%.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+/.*"})
+    if r.handles then return r end
+    -- Handle embedded URLs here
+    r.handles    = U.handles(self.page_url, {r.domain},
+                    {"/embed%.php"}, {"id=%d+"})
+    return r
+end
+
+-- Query available formats.
+function query_formats(self)
+    self.formats = 'default'
+    return self
+end
+
+-- Parse media URL.
+function parse(self)
+    self.host_id = "fastjizz"
+
+    self.id = self.page_url:match('/video/(%d+).*')
+    if not self.id then
+        self.id = self.page_url:match('/embed%.php%?id=(%d+)')
+            or error("no match: media ID")
+    end
+
+    local p =
+      quvi.fetch("http://www.fastjizz.com/media/nuevo/playlist.php?key=";
+                  .. self.id)
+
+    self.title = p:match('<title>(.+)</title>')
+                    or error("no match: media title")
+
+    self.thumbnail_url =
+        p:match('<image>(.+)</image>') or ''
+
+    self.url = {p:match('<file>(.+)</file>')
+                  or error("no match: media stream URL")}
+
+    return self
+end
+
+-- vim: set ts=4 sw=4 tw=72 expandtab:
diff --git a/share/lua/website/gaskrank.lua b/share/lua/website/gaskrank.lua
index bab03de..7f3e3bb 100644
--- a/share/lua/website/gaskrank.lua
+++ b/share/lua/website/gaskrank.lua
@@ -45,10 +45,12 @@ function parse(self)
 
     local p = quvi.fetch(self.page_url)
 
+    self.thumbnail_url = p:match('"og:image" content="(.-)"') or ''
+
     self.title = p:match('"og:title" content="(.-)"')
                   or error('no match: media title')
 
-    local u = p:match("(http://movies.-%.flv)")
+    local u = p:match("(http://movies.-)'")
                 or error("no match: media stream URL")
 
     self.id = u:match("/%d+/(%d+)%.%w+") or error("no match: media ID")
diff --git a/share/lua/website/jizzhut.lua b/share/lua/website/jizzhut.lua
new file mode 100644
index 0000000..3999955
--- /dev/null
+++ b/share/lua/website/jizzhut.lua
@@ -0,0 +1,68 @@
+
+-- libquvi-scripts v0.4.11
+-- Copyright (C) 2012  quvi project
+--
+-- This file is part of libquvi-scripts <http://quvi.sourceforge.net/>.
+--
+-- 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
+--
+
+-- Identify the script.
+function ident(self)
+    package.path = self.script_dir .. '/?.lua'
+    local C      = require 'quvi/const'
+    local r      = {}
+    r.domain     = "jizzhut%.com"
+    r.formats    = "default"
+    r.categories = C.proto_http
+    local U      = require 'quvi/util'
+    r.handles    = U.handles(self.page_url, {r.domain},
+                    {"/videos/.*-%d-%.html", "/videos/embed/%d."})
+    return r
+end
+
+-- Query available formats.
+function query_formats(self)
+    self.formats = 'default'
+    return self
+end
+
+-- Parse media URL.
+function parse(self)
+    self.host_id = "jizzhut"
+
+    self.id = self.page_url:match('/videos/.*%-(%d-)%.html')
+    if not self.id then
+        self.id = self.page_url:match('/videos/embed/(%d+)')
+                    or error("no match: media ID")
+    end
+
+    local p = quvi.fetch("http://www.jizzhut.com/videos/-";
+                .. self.id .. ".html")
+
+    self.title = p:match('<title>(.-)</title>')
+                  or error("no match: media title")
+
+    local p = quvi.fetch("http://www.jizzhut.com/videos/embed/";
+                .. self.id, "config")
+
+    self.url = {p:match('encodeURIComponent%("(http://.-)"%)')
+                  or error("no match: media stream URL")}
+
+    return self
+end
+
+-- vim: set ts=4 sw=4 tw=72 expandtab:
diff --git a/share/lua/website/keezmovies.lua b/share/lua/website/keezmovies.lua
index 0d547ff..12077bf 100644
--- a/share/lua/website/keezmovies.lua
+++ b/share/lua/website/keezmovies.lua
@@ -51,12 +51,23 @@ function parse (self)
     self.id = p:match("id%%3D(.-)&amp;")
                 or error("no match: media id")
 
-    local s = p:match("video_url=(.-)&amp;")
+    local flashvars = p:match('flashvars" value="(.-)"/>')
+                or error("no match: flashvars")
+
+    local s = flashvars:match("video_url=(.-)&amp;")
                 or error("no match: flv url")
 
     local U  = require 'quvi/util'
     self.url = {U.unescape(s)}
 
+    local encrypted = flashvars:match('encrypted=true')
+    if encrypted ~= nil then
+        local key = flashvars:match("video_title=(-.)&amp;")
+        -- XXX No support for AES encrypted URLs
+        -- AESCounterModeDecrypt(self.url, key, 256)
+        error("No support for encrypted streams")
+    end
+
     return self
 end
 
diff --git a/share/lua/website/lego.lua b/share/lua/website/lego.lua
index fbe28db..01acd72 100644
--- a/share/lua/website/lego.lua
+++ b/share/lua/website/lego.lua
@@ -29,7 +30,8 @@ function ident(self)
     r.formats    = "default"
     r.categories = C.proto_http
     local U      = require 'quvi/util'
-    r.handles    = U.handles(self.page_url, {r.domain}, {"/.+/Movies/.+$"})
+    r.handles    = U.handles(self.page_url, {r.domain}, {"/.+/movies/.+$"})
+      -- http://city.lego.com/en-gb/movies/mini-movies/gold-run/
     return r
 end
 
@@ -42,19 +44,22 @@ end
 -- Parse video URL.
 function parse(self)
     self.host_id = "lego"
+
     local p = quvi.fetch(self.page_url)
 
-    local s = p:match('<trackingName>(.+)</trackingName>')
-              or error("no match: tracking name")
-    local index = s:find("-")
+    local d = p:match('FirstVideoData = {(.-)};')
+                or error('no match: FirstVideoData')
+
+    self.title = d:match('"Name":"(.-)"')
+                  or error('no match: media title')
 
-    self.title = s:sub(0, index-1)
-    self.id = s:sub(index+1)
+    self.id = d:match('"LikeObjectGuid":"(.-)"') -- Lack of a better.
+                  or error('no match: media ID')
 
-    -- TODO self.thumbnail_url
+    self.url = {d:match('"VideoFlash":%{"Url":"(.-)"')
+                  or error('no match: media stream URL')}
 
-    self.url = {p:match('<movie>(.+)</movie>')
-               or error("no match: media stream URL")}
+    -- TODO: return self.thumbnail_url
 
     return self
 end
diff --git a/share/lua/website/metacafe.lua b/share/lua/website/metacafe.lua
index c75c450..d6fdf2c 100644
--- a/share/lua/website/metacafe.lua
+++ b/share/lua/website/metacafe.lua
@@ -55,26 +56,22 @@ function parse(self)
     local U = require 'quvi/util'
     local p = Metacafe.fetch_page(self, U)
 
-    self.title = p:match('"title":"(.-)"')
-                  or error("no match: media title")
+    local v = p:match('name="flashvars" value="(.-)"')
+                or error('no match: flashvars')
 
-    self.title = U.unescape(self.title)
-
-    self.id = p:match('"itemID":"(.-)"')
-                or error('no match: media id')
+    v = U.slash_unescape(U.unescape(v))
 
     self.thumbnail_url = p:match('rel="image_src" href="(.-)"') or ''
 
-    local d = p:match('"mediaData":"(.-)"')
-                or error('no match: media data')
-    d = U.unescape(d)
+    self.title = v:match('title=(.-)&') or error('no match: media title')
+
+    self.id = v:match('itemID=(%d+)') or error('no match: media ID')
 
-    local u = d:match('"mediaURL":"(.-)"')
-                or error('no match: media url')
-    u = U.slash_unescape(u)
+    local u = v:match('"mediaURL":"(.-)"')
+                or error('no match: media stream URL')
 
-    local k = d:match('"key":"(.-)"')
-                or error('no match: gda key')
+    local k = v:match('"key":"__gda__","value":"(.-)"')
+                or error('no match: key')
 
     self.url = {string.format("%s?__gda__=%s", u, k)}
 
diff --git a/share/lua/website/myspass.lua b/share/lua/website/myspass.lua
new file mode 100644
index 0000000..6d07de8
--- /dev/null
+++ b/share/lua/website/myspass.lua
@@ -0,0 +1,89 @@
+
+-- libquvi-scripts v0.4.11
+-- Copyright (C) 2012  Guido Leisker <guido@guido-leisker.de>
+--
+-- This file is part of libquvi-scripts <http://quvi.sourceforge.net/>.
+--
+-- 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
+
+-- About
+--  Each video url ends with an id composed of digits.
+--  This id leads us to a metadata xml file (see function
+--  MySpass.getMetadataValue) containing all necessary information
+--  including download link.
+
+local MySpass = {} -- 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     = "myspass%.de"
+  r.formats    = "default"
+  r.categories = C.proto_http
+  local U      = require 'quvi/util'
+  -- expect all urls ending with digits to be videos
+  r.handles    = U.handles(self.page_url, {r.domain}, {"/myspass/.-/%d+/?$"})
+  return r
+end
+
+-- Query available formats.
+function query_formats(self)
+    self.formats = 'default'
+    return self
+end
+
+-- Parse media URL.
+function parse(self)
+  self.host_id = "myspass"
+
+  self.id = self.page_url:match("(%d+)/?$")
+      or error("no match: media ID")
+
+  local format  = MySpass.getMetadataValue(self, 'format')
+  local title   = MySpass.getMetadataValue(self, 'title')
+  local season  = MySpass.getMetadataValue(self, 'season')
+  local episode = MySpass.getMetadataValue(self, 'episode')
+  self.thumbnail_url = MySpass.getMetadataValue(self, 'imagePreview') or ''
+
+  self.title = string.format("%s %03d %03d %s", format, season,
+                             episode, title)
+
+  self.url = {MySpass.getMetadataValue(self, 'url_flv')}
+
+  return self
+end
+
+--
+-- Utility functions
+--
+
+function MySpass.getMetadataValue(self, key)
+  if self.metadata == nil then
+    self.metadata =  quvi.fetch(
+      'http://www.myspass.de/myspass/'
+          .. 'includes/apps/video/getvideometadataxml.php?id='
+          .. self.id ) or error("cannot fetch meta data xml file")
+  end
+  local p = string.format("<%s>(.-)</%s>", key, key)
+  local temp = self.metadata:match(p) or error("meta data: no match: " .. key)
+  local value = temp:match('<!%[CDATA%[(.+)]]>') or temp
+  return value
+end
+
+-- vim: set ts=2 sw=2 tw=72 expandtab:
+
diff --git a/share/lua/website/quvi/html.lua b/share/lua/website/quvi/html.lua
new file mode 100644
index 0000000..bbae9ff
--- /dev/null
+++ b/share/lua/website/quvi/html.lua
@@ -0,0 +1,73 @@
+
+-- libquvi-scripts v0.4.11
+-- Copyright (C) 2011  Toni Gundogdu <legatvs@gmail.com>
+--
+-- This file is part of libquvi-scripts <http://quvi.sourceforge.net/>.
+--
+-- 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
+--
+
+--
+-- A modularized revision of <http://www.hpelbers.org/lua/utf8>
+--
+-- convert numeric html entities to utf8
+-- example:  &#8364;    ->   €
+--
+
+local M    = {}
+local char = string.char
+ 
+function M.tail(n, k)
+    local u, r=''
+    for i=1,k do
+        n,r = math.floor(n/0x40), n%0x40
+        u = char(r+0x80) .. u
+    end
+    return u, n
+end
+ 
+function M.to_utf8(a)
+    local n, r, u = tonumber(a)
+    if n<0x80 then                        -- 1 byte
+        return char(n)
+    elseif n<0x800 then                   -- 2 byte
+        u, n = M.tail(n, 1)
+        return char(n+0xc0) .. u
+    elseif n<0x10000 then                 -- 3 byte
+        u, n = M.tail(n, 2)
+        return char(n+0xe0) .. u
+    elseif n<0x200000 then                -- 4 byte
+        u, n = M.tail(n, 3)
+        return char(n+0xf0) .. u
+    elseif n<0x4000000 then               -- 5 byte
+        u, n = M.tail(n, 4)
+        return char(n+0xf8) .. u
+    else                                  -- 6 byte
+        u, n = M.tail(n, 5)
+        return char(n+0xfc) .. u
+    end
+end
+ 
+--
+--for line in io.lines() do
+--    out =  string.gsub(line, '&#(%d+);', to_utf8)
+--    print(out)
+--end
+--
+
+return M
+
+-- vim: set ts=4 sw=4 tw=72 expandtab:
diff --git a/share/lua/website/tapuz.lua b/share/lua/website/tapuz.lua
new file mode 100644
index 0000000..c745bb4
--- /dev/null
+++ b/share/lua/website/tapuz.lua
@@ -0,0 +1,74 @@
+
+-- libquvi-scripts v0.4.11
+-- Copyright (C) 2012  Tzafrir Cohen <tzafrir@cohens.org.il>
+--
+-- This file is part of libquvi-scripts <http://quvi.sourceforge.net/>.
+--
+-- 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
+--
+
+-- Identify the script.
+function ident(self)
+    package.path = self.script_dir .. '/?.lua'
+    local C      = require 'quvi/const'
+    local r      = {}
+    --- http://flix.tapuz.co.il/v/watch-4158845-.html
+    r.domain     = "flix%.tapuz%.co%.il"
+    r.formats    = "default"
+    r.categories = C.proto_http
+    local U      = require 'quvi/util'
+    r.handles    = U.handles(self.page_url, {r.domain},
+                       {"/v/watch-.*.html", "/showVideo%.asp"})
+    return r
+end
+
+-- Query available formats.
+function query_formats(self)
+    self.formats = 'default'
+    return self
+end
+
+-- Parse media URL.
+function parse(self)
+    self.host_id = 'tapuz-flix'
+
+    self.id = self.page_url:match('/v/watch%-(%d+)%-.*%.html')
+    if not self.id then
+        self.id = self.page_url:match('/showVideo%.asp%?m=(%d+)')
+                    or error("no match: media ID")
+    end
+
+    local xml_url_base = 'v/Handlers/XmlForPlayer.ashx' -- Variable?
+    local mako = 0 -- Does it matter?
+    local playerOptions = '0|1|grey|large|0' -- Does it matter? Format?
+
+    local p = quvi.fetch(self.page_url)
+    self.title = p:match('<meta name="item%-title" content="([^"]*)" />')
+
+    local s_fmt =
+      'http://flix.tapuz.co.il/%s?mediaid=%d&autoplay=0&mako=%d'
+      .. '&playerOptions=%s'
+
+    local xml_url =
+      string.format(s_fmt, xml_url_base, self.id, mako, playerOptions)
+
+    local xml_page = quvi.fetch(xml_url)
+    self.url = { xml_page:match('<videoUrl>.*(http://.*%.flv).*</videoUrl>') }
+
+    return self
+end
+
+-- vim: set ts=4 sw=4 tw=72 expandtab:
diff --git a/share/lua/website/theonion.lua b/share/lua/website/theonion.lua
index 7617fa7..9b7c58d 100644
--- a/share/lua/website/theonion.lua
+++ b/share/lua/website/theonion.lua
@@ -53,7 +53,7 @@ function parse(self)
     self.title = c:match('"title":%s+"(.-)"')
                   or error('no match: media title')
 
-    self.thumbnail_url = c:match('"thumbnail":%s+"(.-)"') or ''
+    self.thumbnail_url = c:match('"thumbnail": %["(.-)"%]') or ''
 
     self.url = {c:match('"video_url":%s+"(.-)"')
                   or error('no match: media stream URL')}
diff --git a/share/lua/website/wdrmaus.lua b/share/lua/website/wdrmaus.lua
new file mode 100644
index 0000000..7653544
--- /dev/null
+++ b/share/lua/website/wdrmaus.lua
@@ -0,0 +1,173 @@
+
+-- libquvi-scripts v0.4.11
+-- Copyright (C) 2013  Guido Leisker <guido@guido-leisker.de>
+--
+-- This file is part of libquvi-scripts <http://quvi.sourceforge.net/>.
+--
+-- 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
+
+-- About
+--  wrdmaus.de falls into different sections each working
+--  quite differently
+--
+--  elefantenseite:
+--    flash gallery with link target to proper pages for each video
+--    last part of url is id, configuration.php5
+--    http://www.wdrmaus.de/elefantenseite/
+--    http://www.wdrmaus.de/elefantenseite/#/anke_tanzt_zooztiere
+--
+--  kaeptnblaubaerseite:
+--    single flash, users need to use html only page (html gallery)
+--    and copy target links of videos
+--    http://www.wdrmaus.de/kaeptnblaubaerseite/baerchen/tv.php5
+--    http://www.wdrmaus.de/kaeptnblaubaerseite/baerchen/tv.php5?mid=1&dslSrc=rtmp://gffstream.fcod.llnwd.net/a792/e2/blaubaer/flash/oink_web-m.flv&isdnSrc=rtmp://gffstream.fcod.llnwd.net/a792/e2/blaubaer/flash/oink_web-s.flv
+--
+--  sachgeschichten:
+--    html video gallery, users need to copy target links of videos
+--    http://www.wdrmaus.de/sachgeschichten/sachgeschichten/
+--    http://www.wdrmaus.de/sachgeschichten/sachgeschichten/sachgeschichte.php5?id=2702
+--
+--  entenseite (very few videos, not supported!):
+--    http://www.wdrmaus.de/enteseite/index.php5
+--    http://www.wdrmaus.de/enteseite/tuerenauf/index.php5?v=3#v2
+--
+--  There are more sections but they seem to provide no videos.
+
+local WdrMaus = {} -- 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     = "wdrmaus%.de"
+  r.formats    = "default"
+  r.categories = C.proto_rtmp
+  local U      = require 'quvi/util'
+  -- there seems to be no possiblity to really
+  -- make a decision here: we are using a less
+  -- strict pattern here
+  r.handles    =  U.handles(self.page_url, {r.domain})
+  return r
+end
+
+-- Query available formats.
+function query_formats(self)
+    self.formats = 'default'
+    return self
+end
+
+-- Parse media URL.
+function parse(self)
+  self.host_id = "wdrmaus"
+
+  local a = {
+      {pat='kaeptnblaubaerseite', func=WdrMaus.parseKaeptnblaubaerseite},
+      {pat='sachgeschichten',     func=WdrMaus.parseSachgeschichten},
+      {pat='elefantenseite',      func=WdrMaus.parseElefantenseite}
+  }
+
+  local U = require 'quvi/url'
+  local t = U.parse(self.page_url)
+  local s = {}
+
+  for _,v in pairs(a) do
+      if t.path:match(v.pat) then return v.func(self) end
+      table.insert(s, v.pat)
+  end
+
+  error(string.format("limited support for the {%s} sections only",
+                        table.concat(s, ',')))
+end
+
+--
+-- Utility functions
+--
+
+function WdrMaus.parseElefantenseite(self)
+  self.id = self.page_url:match('\/([%w_]-)$')
+                or error('no match: media ID')
+
+  local rooturl = self.page_url:match('(%w+://.+/%w+)/.*')
+                      or error('no match: root url')
+
+  local qo = {fetch_type='config'}
+  local configuration = quvi.fetch(rooturl .. '/data/configuration.php5', qo)
+
+  local streamingServerPath =
+          WdrMaus.getXMLvalue(configuration, 'streamingServerPath')
+
+  local toc = quvi.fetch(rooturl .. '/data/tableOfContents.php5', qo)
+
+  local metadataPath = WdrMaus.getMetadataPathFromToc(toc, self.id)
+  local metadata = quvi.fetch(rooturl .. '/' .. metadataPath, qo);
+
+  streamingServerPath = string.gsub(streamingServerPath, '/$', '')
+  self.url = { streamingServerPath .. WdrMaus.getXMLvalue(metadata, 'file') }
+  self.title = WdrMaus.getXMLvalue(metadata, 'title')
+
+  -- no idea why this url has a diffent host
+  self.thumbnail_url = 'http://www.wdr.de/bilder/mediendb/elefant_online'
+        .. WdrMaus.getXMLvalue(metadata, 'image')
+
+  return self
+end
+
+function WdrMaus.parseKaeptnblaubaerseite(self)
+  self.id = self.page_url:match('/([^/]-)$') or error('no match: media ID')
+
+  local qo = {fetch_type='config'}
+  local metadatasite = quvi.fetch(
+      'http://www.wdrmaus.de/kaeptnblaubaerseite/baerchen/tv.php5', qo)
+
+  local matcher = string.gsub(self.id, '-' , '.')
+  metadata = metadatasite:match('.*(<img.-' .. matcher .. ')')
+                or error('no match: metadata')
+
+  self.title = metadata:match('<p>%s-(.-)%s-<br') or error('no match: title')
+  local thumb_rel = metadata:match('<img src="(.-)"') or ''
+
+  thumb_rel = string.gsub(thumb_rel, '%.%.', '')
+  self.thumbnail_url = 'http://www.wdrmaus.de/kaeptnblaubaerseite' ..thumb_rel
+
+  self.url = { self.page_url:match('.-(rtmp.-flv)')
+                  or error('no match: media stream URL') }
+  return self
+end
+
+function WdrMaus.parseSachgeschichten(self)
+  self.id = self.page_url:match('%d+$') or error('no match: media ID')
+  local metadata = quvi.fetch(self.page_url)
+  self.title = metadata:match('h1_019DCE">(.-)<') or error('no match: title')
+  self.url = { metadata:match('(rtmp.-mp4)')
+                or error('no match: media stream URL') }
+  return self
+end
+
+function WdrMaus.getXMLvalue(str, value)
+  ret = str:match('<' .. value .. '>(.-)</' .. value .. '>')
+            or error('Cannot match ' .. value)
+  return ret:match('<!%[CDATA%[(.+)]]>') or ret
+end
+
+function WdrMaus.getMetadataPathFromToc(toc, id)
+  -- the toc contains all paths for this root (f.i. elefantenkino)
+  local page = toc:match('<id>.-(' .. id .. '.-</xmlPath>)')
+                  or error('no match: metadata path')
+  return WdrMaus.getXMLvalue(page, 'xmlPath')
+end
+
+-- vim: set ts=2 sw=2 tw=72 expandtab:
diff --git a/share/lua/website/xnxx.lua b/share/lua/website/xnxx.lua
new file mode 100644
index 0000000..fa5e6f9
--- /dev/null
+++ b/share/lua/website/xnxx.lua
@@ -0,0 +1,64 @@
+
+-- libquvi-scripts v0.4.11
+-- Copyright (C) 2012  quvi project
+--
+-- This file is part of libquvi-scripts <http://quvi.sourceforge.net/>.
+--
+-- 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
+--
+
+-- Identify the script.
+function ident(self)
+    package.path = self.script_dir .. '/?.lua'
+    local C      = require 'quvi/const'
+    local r      = {}
+    r.domain     = "xnxx%.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+.+"})
+    return r
+end
+
+-- Query available formats.
+function query_formats(self)
+    self.formats = 'default'
+    return self
+end
+
+-- Parse media URL.
+function parse(self)
+    self.host_id = "xnxx"
+
+    self.id = self.page_url:match('/video(%d+)')
+                or error("no match: media ID")
+
+    local p = quvi.fetch(self.page_url)
+
+    self.title = p:match('<span class="style5"><strong>(.-)</strong>')
+                  or error("no match: media title")
+
+    self.thumbnail_url =
+        p:match('url_bigthumb=(http://.-)&') or ''
+
+    local U = require 'quvi/util'
+    self.url = {U.unescape (p:match('flv_url=(http.-)&'))
+                  or error("no match: media stream URL")}
+
+    return self
+end
+
+-- vim: set ts=4 sw=4 tw=72 expandtab:
diff --git a/share/lua/website/xvideos.lua b/share/lua/website/xvideos.lua
index 47d6bca..e00e788 100644
--- a/share/lua/website/xvideos.lua
+++ b/share/lua/website/xvideos.lua
@@ -50,7 +50,7 @@ function parse(self)
 
     local p = quvi.fetch(self.page_url)
 
-    self.title = p:match("<title>(.-)%s+-%s+XVID")
+    self.title = p:match('<div id="main">.-<h2>(.-)<')
                   or error("no match: media title")
 
     self.id = self.page_url:match("/video(%d+)/")
diff --git a/share/lua/website/youjizz.lua b/share/lua/website/youjizz.lua
index 47d2046..1a7c90d 100644
--- a/share/lua/website/youjizz.lua
+++ b/share/lua/website/youjizz.lua
@@ -44,16 +44,21 @@ end
 function parse(self)
     self.host_id = "youjizz"
 
+    self.id = self.page_url:match('%-(%d+)%.html')
+                or error ("no match: media ID")
+
     local p = quvi.fetch(self.page_url)
 
     self.title = p:match("<title>(.-)</")
                   or error ("no match: media title")
 
-    self.id = p:match("%?id=(%d+)")
-                or error ("no match: media ID")
+    self.thumbnail_url = p:match('data%-original="(.-)"') or ''
+
+    local c = quvi.fetch('http://youjizz.com/videos/embed/' .. self.id,
+                          {fetch_type='config'})
 
-    self.url = {p:match('addVariable%("file",encodeURIComponent%("(.-)"')
-                  or error ("no match: media URL")}
+    self.url = {c:match('addVariable%("file",encodeURIComponent%("(.-)"')
+                  or error ("no match: media stream URL")}
 
     return self
 end
diff --git a/share/lua/website/youtube.lua b/share/lua/website/youtube.lua
index de8ac2e..a7e5c04 100644
--- a/share/lua/website/youtube.lua
+++ b/share/lua/website/youtube.lua
@@ -125,7 +125,11 @@ function YouTube.iter_formats(config, U)
     for f in fmt_stream_map:gmatch('([^,]*),') do
         local d = U.decode(f)
         if d['itag'] and d['url'] then
-            urls[U.unescape(d['itag'])] = U.unescape(d['url'])
+            local uurl = U.unescape(d['url'])
+            if d['sig'] then
+                uurl = uurl .. "&signature=" .. U.unescape(d['sig'])
+            end
+            urls[U.unescape(d['itag'])] = uurl
         end
     end
 
diff --git a/tests/data/format/default/audioboo.json b/tests/data/format/default/audioboo.json
index e9f3ce5..35e6302 100644
--- a/tests/data/format/default/audioboo.json
+++ b/tests/data/format/default/audioboo.json
@@ -8,9 +8,6 @@
   "link": [
     {
       "id": "1",
-      "length_bytes": "280704",
-      "content_type": "audio/mpeg",
-      "file_suffix": "mp3",
       "url": ""
     }
   ]
diff --git a/tests/data/format/default/break.json b/tests/data/format/default/break.json
index 377bed9..e264fd7 100644
--- a/tests/data/format/default/break.json
+++ b/tests/data/format/default/break.json
@@ -4,6 +4,7 @@
   "page_url": "http://break.com/index/beach-tackle-whip-lash.html";,
   "id": "546999",
   "format_requested": "default",
+  "thumbnail_url": "http://media11.break.com/dnet/media/2008/7/beach-tackle-whiplash.jpg";,
   "link": [
     {
       "id": "1",
diff --git a/tests/data/format/default/collegehumor.json b/tests/data/format/default/fixme/collegehumor.json
similarity index 100%
rename from tests/data/format/default/collegehumor.json
rename to tests/data/format/default/fixme/collegehumor.json
diff --git a/tests/data/format/default/funnyordie.json b/tests/data/format/default/funnyordie.json
index bc28048..7bf7d28 100644
--- a/tests/data/format/default/funnyordie.json
+++ b/tests/data/format/default/funnyordie.json
@@ -4,11 +4,11 @@
   "page_url": "http://www.funnyordie.com/videos/776d200b1c/etiquette-ninjas-episode-5-dicks-on-elevators";,
   "id": "776d200b1c",
   "format_requested": "default",
-  "thumbnail_url": "http://assets0.ordienetworks.com/tmbs/776d200b1c/large_11.jpg?cff58787";,
+  "thumbnail_url": "http://www.funnyordie.com/media/776d200b1c/thumbnail/fullsize.jpg";,
   "link": [
     {
       "id": "1",
-      "length_bytes": "26903859",
+      "length_bytes": "31184204",
       "content_type": "video/mp4",
       "file_suffix": "mp4",
       "url": ""
diff --git a/tests/data/format/default/gaskrank.json b/tests/data/format/default/gaskrank.json
index f2a5ec8..8d93fa9 100644
--- a/tests/data/format/default/gaskrank.json
+++ b/tests/data/format/default/gaskrank.json
@@ -4,6 +4,7 @@
   "page_url": "http://www.gaskrank.tv/tv/rennstrecken/1-runde-oschersleben-14082008--6985.htm";,
   "id": "6985",
   "format_requested": "default",
+  "thumbnail_url": "http://static.gaskrank.tv/de/filme/1-runde-oschersleben-aprilia-rsv-250-vs-honda-rvf-400-r-1229.jpg";,
   "link": [
     {
       "id": "1",
diff --git a/tests/data/format/default/lego.json b/tests/data/format/default/lego.json
index 3ae52bb..6b353ce 100644
--- a/tests/data/format/default/lego.json
+++ b/tests/data/format/default/lego.json
@@ -1,8 +1,8 @@
 {
   "host": "lego",
-  "page_title": "Gold Run",
-  "page_url": "http://city.lego.com/en-gb/Movies/Gold%20Run.aspx";,
-  "id": "431026",
+  "page_title": "Gold run",
+  "page_url": "http://city.lego.com/en-gb/movies/mini-movies/gold-run/";,
+  "id": "6A1B1307-5B7A-42B2-9444-F2EBF9BE3D92",
   "format_requested": "default",
   "link": [
     {
diff --git a/tests/data/format/default/metacafe.json b/tests/data/format/default/metacafe.json
index 0c4951e..5b0c9d8 100644
--- a/tests/data/format/default/metacafe.json
+++ b/tests/data/format/default/metacafe.json
@@ -4,7 +4,7 @@
   "page_url": "http://www.metacafe.com/watch/6570232/x_men_first_class_press_conference_report/";,
   "id": "6570232",
   "format_requested": "default",
-  "thumbnail_url": "http://s1.mcstatic.com/thumb/6570232.jpg";,
+  "thumbnail_url": "http://s1.mcstatic.com/thumb/6570232/18598135/4/flash_player/0/1/x_men_first_class_press_conference_report.jpg?v=1";,
   "link": [
     {
       "id": "1",
diff --git a/tests/data/format/default/myspass.json b/tests/data/format/default/myspass.json
new file mode 100644
index 0000000..d6b79ce
--- /dev/null
+++ b/tests/data/format/default/myspass.json
@@ -0,0 +1,17 @@
+{
+  "host": "myspass",
+  "page_title": "The Netshow 001 084 Abschied aus Köln",
+  "page_url": "http://www.myspass.de/myspass/shows/webshows/the-netshow/Abschied-aus-Koeln--/11186/";,
+  "id": "11186",
+  "format_requested": "default",
+  "thumbnail_url": "http://www.myspass.de/myspass/media/images/videos/86/11186_640x360.jpg";,
+  "link": [
+    {
+      "id": "1",
+      "length_bytes": "24736684",
+      "content_type": "video/mp4",
+      "file_suffix": "mp4",
+      "url": ""
+    }
+  ]
+}
diff --git a/tests/data/format/default/nsfw/beeg.json b/tests/data/format/default/nsfw/beeg.json
new file mode 100644
index 0000000..40729ed
--- /dev/null
+++ b/tests/data/format/default/nsfw/beeg.json
@@ -0,0 +1,16 @@
+{
+  "host": "beeg",
+  "page_title": "Secretary",
+  "page_url": "http://beeg.com/9462174";,
+  "id": "9462174",
+  "format_requested": "default",
+  "link": [
+    {
+      "id": "1",
+      "length_bytes": "61162882",
+      "content_type": "video/mp4",
+      "file_suffix": "mp4",
+      "url": ""
+    }
+  ]
+}
diff --git a/tests/data/format/default/nsfw/deviantclip.json b/tests/data/format/default/nsfw/deviantclip.json
new file mode 100644
index 0000000..99c3437
--- /dev/null
+++ b/tests/data/format/default/nsfw/deviantclip.json
@@ -0,0 +1,16 @@
+{
+  "host": "deviantclip",
+  "page_title": "Salma Hayek in After The Sunset",
+  "page_url": "http://www.deviantclip.com/watch/salma-hayek-in-after-the-sunset-fitt";,
+  "id": "salma-hayek-in-after-the-sunset-fitt",
+  "format_requested": "default",
+  "link": [
+    {
+      "id": "1",
+      "length_bytes": "37530865",
+      "content_type": "video/mp4",
+      "file_suffix": "mp4",
+      "url": ""
+    }
+  ]
+}
diff --git a/tests/data/format/default/nsfw/empflix.json b/tests/data/format/default/nsfw/empflix.json
index 34ff71b..b46132e 100644
--- a/tests/data/format/default/nsfw/empflix.json
+++ b/tests/data/format/default/nsfw/empflix.json
@@ -1,14 +1,14 @@
 {
   "host": "empflix",
-  "page_title": "Tan Girl Hip Job",
-  "page_url": "http://www.empflix.com/videos/Tan-Girl-Hip-Job-97661.html";,
-  "id": "97661",
+  "page_title": "Kathy",
+  "page_url": "http://www.empflix.com/videos/Kathy-60351.html";,
+  "id": "60351",
   "format_requested": "default",
-  "thumbnail_url": "http://pic.empflix.com/images/thumb/93/97661-1l.jpg";,
+  "thumbnail_url": "http://pic.empflix.com/images/thumb/93/60351-21l.jpg";,
   "link": [
     {
       "id": "1",
-      "length_bytes": "515865410",
+      "length_bytes": "98043571",
       "content_type": "application/octet-stream",
       "file_suffix": "flv",
       "url": ""
diff --git a/tests/data/format/default/nsfw/fastjizz.json b/tests/data/format/default/nsfw/fastjizz.json
new file mode 100644
index 0000000..c64d102
--- /dev/null
+++ b/tests/data/format/default/nsfw/fastjizz.json
@@ -0,0 +1,17 @@
+{
+  "host": "fastjizz",
+  "page_title": "HomegrownWives Giving Her All To Make The Sale",
+  "page_url": "http://www.fastjizz.com/video/129975/homegrownwives-giving-her-all-to-make-the-sale";,
+  "id": "129975",
+  "format_requested": "default",
+  "thumbnail_url": "http://www.fastjizz.com/media/videos/tmb/129975/1.jpg";,
+  "link": [
+    {
+      "id": "1",
+      "length_bytes": "65073253",
+      "content_type": "application/octet-stream",
+      "file_suffix": "flv",
+      "url": ""
+    }
+  ]
+}
diff --git a/tests/data/format/default/nsfw/pornhub.json b/tests/data/format/default/nsfw/fixme/pornhub.json
similarity index 100%
rename from tests/data/format/default/nsfw/pornhub.json
rename to tests/data/format/default/nsfw/fixme/pornhub.json
diff --git a/tests/data/format/default/nsfw/jizzhut.json b/tests/data/format/default/nsfw/jizzhut.json
new file mode 100644
index 0000000..3b63c1a
--- /dev/null
+++ b/tests/data/format/default/nsfw/jizzhut.json
@@ -0,0 +1,16 @@
+{
+  "host": "jizzhut",
+  "page_title": "Nuru Massage",
+  "page_url": "http://www.jizzhut.com/videos/nuru-massage-2204193.html";,
+  "id": "2204193",
+  "format_requested": "default",
+  "link": [
+    {
+      "id": "1",
+      "length_bytes": "66513830",
+      "content_type": "video/x-flv",
+      "file_suffix": "flv",
+      "url": ""
+    }
+  ]
+}
diff --git a/tests/data/format/default/nsfw/xnxx.json b/tests/data/format/default/nsfw/xnxx.json
new file mode 100644
index 0000000..c01a862
--- /dev/null
+++ b/tests/data/format/default/nsfw/xnxx.json
@@ -0,0 +1,17 @@
+{
+  "host": "xnxx",
+  "page_title": "Brooke Haven",
+  "page_url": "http://video.xnxx.com/video197853/0/brooke_haven";,
+  "id": "197853",
+  "format_requested": "default",
+  "thumbnail_url": "http://img100.xvideos.com/videos/thumbslll/9c/bd/45/9cbd45765b5e946b4ad2719211cd37b4/9cbd45765b5e946b4ad2719211cd37b4.17.jpg";,
+  "link": [
+    {
+      "id": "1",
+      "length_bytes": "143206521",
+      "content_type": "video/x-flv",
+      "file_suffix": "flv",
+      "url": ""
+    }
+  ]
+}
diff --git a/tests/data/format/default/nsfw/youjizz.json b/tests/data/format/default/nsfw/youjizz.json
index a1376d9..f74f34c 100644
--- a/tests/data/format/default/nsfw/youjizz.json
+++ b/tests/data/format/default/nsfw/youjizz.json
@@ -1,13 +1,14 @@
 {
   "host": "youjizz",
-  "page_title": "Glamour Girls - Melissa",
-  "page_url": "http://www.youjizz.com/videos/glamour-girls---melissa-125602.html";,
-  "id": "125602",
+  "page_title": "Hot brunette",
+  "page_url": "http://www.youjizz.com/videos/hot-brunette-2872521.html";,
+  "id": "2872521",
   "format_requested": "default",
+  "thumbnail_url": "http://cdna.pics.youjizz.com/media24/SC3360554.flv-1.jpg";,
   "link": [
     {
       "id": "1",
-      "length_bytes": "34241200",
+      "length_bytes": "45808834",
       "content_type": "video/x-flv",
       "file_suffix": "flv",
       "url": ""
diff --git a/tests/data/format/default/spiegel.json b/tests/data/format/default/spiegel.json
index a04c585..4d1e18a 100644
--- a/tests/data/format/default/spiegel.json
+++ b/tests/data/format/default/spiegel.json
@@ -1,14 +1,14 @@
 {
   "host": "spiegel",
-  "page_title": "Wiedeking-Nachfolger gefunden",
-  "page_url": "http://www.spiegel.de/video/video-1012582.html";,
-  "id": "1012582",
+  "page_title": "Auf der Spur des Bienentanzes",
+  "page_url": "http://www.spiegel.de/video/bienen-forschung-roboter-biene-soll-bienentanz-entschluesseln-video-1231965.html";,
+  "id": "1231965",
   "format_requested": "default",
-  "duration": "52000",
+  "duration": "203000",
   "link": [
     {
       "id": "1",
-      "length_bytes": "2462477",
+      "length_bytes": "10245896",
       "content_type": "video/x-flv",
       "file_suffix": "flv",
       "url": ""
diff --git a/tests/data/format/default/tapuz.json b/tests/data/format/default/tapuz.json
new file mode 100644
index 0000000..253ca28
--- /dev/null
+++ b/tests/data/format/default/tapuz.json
@@ -0,0 +1,16 @@
+{
+  "host": "tapuz-flix",
+  "page_title": "תאונת שייט כואבת!",
+  "page_url": "http://flix.tapuz.co.il/v/watch-4166028-%D7%AA%D7%90%D7%95%D7%A0%D7%AA%20%D7%A9%D7%99%D7%99%D7%98%20%D7%9B%D7%95%D7%90%D7%91%D7%AA!.html";,
+  "id": "4166028",
+  "format_requested": "default",
+  "link": [
+    {
+      "id": "1",
+      "length_bytes": "970729",
+      "content_type": "video/flv",
+      "file_suffix": "flv",
+      "url": ""
+    }
+  ]
+}
diff --git a/tests/data/format/default/theonion.json b/tests/data/format/default/theonion.json
index c4ec265..7465a7a 100644
--- a/tests/data/format/default/theonion.json
+++ b/tests/data/format/default/theonion.json
@@ -4,7 +4,7 @@
   "page_url": "http://www.theonion.com/video/time-announces-new-version-of-magazine-aimed-at-ad,17950/";,
   "id": "17950",
   "format_requested": "default",
-  "thumbnail_url": "http://o.onionstatic.com/images/articles/article/17950/TIME_FOR_ADULTS_WEBSTILL.jpg";,
+  "thumbnail_url": "http://o.onionstatic.com/images/13/13398/16x9/640.jpg?5580";,
   "link": [
     {
       "id": "1",
diff --git a/tests/data/format/default/theonion_2.json b/tests/data/format/default/theonion_2.json
index 38be9a1..89976eb 100644
--- a/tests/data/format/default/theonion_2.json
+++ b/tests/data/format/default/theonion_2.json
@@ -4,7 +4,7 @@
   "page_url": "http://www.theonion.com/video/romney-to-undergo-gender-reassignment-surgery-to-b,28358/";,
   "id": "28358",
   "format_requested": "default",
-  "thumbnail_url": "http://o.onionstatic.com/images/articles/article/28/28358/TOR404_RomneyWebstill.jpg";,
+  "thumbnail_url": "http://o.onionstatic.com/images/17/17263/16x9/640.jpg?5107";,
   "link": [
     {
       "id": "1",
diff --git a/tests/data/format/default/wdrmaus_es.json b/tests/data/format/default/wdrmaus_es.json
new file mode 100644
index 0000000..b9cb007
--- /dev/null
+++ b/tests/data/format/default/wdrmaus_es.json
@@ -0,0 +1,14 @@
+{
+  "host": "wdrmaus",
+  "page_title": "Anke tanzt Zootiere",
+  "page_url": "http://www.wdrmaus.de/elefantenseite/#/anke_tanzt_zooztiere";,
+  "id": "anke_tanzt_zooztiere",
+  "format_requested": "default",
+  "thumbnail_url": "http://www.wdr.de/bilder/mediendb/elefant_online/images/Kinderseiten/Filme/Anke/a207_anke_tanzt_zoo.jpg";,
+  "link": [
+    {
+      "id": "1",
+      "url": ""
+    }
+  ]
+}
diff --git a/tests/data/format/default/wdrmaus_kbbs.json b/tests/data/format/default/wdrmaus_kbbs.json
new file mode 100644
index 0000000..f1ffe1d
--- /dev/null
+++ b/tests/data/format/default/wdrmaus_kbbs.json
@@ -0,0 +1,14 @@
+{
+  "host": "wdrmaus",
+  "page_title": "Käpt&#8217;n Blaubärs kuriose Kombüsenküche: Marzipankartoffel",
+  "page_url": "http://www.wdrmaus.de/kaeptnblaubaerseite/baerchen/tv.php5?mid=1&dslSrc=rtmp://gffstream.fcod.llnwd.net/a792/e2/blaubaer/flash/oink_web-m.flv&isdnSrc=rtmp://gffstream.fcod.llnwd.net/a792/e2/blaubaer/flash/oink_web-s.flv";,
+  "id": "oink_web-s.flv",
+  "format_requested": "default",
+  "thumbnail_url": "http://www.wdrmaus.de/kaeptnblaubaerseite/baerchen/img/icon_film_03.gif";,
+  "link": [
+    {
+      "id": "1",
+      "url": ""
+    }
+  ]
+}
diff --git a/tests/data/format/default/wdrmaus_sg.json b/tests/data/format/default/wdrmaus_sg.json
new file mode 100644
index 0000000..c7319aa
--- /dev/null
+++ b/tests/data/format/default/wdrmaus_sg.json
@@ -0,0 +1,13 @@
+{
+  "host": "wdrmaus",
+  "page_title": "40. MausGeburtstag",
+  "page_url": "http://www.wdrmaus.de/sachgeschichten/sachgeschichten/sachgeschichte.php5?id=2702";,
+  "id": "2702",
+  "format_requested": "default",
+  "link": [
+    {
+      "id": "1",
+      "url": ""
+    }
+  ]
+}
diff --git a/tests/data/format/other/cbsnews_best.json b/tests/data/format/other/cbsnews_best.json
deleted file mode 100644
index c2a58d9..0000000
diff --git a/tests/data/format/other/cbsnews_m4v_1100k_480p.json b/tests/data/format/other/cbsnews_m4v_1100k_480p.json
deleted file mode 100644
index 4f2a9c7..0000000
diff --git a/tests/data/format/other/cbsnews_m4v_386k_216p.json b/tests/data/format/other/cbsnews_m4v_386k_216p.json
deleted file mode 100644
index 05228b3..0000000
diff --git a/tests/data/format/other/cbsnews_m4v_598k_360p.json b/tests/data/format/other/cbsnews_m4v_598k_360p.json
deleted file mode 100644
index 691ca9e..0000000
diff --git a/tests/data/format/other/cbsnews_mp4_1100k_480p.json b/tests/data/format/other/cbsnews_mp4_1100k_480p.json
deleted file mode 100644
index 6d0f616..0000000
diff --git a/tests/data/format/other/cbsnews_mp4_500k_240p.json b/tests/data/format/other/cbsnews_mp4_500k_240p.json
deleted file mode 100644
index 8a21ae3..0000000
diff --git a/tests/data/format/other/collegehumor_best.json b/tests/data/format/other/collegehumor_best.json
deleted file mode 100644
index 00a6d80..0000000
diff --git a/tests/data/format/other/collegehumor_mp4_hq.json b/tests/data/format/other/collegehumor_mp4_hq.json
deleted file mode 100644
index 8678ed2..0000000
diff --git a/tests/data/format/other/collegehumor_mp4_sd.json b/tests/data/format/other/collegehumor_mp4_sd.json
deleted file mode 100644
index f7e936b..0000000
diff --git a/tests/data/format/other/fixme/blip_best.json b/tests/data/format/other/fixme/blip_best.json
deleted file mode 100644
index 749f197..0000000
diff --git a/tests/data/format/other/fixme/blip_m4v_blip_sd_360p.json b/tests/data/format/other/fixme/blip_m4v_blip_sd_360p.json
deleted file mode 100644
index 159b6a6..0000000
diff --git a/tests/data/format/other/fixme/blip_mov_source_360p.json b/tests/data/format/other/fixme/blip_mov_source_360p.json
deleted file mode 100644
index f066a59..0000000
diff --git a/tests/data/format/other/fixme/blip_mp3_web.json b/tests/data/format/other/fixme/blip_mp3_web.json
deleted file mode 100644
index ddcb4e7..0000000
diff --git a/tests/data/format/other/foxnews_best.json b/tests/data/format/other/foxnews_best.json
deleted file mode 100644
index 514fcfc..0000000
diff --git a/tests/data/format/other/foxnews_high.json b/tests/data/format/other/foxnews_high.json
deleted file mode 100644
index 3d04911..0000000
diff --git a/tests/data/format/other/foxnews_low.json b/tests/data/format/other/foxnews_low.json
deleted file mode 100644
index c6d0213..0000000
diff --git a/tests/data/format/other/foxnews_med.json b/tests/data/format/other/foxnews_med.json
deleted file mode 100644
index 837bcbf..0000000
diff --git a/tests/data/format/other/foxnews_med_low.json b/tests/data/format/other/foxnews_med_low.json
deleted file mode 100644
index 19074a3..0000000
diff --git a/tests/data/format/other/funnyordie_best.json b/tests/data/format/other/funnyordie_best.json
deleted file mode 100644
index 8915a1a..0000000
diff --git a/tests/data/format/other/funnyordie_mp4_ipad.json b/tests/data/format/other/funnyordie_mp4_ipad.json
deleted file mode 100644
index 0b5b24c..0000000
diff --git a/tests/data/format/other/funnyordie_mp4_wifi.json b/tests/data/format/other/funnyordie_mp4_wifi.json
deleted file mode 100644
index f6afd5d..0000000
diff --git a/tests/data/format/other/golem_best.json b/tests/data/format/other/golem_best.json
deleted file mode 100644
index ad4e6d5..0000000
diff --git a/tests/data/format/other/golem_m4v_ipod_360p.json b/tests/data/format/other/golem_m4v_ipod_360p.json
deleted file mode 100644
index 635e3e9..0000000
diff --git a/tests/data/format/other/golem_mp4_high_540p.json b/tests/data/format/other/golem_mp4_high_540p.json
deleted file mode 100644
index 0702072..0000000
diff --git a/tests/data/format/other/golem_mp4_medium_270p.json b/tests/data/format/other/golem_mp4_medium_270p.json
deleted file mode 100644
index d7f7e23..0000000
diff --git a/tests/data/format/other/ignore/length_bytes/dailymotion_best.json b/tests/data/format/other/ignore/length_bytes/dailymotion_best.json
deleted file mode 100644
index 57dab24..0000000
diff --git a/tests/data/format/other/ignore/length_bytes/dailymotion_mp4_384p.json b/tests/data/format/other/ignore/length_bytes/dailymotion_mp4_384p.json
deleted file mode 100644
index de511cd..0000000
diff --git a/tests/data/format/other/ignore/length_bytes/dailymotion_mp4_480p.json b/tests/data/format/other/ignore/length_bytes/dailymotion_mp4_480p.json
deleted file mode 100644
index f566a77..0000000
diff --git a/tests/data/format/other/ignore/length_bytes/dailymotion_mp4_720p.json b/tests/data/format/other/ignore/length_bytes/dailymotion_mp4_720p.json
deleted file mode 100644
index d0b66fe..0000000
diff --git a/tests/data/format/other/imdb_480p.json b/tests/data/format/other/imdb_480p.json
deleted file mode 100644
index 64dc09a..0000000
diff --git a/tests/data/format/other/imdb_720p.json b/tests/data/format/other/imdb_720p.json
deleted file mode 100644
index f096652..0000000
diff --git a/tests/data/format/other/imdb_SD.json b/tests/data/format/other/imdb_SD.json
deleted file mode 100644
index 4779897..0000000
diff --git a/tests/data/format/other/imdb_best.json b/tests/data/format/other/imdb_best.json
deleted file mode 100644
index a922c9a..0000000
diff --git a/tests/data/format/other/mgnetwork_best.json b/tests/data/format/other/mgnetwork_best.json
deleted file mode 100644
index 504044a..0000000
diff --git a/tests/data/format/other/mgnetwork_mp4.json b/tests/data/format/other/mgnetwork_mp4.json
deleted file mode 100644
index 2ed5f01..0000000
diff --git a/tests/data/format/other/mgnetwork_xflv.json b/tests/data/format/other/mgnetwork_xflv.json
deleted file mode 100644
index 43c7b8d..0000000
diff --git a/tests/data/format/other/spiegel_best.json b/tests/data/format/other/spiegel_best.json
deleted file mode 100644
index e108f22..0000000
diff --git a/tests/data/format/other/spiegel_flv_vp6_388k_135p.json b/tests/data/format/other/spiegel_flv_vp6_388k_135p.json
deleted file mode 100644
index 87b38b5..0000000
diff --git a/tests/data/format/other/spiegel_flv_vp6_576k_315p.json b/tests/data/format/other/spiegel_flv_vp6_576k_315p.json
deleted file mode 100644
index 6ca9f2b..0000000
diff --git a/tests/data/format/other/spiegel_flv_vp6_64k_135p.json b/tests/data/format/other/spiegel_flv_vp6_64k_135p.json
deleted file mode 100644
index 245bda6..0000000
diff --git a/tests/data/format/other/spiegel_flv_vp6_928k_544p.json b/tests/data/format/other/spiegel_flv_vp6_928k_544p.json
deleted file mode 100644
index 382124d..0000000
diff --git a/tests/data/format/other/spiegel_mp4_h264_1400k_544p.json b/tests/data/format/other/spiegel_mp4_h264_1400k_544p.json
deleted file mode 100644
index b2ae156..0000000
diff --git a/tests/data/format/other/youtube_best.json b/tests/data/format/other/youtube_best.json
deleted file mode 100644
index 2072300..0000000
diff --git a/tests/data/format/other/youtube_fmt05_240p.json b/tests/data/format/other/youtube_fmt05_240p.json
deleted file mode 100644
index 39cc72d..0000000
diff --git a/tests/data/format/other/youtube_fmt18_360p.json b/tests/data/format/other/youtube_fmt18_360p.json
deleted file mode 100644
index a7eb8e1..0000000
diff --git a/tests/data/format/other/youtube_fmt22_720p.json b/tests/data/format/other/youtube_fmt22_720p.json
deleted file mode 100644
index d046af0..0000000
diff --git a/tests/data/format/other/youtube_fmt34_360p.json b/tests/data/format/other/youtube_fmt34_360p.json
deleted file mode 100644
index 9aa2c40..0000000
diff --git a/tests/data/format/other/youtube_fmt35_480p.json b/tests/data/format/other/youtube_fmt35_480p.json
deleted file mode 100644
index 1c27ed8..0000000
diff --git a/tests/data/format/other/youtube_fmt37_1080p.json b/tests/data/format/other/youtube_fmt37_1080p.json
deleted file mode 100644
index 90448ba..0000000
diff --git a/tests/data/format/other/youtube_fmt38_1536p.json b/tests/data/format/other/youtube_fmt38_1536p.json
deleted file mode 100644
index 72d8801..0000000
diff --git a/tests/t/expire.t b/tests/t/expire.t
index c3e2fee..e4c24f6 100644
--- a/tests/t/expire.t
+++ b/tests/t/expire.t
@@ -27,6 +27,7 @@ plan skip_all => "LWP::UserAgent required for testing" if $@;
 use Test::Quvi;
 
 my $q = Test::Quvi->new;
+plan skip_all => "FIXME"; # Both website/{arte,pluzz}.lua need to be fixed.
 plan skip_all => "TEST_SKIP rule" if $q->test_skip("expire");
 
 my $ua = new LWP::UserAgent;
@@ -38,8 +39,6 @@ my %h = (
     my ($page) = @_;
     "http://videos.arte.tv/$1/videos/$2"; if $page =~ /$qr/;
   },
-);
-=for comment FIXME: pluzz.lua
   "http://www.pluzz.fr/"; => sub {
     my ($page, $url) = @_;
     my $rx_href = qr|class=""\s+href="(.*?)"|i;
@@ -49,7 +48,7 @@ my %h = (
       return $c if $c =~ /$rx_url/;
     }
   }
-=cut
+);
 
 plan tests => scalar(keys %h) * 2;
 

Reply to: