Fix imports and general cleanup

· Import from compat what comes from compat. Yes, some names are available in utils too, but that's an implementation detail.
· Use _match_id consistently whenever possible
· Fix some outdated tests
· Use consistent valid URL (always match the whole protocol, no ^ at start required)
· Use modern test definitions
This commit is contained in:
Philipp Hagemeister 2014-12-13 12:24:42 +01:00
parent 20e35880bf
commit 1cc79574fc
120 changed files with 443 additions and 384 deletions

View File

@ -5,8 +5,8 @@ import re
import sys import sys
import time import time
from ..compat import compat_str
from ..utils import ( from ..utils import (
compat_str,
encodeFilename, encodeFilename,
format_bytes, format_bytes,
timeconvert, timeconvert,

View File

@ -9,10 +9,12 @@ import xml.etree.ElementTree as etree
from .common import FileDownloader from .common import FileDownloader
from .http import HttpFD from .http import HttpFD
from ..compat import (
compat_urlparse,
)
from ..utils import ( from ..utils import (
struct_pack, struct_pack,
struct_unpack, struct_unpack,
compat_urlparse,
format_bytes, format_bytes,
encodeFilename, encodeFilename,
sanitize_open, sanitize_open,

View File

@ -6,9 +6,11 @@ import subprocess
from ..postprocessor.ffmpeg import FFmpegPostProcessor from ..postprocessor.ffmpeg import FFmpegPostProcessor
from .common import FileDownloader from .common import FileDownloader
from ..utils import ( from ..compat import (
compat_urlparse, compat_urlparse,
compat_urllib_request, compat_urllib_request,
)
from ..utils import (
check_executable, check_executable,
encodeFilename, encodeFilename,
) )

View File

@ -4,11 +4,12 @@ import os
import time import time
from .common import FileDownloader from .common import FileDownloader
from ..utils import ( from ..compat import (
compat_urllib_request, compat_urllib_request,
compat_urllib_error, compat_urllib_error,
)
from ..utils import (
ContentTooShortError, ContentTooShortError,
encodeFilename, encodeFilename,
sanitize_open, sanitize_open,
format_bytes, format_bytes,

View File

@ -7,9 +7,9 @@ import sys
import time import time
from .common import FileDownloader from .common import FileDownloader
from ..compat import compat_str
from ..utils import ( from ..utils import (
check_executable, check_executable,
compat_str,
encodeFilename, encodeFilename,
format_bytes, format_bytes,
get_exe_version, get_exe_version,

View File

@ -5,10 +5,9 @@ import re
import json import json
from .common import InfoExtractor from .common import InfoExtractor
from ..compat import compat_str
from ..utils import ( from ..utils import (
compat_str,
qualities, qualities,
determine_ext,
) )
@ -75,9 +74,7 @@ class AllocineIE(InfoExtractor):
'format_id': format_id, 'format_id': format_id,
'quality': quality(format_id), 'quality': quality(format_id),
'url': v, 'url': v,
'ext': determine_ext(v),
}) })
self._sort_formats(formats) self._sort_formats(formats)
return { return {

View File

@ -68,4 +68,3 @@ class AolIE(InfoExtractor):
'title': title, 'title': title,
'entries': entries, 'entries': entries,
} }

View File

@ -4,8 +4,8 @@ import re
import json import json
from .common import InfoExtractor from .common import InfoExtractor
from ..compat import compat_urlparse
from ..utils import ( from ..utils import (
compat_urlparse,
int_or_none, int_or_none,
) )

View File

@ -3,8 +3,8 @@ from __future__ import unicode_literals
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..compat import compat_urllib_parse
from ..utils import ( from ..utils import (
compat_urllib_parse,
determine_ext, determine_ext,
ExtractorError, ExtractorError,
) )

View File

@ -5,7 +5,7 @@ import json
import itertools import itertools
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_request, compat_urllib_request,
) )

View File

@ -4,9 +4,11 @@ import json
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_str, compat_str,
compat_urlparse, compat_urlparse,
)
from ..utils import (
ExtractorError, ExtractorError,
) )

View File

@ -1,8 +1,8 @@
from __future__ import unicode_literals from __future__ import unicode_literals
from .common import InfoExtractor from .common import InfoExtractor
from ..compat import compat_urllib_parse
from ..utils import ( from ..utils import (
compat_urllib_parse,
xpath_text, xpath_text,
xpath_with_ns, xpath_with_ns,
int_or_none, int_or_none,

View File

@ -4,8 +4,8 @@ from __future__ import unicode_literals
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..compat import compat_parse_qs
from ..utils import ( from ..utils import (
compat_parse_qs,
ExtractorError, ExtractorError,
int_or_none, int_or_none,
unified_strdate, unified_strdate,
@ -29,10 +29,9 @@ class BiliBiliIE(InfoExtractor):
} }
def _real_extract(self, url): def _real_extract(self, url):
mobj = re.match(self._VALID_URL, url) video_id = self._match_id(url)
video_id = mobj.group('id')
webpage = self._download_webpage(url, video_id) webpage = self._download_webpage(url, video_id)
video_code = self._search_regex( video_code = self._search_regex(
r'(?s)<div itemprop="video".*?>(.*?)</div>', webpage, 'video code') r'(?s)<div itemprop="video".*?>(.*?)</div>', webpage, 'video code')

View File

@ -6,20 +6,21 @@ import json
import xml.etree.ElementTree import xml.etree.ElementTree
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_parse,
find_xpath_attr,
fix_xml_ampersands,
compat_urlparse,
compat_str,
compat_urllib_request,
compat_parse_qs, compat_parse_qs,
compat_str,
compat_urllib_parse,
compat_urllib_parse_urlparse, compat_urllib_parse_urlparse,
compat_urllib_request,
compat_urlparse,
)
from ..utils import (
determine_ext, determine_ext,
ExtractorError, ExtractorError,
unsmuggle_url, find_xpath_attr,
fix_xml_ampersands,
unescapeHTML, unescapeHTML,
unsmuggle_url,
) )

View File

@ -4,10 +4,12 @@ from __future__ import unicode_literals
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_request, compat_urllib_request,
compat_urllib_parse, compat_urllib_parse,
compat_urllib_parse_urlparse, compat_urllib_parse_urlparse,
)
from ..utils import (
ExtractorError, ExtractorError,
) )

View File

@ -3,9 +3,11 @@ from __future__ import unicode_literals
import re import re
from .mtv import MTVServicesInfoExtractor from .mtv import MTVServicesInfoExtractor
from ..utils import ( from ..compat import (
compat_str, compat_str,
compat_urllib_parse, compat_urllib_parse,
)
from ..utils import (
ExtractorError, ExtractorError,
float_or_none, float_or_none,
unified_strdate, unified_strdate,

View File

@ -5,12 +5,14 @@ import re
import json import json
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_parse, compat_urllib_parse,
orderedSet,
compat_urllib_parse_urlparse, compat_urllib_parse_urlparse,
compat_urlparse, compat_urlparse,
) )
from ..utils import (
orderedSet,
)
class CondeNastIE(InfoExtractor): class CondeNastIE(InfoExtractor):

View File

@ -10,10 +10,12 @@ import xml.etree.ElementTree
from hashlib import sha1 from hashlib import sha1
from math import pow, sqrt, floor from math import pow, sqrt, floor
from .subtitles import SubtitlesInfoExtractor from .subtitles import SubtitlesInfoExtractor
from ..utils import ( from ..compat import (
ExtractorError,
compat_urllib_parse, compat_urllib_parse,
compat_urllib_request, compat_urllib_request,
)
from ..utils import (
ExtractorError,
bytes_to_intlist, bytes_to_intlist,
intlist_to_bytes, intlist_to_bytes,
unified_strdate, unified_strdate,

View File

@ -8,13 +8,15 @@ import itertools
from .common import InfoExtractor from .common import InfoExtractor
from .subtitles import SubtitlesInfoExtractor from .subtitles import SubtitlesInfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_request,
compat_str, compat_str,
compat_urllib_request,
)
from ..utils import (
ExtractorError,
int_or_none,
orderedSet, orderedSet,
str_to_int, str_to_int,
int_or_none,
ExtractorError,
unescapeHTML, unescapeHTML,
) )

View File

@ -5,7 +5,7 @@ from __future__ import unicode_literals
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_parse, compat_urllib_parse,
) )

View File

@ -1,8 +1,6 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import re from ..compat import (
from ..utils import (
compat_urllib_parse, compat_urllib_parse,
) )
from .common import InfoExtractor from .common import InfoExtractor
@ -24,11 +22,10 @@ class EHowIE(InfoExtractor):
} }
def _real_extract(self, url): def _real_extract(self, url):
mobj = re.match(self._VALID_URL, url) video_id = self._match_id(url)
video_id = mobj.group('id')
webpage = self._download_webpage(url, video_id) webpage = self._download_webpage(url, video_id)
video_url = self._search_regex(r'(?:file|source)=(http[^\'"&]*)', video_url = self._search_regex(
webpage, 'video URL') r'(?:file|source)=(http[^\'"&]*)', webpage, 'video URL')
final_url = compat_urllib_parse.unquote(video_url) final_url = compat_urllib_parse.unquote(video_url)
uploader = self._html_search_meta('uploader', webpage) uploader = self._html_search_meta('uploader', webpage)
title = self._og_search_title(webpage).replace(' | eHow', '') title = self._og_search_title(webpage).replace(' | eHow', '')

View File

@ -6,7 +6,7 @@ import random
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_str, compat_str,
) )

View File

@ -3,9 +3,10 @@ from __future__ import unicode_literals
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_parse, compat_urllib_parse,
)
from ..utils import (
ExtractorError, ExtractorError,
) )

View File

@ -3,8 +3,10 @@ from __future__ import unicode_literals
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_request, compat_urllib_request,
)
from ..utils import (
ExtractorError, ExtractorError,
) )

View File

@ -3,16 +3,18 @@ from __future__ import unicode_literals
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_parse_urlparse, compat_urllib_parse_urlparse,
compat_urllib_request, compat_urllib_request,
compat_urllib_parse, compat_urllib_parse,
)
from ..utils import (
str_to_int, str_to_int,
) )
class ExtremeTubeIE(InfoExtractor): class ExtremeTubeIE(InfoExtractor):
_VALID_URL = r'^(?:https?://)?(?:www\.)?(?P<url>extremetube\.com/.*?video/.+?(?P<videoid>[0-9]+))(?:[/?&]|$)' _VALID_URL = r'https?://(?:www\.)?(?P<url>extremetube\.com/.*?video/.+?(?P<id>[0-9]+))(?:[/?&]|$)'
_TESTS = [{ _TESTS = [{
'url': 'http://www.extremetube.com/video/music-video-14-british-euro-brit-european-cumshots-swallow-652431', 'url': 'http://www.extremetube.com/video/music-video-14-british-euro-brit-european-cumshots-swallow-652431',
'md5': '1fb9228f5e3332ec8c057d6ac36f33e0', 'md5': '1fb9228f5e3332ec8c057d6ac36f33e0',
@ -31,7 +33,7 @@ class ExtremeTubeIE(InfoExtractor):
def _real_extract(self, url): def _real_extract(self, url):
mobj = re.match(self._VALID_URL, url) mobj = re.match(self._VALID_URL, url)
video_id = mobj.group('videoid') video_id = mobj.group('id')
url = 'http://www.' + mobj.group('url') url = 'http://www.' + mobj.group('url')
req = compat_urllib_request.Request(url) req = compat_urllib_request.Request(url)

View File

@ -1,19 +1,20 @@
#! -*- coding: utf-8 -*- #! -*- coding: utf-8 -*-
from __future__ import unicode_literals from __future__ import unicode_literals
import re
import hashlib import hashlib
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
ExtractorError,
compat_urllib_request, compat_urllib_request,
compat_urlparse, compat_urlparse,
) )
from ..utils import (
ExtractorError,
)
class FC2IE(InfoExtractor): class FC2IE(InfoExtractor):
_VALID_URL = r'^http://video\.fc2\.com/((?P<lang>[^/]+)/)?content/(?P<id>[^/]+)' _VALID_URL = r'^http://video\.fc2\.com/(?:[^/]+/)?content/(?P<id>[^/]+)'
IE_NAME = 'fc2' IE_NAME = 'fc2'
_TEST = { _TEST = {
'url': 'http://video.fc2.com/en/content/20121103kUan1KHs', 'url': 'http://video.fc2.com/en/content/20121103kUan1KHs',
@ -26,9 +27,7 @@ class FC2IE(InfoExtractor):
} }
def _real_extract(self, url): def _real_extract(self, url):
mobj = re.match(self._VALID_URL, url) video_id = self._match_id(url)
video_id = mobj.group('id')
webpage = self._download_webpage(url, video_id) webpage = self._download_webpage(url, video_id)
self._downloader.cookiejar.clear_session_cookies() # must clear self._downloader.cookiejar.clear_session_cookies() # must clear

View File

@ -4,11 +4,13 @@ from __future__ import unicode_literals
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
ExtractorError,
compat_urllib_parse, compat_urllib_parse,
compat_urllib_request, compat_urllib_request,
) )
from ..utils import (
ExtractorError,
)
class FiredriveIE(InfoExtractor): class FiredriveIE(InfoExtractor):
@ -28,11 +30,8 @@ class FiredriveIE(InfoExtractor):
}] }]
def _real_extract(self, url): def _real_extract(self, url):
mobj = re.match(self._VALID_URL, url) video_id = self._match_id(url)
video_id = mobj.group('id')
url = 'http://firedrive.com/file/%s' % video_id url = 'http://firedrive.com/file/%s' % video_id
webpage = self._download_webpage(url, video_id) webpage = self._download_webpage(url, video_id)
if re.search(self._FILE_DELETED_REGEX, webpage) is not None: if re.search(self._FILE_DELETED_REGEX, webpage) is not None:

View File

@ -3,12 +3,14 @@ from __future__ import unicode_literals
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_request, compat_urllib_request,
unified_strdate, )
str_to_int, from ..utils import (
parse_duration,
clean_html, clean_html,
parse_duration,
str_to_int,
unified_strdate,
) )
@ -31,9 +33,7 @@ class FourTubeIE(InfoExtractor):
} }
def _real_extract(self, url): def _real_extract(self, url):
mobj = re.match(self._VALID_URL, url) video_id = self._match_id(url)
video_id = mobj.group('id')
webpage_url = 'http://www.4tube.com/videos/' + video_id webpage_url = 'http://www.4tube.com/videos/' + video_id
webpage = self._download_webpage(webpage_url, video_id) webpage = self._download_webpage(webpage_url, video_id)

View File

@ -5,7 +5,7 @@ import json
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_parse_qs, compat_parse_qs,
compat_urlparse, compat_urlparse,
) )

View File

@ -6,13 +6,15 @@ import re
import json import json
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urlparse,
ExtractorError,
clean_html,
parse_duration,
compat_urllib_parse_urlparse, compat_urllib_parse_urlparse,
compat_urlparse,
)
from ..utils import (
clean_html,
ExtractorError,
int_or_none, int_or_none,
parse_duration,
) )

View File

@ -4,9 +4,11 @@ import re
import json import json
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_parse, compat_urllib_parse,
compat_urlparse, compat_urlparse,
)
from ..utils import (
unescapeHTML, unescapeHTML,
) )

View File

@ -3,7 +3,7 @@ from __future__ import unicode_literals
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_parse, compat_urllib_parse,
compat_urllib_request, compat_urllib_request,
) )

View File

@ -2,8 +2,10 @@
from __future__ import unicode_literals from __future__ import unicode_literals
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urlparse, compat_urlparse,
)
from ..utils import (
determine_ext, determine_ext,
) )

View File

@ -4,7 +4,7 @@ import itertools
import re import re
from .common import SearchInfoExtractor from .common import SearchInfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_parse, compat_urllib_parse,
) )

View File

@ -4,11 +4,12 @@ from __future__ import unicode_literals
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
ExtractorError,
determine_ext,
compat_urllib_parse, compat_urllib_parse,
compat_urllib_request, compat_urllib_request,
)
from ..utils import (
ExtractorError,
int_or_none, int_or_none,
) )
@ -106,7 +107,6 @@ class GorillaVidIE(InfoExtractor):
formats = [{ formats = [{
'format_id': 'sd', 'format_id': 'sd',
'url': video_url, 'url': video_url,
'ext': determine_ext(video_url),
'quality': 1, 'quality': 1,
}] }]

View File

@ -4,9 +4,11 @@ from __future__ import unicode_literals
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..compat import (
compat_urllib_request,
)
from ..utils import ( from ..utils import (
ExtractorError, ExtractorError,
compat_urllib_request,
int_or_none, int_or_none,
urlencode_postdata, urlencode_postdata,
) )
@ -30,9 +32,7 @@ class HostingBulkIE(InfoExtractor):
} }
def _real_extract(self, url): def _real_extract(self, url):
mobj = re.match(self._VALID_URL, url) video_id = self._match_id(url)
video_id = mobj.group('id')
url = 'http://hostingbulk.com/{0:}.html'.format(video_id) url = 'http://hostingbulk.com/{0:}.html'.format(video_id)
# Custom request with cookie to set language to English, so our file # Custom request with cookie to set language to English, so our file

View File

@ -1,20 +1,20 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import json import json
import re
import time import time
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_parse, compat_urllib_parse,
compat_urllib_request, compat_urllib_request,
)
from ..utils import (
ExtractorError, ExtractorError,
) )
class HypemIE(InfoExtractor): class HypemIE(InfoExtractor):
_VALID_URL = r'http://(?:www\.)?hypem\.com/track/([^/]+)/([^/]+)' _VALID_URL = r'http://(?:www\.)?hypem\.com/track/(?P<id>[^/]+)/'
_TEST = { _TEST = {
'url': 'http://hypem.com/track/1v6ga/BODYWORK+-+TAME', 'url': 'http://hypem.com/track/1v6ga/BODYWORK+-+TAME',
'md5': 'b9cc91b5af8995e9f0c1cee04c575828', 'md5': 'b9cc91b5af8995e9f0c1cee04c575828',
@ -27,8 +27,7 @@ class HypemIE(InfoExtractor):
} }
def _real_extract(self, url): def _real_extract(self, url):
mobj = re.match(self._VALID_URL, url) track_id = self._match_id(url)
track_id = mobj.group(1)
data = {'ax': 1, 'ts': time.time()} data = {'ax': 1, 'ts': time.time()}
data_encoded = compat_urllib_parse.urlencode(data) data_encoded = compat_urllib_parse.urlencode(data)

View File

@ -4,7 +4,7 @@ import re
import json import json
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urlparse, compat_urlparse,
) )

View File

@ -1,10 +1,9 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import base64 import base64
import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_parse, compat_urllib_parse,
) )
@ -24,9 +23,7 @@ class InfoQIE(InfoExtractor):
} }
def _real_extract(self, url): def _real_extract(self, url):
mobj = re.match(self._VALID_URL, url) video_id = self._match_id(url)
video_id = mobj.group('id')
webpage = self._download_webpage(url, video_id) webpage = self._download_webpage(url, video_id)
video_title = self._html_search_regex(r'<title>(.*?)</title>', webpage, 'title') video_title = self._html_search_regex(r'<title>(.*?)</title>', webpage, 'title')

View File

@ -3,9 +3,11 @@ from __future__ import unicode_literals
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urlparse, compat_urlparse,
compat_urllib_parse, compat_urllib_parse,
)
from ..utils import (
xpath_with_ns, xpath_with_ns,
) )

View File

@ -6,8 +6,10 @@ from random import random
from math import floor from math import floor
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_request, compat_urllib_request,
)
from ..utils import (
ExtractorError, ExtractorError,
) )

View File

@ -5,8 +5,10 @@ import re
import json import json
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_request, compat_urllib_request,
)
from ..utils import (
ExtractorError, ExtractorError,
) )

View File

@ -4,7 +4,7 @@ import os
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_parse_urlparse, compat_urllib_parse_urlparse,
compat_urllib_request, compat_urllib_request,
compat_urllib_parse, compat_urllib_parse,
@ -15,7 +15,7 @@ from ..aes import (
class KeezMoviesIE(InfoExtractor): class KeezMoviesIE(InfoExtractor):
_VALID_URL = r'^https?://(?:www\.)?keezmovies\.com/video/.+?(?P<videoid>[0-9]+)(?:[/?&]|$)' _VALID_URL = r'https?://(?:www\.)?keezmovies\.com/video/.+?(?P<id>[0-9]+)(?:[/?&]|$)'
_TEST = { _TEST = {
'url': 'http://www.keezmovies.com/video/petite-asian-lady-mai-playing-in-bathtub-1214711', 'url': 'http://www.keezmovies.com/video/petite-asian-lady-mai-playing-in-bathtub-1214711',
'file': '1214711.mp4', 'file': '1214711.mp4',
@ -27,8 +27,7 @@ class KeezMoviesIE(InfoExtractor):
} }
def _real_extract(self, url): def _real_extract(self, url):
mobj = re.match(self._VALID_URL, url) video_id = self._match_id(url)
video_id = mobj.group('videoid')
req = compat_urllib_request.Request(url) req = compat_urllib_request.Request(url)
req.add_header('Cookie', 'age_verified=1') req.add_header('Cookie', 'age_verified=1')

View File

@ -4,10 +4,12 @@ import re
import json import json
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_str, compat_str,
compat_urllib_parse_urlparse, compat_urllib_parse_urlparse,
compat_urlparse, compat_urlparse,
)
from ..utils import (
ExtractorError, ExtractorError,
find_xpath_attr, find_xpath_attr,
int_or_none, int_or_none,

View File

@ -5,12 +5,14 @@ import json
from .subtitles import SubtitlesInfoExtractor from .subtitles import SubtitlesInfoExtractor
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_str,
compat_urllib_parse, compat_urllib_parse,
compat_urllib_request, compat_urllib_request,
)
from ..utils import (
ExtractorError, ExtractorError,
int_or_none, int_or_none,
compat_str,
) )

View File

@ -1,43 +1,33 @@
# coding: utf-8
from __future__ import unicode_literals from __future__ import unicode_literals
import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_parse, compat_urllib_parse,
) )
class MalemotionIE(InfoExtractor): class MalemotionIE(InfoExtractor):
_VALID_URL = r'^(?:https?://)?malemotion\.com/video/(.+?)\.(?P<id>.+?)(#|$)' _VALID_URL = r'https?://malemotion\.com/video/(.+?)\.(?P<id>.+?)(#|$)'
_TEST = { _TEST = {
'url': 'http://malemotion.com/video/bien-dur.10ew', 'url': 'http://malemotion.com/video/bete-de-concours.ltc',
'file': '10ew.mp4', 'md5': '3013e53a0afbde2878bc39998c33e8a5',
'md5': 'b3cc49f953b107e4a363cdff07d100ce',
'info_dict': { 'info_dict': {
"title": "Bien dur", 'id': 'ltc',
"age_limit": 18, 'ext': 'mp4',
'title': 'Bête de Concours',
'age_limit': 18,
}, },
'skip': 'This video has been deleted.'
} }
def _real_extract(self, url): def _real_extract(self, url):
mobj = re.match(self._VALID_URL, url) video_id = self._match_id(url)
video_id = mobj.group("id")
webpage = self._download_webpage(url, video_id) webpage = self._download_webpage(url, video_id)
self.report_extraction(video_id) video_url = compat_urllib_parse.unquote(self._search_regex(
r'<source type="video/mp4" src="(.+?)"', webpage, 'video URL'))
# Extract video URL
video_url = compat_urllib_parse.unquote(
self._search_regex(r'<source type="video/mp4" src="(.+?)"', webpage, 'video URL'))
# Extract title
video_title = self._html_search_regex( video_title = self._html_search_regex(
r'<title>(.*?)</title', webpage, 'title') r'<title>(.*?)</title', webpage, 'title')
# Extract video thumbnail
video_thumbnail = self._search_regex( video_thumbnail = self._search_regex(
r'<video .+?poster="(.+?)"', webpage, 'thumbnail', fatal=False) r'<video .+?poster="(.+?)"', webpage, 'thumbnail', fatal=False)
@ -47,14 +37,12 @@ class MalemotionIE(InfoExtractor):
'format_id': 'mp4', 'format_id': 'mp4',
'preference': 1, 'preference': 1,
}] }]
self._sort_formats(formats)
return { return {
'id': video_id, 'id': video_id,
'formats': formats, 'formats': formats,
'uploader': None,
'upload_date': None,
'title': video_title, 'title': video_title,
'thumbnail': video_thumbnail, 'thumbnail': video_thumbnail,
'description': None,
'age_limit': 18, 'age_limit': 18,
} }

View File

@ -3,10 +3,12 @@ from __future__ import unicode_literals
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_parse_qs, compat_parse_qs,
compat_urllib_parse, compat_urllib_parse,
compat_urllib_request, compat_urllib_request,
)
from ..utils import (
determine_ext, determine_ext,
ExtractorError, ExtractorError,
int_or_none, int_or_none,

View File

@ -5,8 +5,10 @@ import json
from .common import InfoExtractor from .common import InfoExtractor
from .youtube import YoutubeIE from .youtube import YoutubeIE
from ..utils import ( from ..compat import (
compat_urlparse, compat_urlparse,
)
from ..utils import (
clean_html, clean_html,
ExtractorError, ExtractorError,
get_element_by_id, get_element_by_id,

View File

@ -1,12 +1,13 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import re
import json import json
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_parse, compat_urllib_parse,
compat_urlparse, compat_urlparse,
)
from ..utils import (
get_element_by_attribute, get_element_by_attribute,
parse_duration, parse_duration,
strip_jsonp, strip_jsonp,
@ -15,7 +16,7 @@ from ..utils import (
class MiTeleIE(InfoExtractor): class MiTeleIE(InfoExtractor):
IE_NAME = 'mitele.es' IE_NAME = 'mitele.es'
_VALID_URL = r'http://www\.mitele\.es/[^/]+/[^/]+/[^/]+/(?P<episode>[^/]+)/' _VALID_URL = r'http://www\.mitele\.es/[^/]+/[^/]+/[^/]+/(?P<id>[^/]+)/'
_TEST = { _TEST = {
'url': 'http://www.mitele.es/programas-tv/diario-de/la-redaccion/programa-144/', 'url': 'http://www.mitele.es/programas-tv/diario-de/la-redaccion/programa-144/',
@ -31,12 +32,10 @@ class MiTeleIE(InfoExtractor):
} }
def _real_extract(self, url): def _real_extract(self, url):
mobj = re.match(self._VALID_URL, url) episode = self._match_id(url)
episode = mobj.group('episode')
webpage = self._download_webpage(url, episode) webpage = self._download_webpage(url, episode)
embed_data_json = self._search_regex( embed_data_json = self._search_regex(
r'MSV\.embedData\[.*?\]\s*=\s*({.*?});', webpage, 'embed data', r'(?s)MSV\.embedData\[.*?\]\s*=\s*({.*?});', webpage, 'embed data',
flags=re.DOTALL
).replace('\'', '"') ).replace('\'', '"')
embed_data = json.loads(embed_data_json) embed_data = json.loads(embed_data_json)

View File

@ -3,8 +3,10 @@ from __future__ import unicode_literals
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_parse, compat_urllib_parse,
)
from ..utils import (
ExtractorError, ExtractorError,
HEADRequest, HEADRequest,
int_or_none, int_or_none,

View File

@ -5,10 +5,12 @@ import json
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
ExtractorError,
compat_urllib_parse, compat_urllib_parse,
compat_urllib_request, compat_urllib_request,
)
from ..utils import (
ExtractorError,
int_or_none, int_or_none,
) )

View File

@ -4,7 +4,7 @@ import os
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_parse_urlparse, compat_urllib_parse_urlparse,
compat_urllib_request, compat_urllib_request,
compat_urllib_parse, compat_urllib_parse,
@ -12,7 +12,7 @@ from ..utils import (
class MofosexIE(InfoExtractor): class MofosexIE(InfoExtractor):
_VALID_URL = r'^https?://(?:www\.)?(?P<url>mofosex\.com/videos/(?P<videoid>[0-9]+)/.*?\.html)' _VALID_URL = r'https?://(?:www\.)?(?P<url>mofosex\.com/videos/(?P<id>[0-9]+)/.*?\.html)'
_TEST = { _TEST = {
'url': 'http://www.mofosex.com/videos/5018/japanese-teen-music-video.html', 'url': 'http://www.mofosex.com/videos/5018/japanese-teen-music-video.html',
'md5': '1b2eb47ac33cc75d4a80e3026b613c5a', 'md5': '1b2eb47ac33cc75d4a80e3026b613c5a',
@ -26,7 +26,7 @@ class MofosexIE(InfoExtractor):
def _real_extract(self, url): def _real_extract(self, url):
mobj = re.match(self._VALID_URL, url) mobj = re.match(self._VALID_URL, url)
video_id = mobj.group('videoid') video_id = mobj.group('id')
url = 'http://www.' + mobj.group('url') url = 'http://www.' + mobj.group('url')
req = compat_urllib_request.Request(url) req = compat_urllib_request.Request(url)

View File

@ -5,7 +5,7 @@ import os.path
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_parse, compat_urllib_parse,
compat_urllib_request, compat_urllib_request,
) )
@ -37,10 +37,9 @@ class MonikerIE(InfoExtractor):
}] }]
def _real_extract(self, url): def _real_extract(self, url):
mobj = re.match(self._VALID_URL, url) video_id = self._match_id(url)
video_id = mobj.group('id')
orig_webpage = self._download_webpage(url, video_id) orig_webpage = self._download_webpage(url, video_id)
fields = re.findall(r'type="hidden" name="(.+?)"\s* value="?(.+?)">', orig_webpage) fields = re.findall(r'type="hidden" name="(.+?)"\s* value="?(.+?)">', orig_webpage)
data = dict(fields) data = dict(fields)

View File

@ -4,11 +4,13 @@ import re
import time import time
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
ExtractorError,
compat_urllib_request, compat_urllib_request,
compat_urllib_parse, compat_urllib_parse,
) )
from ..utils import (
ExtractorError,
)
class MooshareIE(InfoExtractor): class MooshareIE(InfoExtractor):
@ -43,9 +45,7 @@ class MooshareIE(InfoExtractor):
] ]
def _real_extract(self, url): def _real_extract(self, url):
mobj = re.match(self._VALID_URL, url) video_id = self._match_id(url)
video_id = mobj.group('id')
page = self._download_webpage(url, video_id, 'Downloading page') page = self._download_webpage(url, video_id, 'Downloading page')
if re.search(r'>Video Not Found or Deleted<', page) is not None: if re.search(r'>Video Not Found or Deleted<', page) is not None:

View File

@ -3,13 +3,14 @@ from __future__ import unicode_literals
import hashlib import hashlib
import json import json
import re
import time import time
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_parse_qs, compat_parse_qs,
compat_str, compat_str,
)
from ..utils import (
int_or_none, int_or_none,
) )
@ -32,10 +33,9 @@ class MotorsportIE(InfoExtractor):
} }
def _real_extract(self, url): def _real_extract(self, url):
mobj = re.match(self._VALID_URL, url) display_id = self._match_id(url)
display_id = mobj.group('id')
webpage = self._download_webpage(url, display_id) webpage = self._download_webpage(url, display_id)
flashvars_code = self._html_search_regex( flashvars_code = self._html_search_regex(
r'<embed id="player".*?flashvars="([^"]+)"', webpage, 'flashvars') r'<embed id="player".*?flashvars="([^"]+)"', webpage, 'flashvars')
flashvars = compat_parse_qs(flashvars_code) flashvars = compat_parse_qs(flashvars_code)

View File

@ -3,9 +3,11 @@ from __future__ import unicode_literals
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..compat import (
compat_str,
)
from ..utils import ( from ..utils import (
ExtractorError, ExtractorError,
compat_str,
clean_html, clean_html,
) )

View File

@ -3,9 +3,11 @@ from __future__ import unicode_literals
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_parse, compat_urllib_parse,
compat_urllib_request, compat_urllib_request,
)
from ..utils import (
ExtractorError, ExtractorError,
find_xpath_attr, find_xpath_attr,
fix_xml_ampersands, fix_xml_ampersands,

View File

@ -2,9 +2,10 @@ from __future__ import unicode_literals
import os.path import os.path
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_parse_urlparse, compat_urllib_parse_urlparse,
)
from ..utils import (
ExtractorError, ExtractorError,
) )

View File

@ -4,8 +4,10 @@ from __future__ import unicode_literals
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_parse, compat_urllib_parse,
)
from ..utils import (
ExtractorError, ExtractorError,
clean_html, clean_html,
) )
@ -26,9 +28,9 @@ class NaverIE(InfoExtractor):
} }
def _real_extract(self, url): def _real_extract(self, url):
mobj = re.match(self._VALID_URL, url) video_id = self._match_id(url)
video_id = mobj.group(1)
webpage = self._download_webpage(url, video_id) webpage = self._download_webpage(url, video_id)
m_id = re.search(r'var rmcPlayer = new nhn.rmcnmv.RMCVideoPlayer\("(.+?)", "(.+?)"', m_id = re.search(r'var rmcPlayer = new nhn.rmcnmv.RMCVideoPlayer\("(.+?)", "(.+?)"',
webpage) webpage)
if m_id is None: if m_id is None:

View File

@ -4,8 +4,10 @@ import re
import json import json
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_str, compat_str,
)
from ..utils import (
ExtractorError, ExtractorError,
find_xpath_attr, find_xpath_attr,
) )

View File

@ -1,9 +1,7 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_request, compat_urllib_request,
compat_urllib_parse, compat_urllib_parse,
) )
@ -12,7 +10,7 @@ from ..utils import (
class NFBIE(InfoExtractor): class NFBIE(InfoExtractor):
IE_NAME = 'nfb' IE_NAME = 'nfb'
IE_DESC = 'National Film Board of Canada' IE_DESC = 'National Film Board of Canada'
_VALID_URL = r'https?://(?:www\.)?(nfb|onf)\.ca/film/(?P<id>[\da-z_-]+)' _VALID_URL = r'https?://(?:www\.)?(?:nfb|onf)\.ca/film/(?P<id>[\da-z_-]+)'
_TEST = { _TEST = {
'url': 'https://www.nfb.ca/film/qallunaat_why_white_people_are_funny', 'url': 'https://www.nfb.ca/film/qallunaat_why_white_people_are_funny',
@ -32,10 +30,10 @@ class NFBIE(InfoExtractor):
} }
def _real_extract(self, url): def _real_extract(self, url):
mobj = re.match(self._VALID_URL, url) video_id = self._match_id(url)
video_id = mobj.group('id') page = self._download_webpage(
'https://www.nfb.ca/film/%s' % video_id, video_id,
page = self._download_webpage('https://www.nfb.ca/film/%s' % video_id, video_id, 'Downloading film page') 'Downloading film page')
uploader_id = self._html_search_regex(r'<a class="director-link" href="/explore-all-directors/([^/]+)/"', uploader_id = self._html_search_regex(r'<a class="director-link" href="/explore-all-directors/([^/]+)/"',
page, 'director id', fatal=False) page, 'director id', fatal=False)

View File

@ -4,9 +4,11 @@ from __future__ import unicode_literals
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..compat import (
compat_urllib_parse_urlparse,
)
from ..utils import ( from ..utils import (
ExtractorError, ExtractorError,
compat_urllib_parse_urlparse,
int_or_none, int_or_none,
remove_end, remove_end,
) )

View File

@ -5,14 +5,16 @@ import re
import json import json
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_parse, compat_urllib_parse,
compat_urllib_request, compat_urllib_request,
compat_urlparse, compat_urlparse,
unified_strdate, )
parse_duration, from ..utils import (
int_or_none,
ExtractorError, ExtractorError,
int_or_none,
parse_duration,
unified_strdate,
) )

View File

@ -6,13 +6,15 @@ import time
import hashlib import hashlib
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_request,
compat_urllib_parse,
ExtractorError,
clean_html,
unified_strdate,
compat_str, compat_str,
compat_urllib_parse,
compat_urllib_request,
)
from ..utils import (
clean_html,
ExtractorError,
unified_strdate,
) )

View File

@ -4,9 +4,11 @@ from __future__ import unicode_literals
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..compat import (
compat_urllib_request,
)
from ..utils import ( from ..utils import (
ExtractorError, ExtractorError,
compat_urllib_request,
urlencode_postdata, urlencode_postdata,
xpath_text, xpath_text,
xpath_with_ns, xpath_with_ns,
@ -32,8 +34,7 @@ class NosVideoIE(InfoExtractor):
} }
def _real_extract(self, url): def _real_extract(self, url):
mobj = re.match(self._VALID_URL, url) video_id = self._match_id(url)
video_id = mobj.group('id')
fields = { fields = {
'id': video_id, 'id': video_id,

View File

@ -3,9 +3,11 @@ from __future__ import unicode_literals
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..compat import (
compat_urlparse,
)
from ..utils import ( from ..utils import (
ExtractorError, ExtractorError,
compat_urlparse
) )

View File

@ -3,15 +3,17 @@ from __future__ import unicode_literals
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..compat import (
compat_urllib_request,
)
from ..utils import ( from ..utils import (
parse_duration, parse_duration,
unified_strdate, unified_strdate,
compat_urllib_request,
) )
class NuvidIE(InfoExtractor): class NuvidIE(InfoExtractor):
_VALID_URL = r'^https?://(?:www|m)\.nuvid\.com/video/(?P<id>[0-9]+)' _VALID_URL = r'https?://(?:www|m)\.nuvid\.com/video/(?P<id>[0-9]+)'
_TEST = { _TEST = {
'url': 'http://m.nuvid.com/video/1310741/', 'url': 'http://m.nuvid.com/video/1310741/',
'md5': 'eab207b7ac4fccfb4e23c86201f11277', 'md5': 'eab207b7ac4fccfb4e23c86201f11277',
@ -26,8 +28,7 @@ class NuvidIE(InfoExtractor):
} }
def _real_extract(self, url): def _real_extract(self, url):
mobj = re.match(self._VALID_URL, url) video_id = self._match_id(url)
video_id = mobj.group('id')
formats = [] formats = []

View File

@ -4,16 +4,17 @@ import json
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import compat_urllib_parse from ..compat import compat_urllib_parse
class PhotobucketIE(InfoExtractor): class PhotobucketIE(InfoExtractor):
_VALID_URL = r'http://(?:[a-z0-9]+\.)?photobucket\.com/.*(([\?\&]current=)|_)(?P<id>.*)\.(?P<ext>(flv)|(mp4))' _VALID_URL = r'http://(?:[a-z0-9]+\.)?photobucket\.com/.*(([\?\&]current=)|_)(?P<id>.*)\.(?P<ext>(flv)|(mp4))'
_TEST = { _TEST = {
'url': 'http://media.photobucket.com/user/rachaneronas/media/TiredofLinkBuildingTryBacklinkMyDomaincom_zpsc0c3b9fa.mp4.html?filters[term]=search&filters[primary]=videos&filters[secondary]=images&sort=1&o=0', 'url': 'http://media.photobucket.com/user/rachaneronas/media/TiredofLinkBuildingTryBacklinkMyDomaincom_zpsc0c3b9fa.mp4.html?filters[term]=search&filters[primary]=videos&filters[secondary]=images&sort=1&o=0',
'file': 'zpsc0c3b9fa.mp4',
'md5': '7dabfb92b0a31f6c16cebc0f8e60ff99', 'md5': '7dabfb92b0a31f6c16cebc0f8e60ff99',
'info_dict': { 'info_dict': {
'id': 'zpsc0c3b9fa',
'ext': 'mp4',
'timestamp': 1367669341, 'timestamp': 1367669341,
'upload_date': '20130504', 'upload_date': '20130504',
'uploader': 'rachaneronas', 'uploader': 'rachaneronas',

View File

@ -5,11 +5,13 @@ import re
import os.path import os.path
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
ExtractorError,
compat_urllib_parse, compat_urllib_parse,
compat_urllib_request, compat_urllib_request,
) )
from ..utils import (
ExtractorError,
)
class PlayedIE(InfoExtractor): class PlayedIE(InfoExtractor):
@ -28,7 +30,6 @@ class PlayedIE(InfoExtractor):
def _real_extract(self, url): def _real_extract(self, url):
video_id = self._match_id(url) video_id = self._match_id(url)
orig_webpage = self._download_webpage(url, video_id) orig_webpage = self._download_webpage(url, video_id)
m_error = re.search( m_error = re.search(

View File

@ -4,9 +4,11 @@ from __future__ import unicode_literals
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_parse, compat_urllib_parse,
compat_urllib_request, compat_urllib_request,
)
from ..utils import (
ExtractorError, ExtractorError,
float_or_none, float_or_none,
int_or_none, int_or_none,

View File

@ -3,31 +3,31 @@ from __future__ import unicode_literals
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
ExtractorError,
clean_html,
compat_urllib_parse, compat_urllib_parse,
) )
from ..utils import (
clean_html,
ExtractorError,
)
class PlayvidIE(InfoExtractor): class PlayvidIE(InfoExtractor):
_VALID_URL = r'^https?://www\.playvid\.com/watch(\?v=|/)(?P<id>.+?)(?:#|$)' _VALID_URL = r'https?://www\.playvid\.com/watch(\?v=|/)(?P<id>.+?)(?:#|$)'
_TEST = { _TEST = {
'url': 'http://www.playvid.com/watch/agbDDi7WZTV', 'url': 'http://www.playvid.com/watch/RnmBNgtrrJu',
'md5': '44930f8afa616efdf9482daf4fe53e1e', 'md5': 'ffa2f6b2119af359f544388d8c01eb6c',
'info_dict': { 'info_dict': {
'id': 'agbDDi7WZTV', 'id': 'RnmBNgtrrJu',
'ext': 'mp4', 'ext': 'mp4',
'title': 'Michelle Lewin in Miami Beach', 'title': 'md5:9256d01c6317e3f703848b5906880dc8',
'duration': 240, 'duration': 82,
'age_limit': 18, 'age_limit': 18,
} }
} }
def _real_extract(self, url): def _real_extract(self, url):
mobj = re.match(self._VALID_URL, url) video_id = self._match_id(url)
video_id = mobj.group('id')
webpage = self._download_webpage(url, video_id) webpage = self._download_webpage(url, video_id)
m_error = re.search( m_error = re.search(

View File

@ -4,10 +4,12 @@ import os
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_parse,
compat_urllib_parse_urlparse, compat_urllib_parse_urlparse,
compat_urllib_request, compat_urllib_request,
compat_urllib_parse, )
from ..utils import (
str_to_int, str_to_int,
) )
from ..aes import ( from ..aes import (
@ -16,7 +18,7 @@ from ..aes import (
class PornHubIE(InfoExtractor): class PornHubIE(InfoExtractor):
_VALID_URL = r'^https?://(?:www\.)?pornhub\.com/view_video\.php\?viewkey=(?P<id>[0-9a-f]+)' _VALID_URL = r'https?://(?:www\.)?pornhub\.com/view_video\.php\?viewkey=(?P<id>[0-9a-f]+)'
_TEST = { _TEST = {
'url': 'http://www.pornhub.com/view_video.php?viewkey=648719015', 'url': 'http://www.pornhub.com/view_video.php?viewkey=648719015',
'md5': '882f488fa1f0026f023f33576004a2ed', 'md5': '882f488fa1f0026f023f33576004a2ed',

View File

@ -4,12 +4,14 @@ from __future__ import unicode_literals
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
ExtractorError,
determine_ext,
compat_urllib_parse, compat_urllib_parse,
compat_urllib_request, compat_urllib_request,
) )
from ..utils import (
determine_ext,
ExtractorError,
)
class PromptFileIE(InfoExtractor): class PromptFileIE(InfoExtractor):

View File

@ -5,8 +5,10 @@ import re
from hashlib import sha1 from hashlib import sha1
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_parse, compat_urllib_parse,
)
from ..utils import (
unified_strdate, unified_strdate,
) )

View File

@ -3,8 +3,10 @@ from __future__ import unicode_literals
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urlparse, compat_urlparse,
)
from ..utils import (
determine_ext, determine_ext,
int_or_none, int_or_none,
) )

View File

@ -3,10 +3,12 @@ from __future__ import unicode_literals
import re import re
from .subtitles import SubtitlesInfoExtractor from .subtitles import SubtitlesInfoExtractor
from ..compat import (
compat_urllib_parse,
)
from ..utils import ( from ..utils import (
parse_duration, parse_duration,
unified_strdate, unified_strdate,
compat_urllib_parse,
) )

View File

@ -4,12 +4,14 @@ from __future__ import unicode_literals
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..compat import (
compat_str,
)
from ..utils import ( from ..utils import (
int_or_none, int_or_none,
parse_duration, parse_duration,
parse_iso8601, parse_iso8601,
unescapeHTML, unescapeHTML,
compat_str,
) )

View File

@ -5,10 +5,12 @@ import re
import itertools import itertools
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_str, compat_str,
unified_strdate, )
from ..utils import (
ExtractorError, ExtractorError,
unified_strdate,
) )
@ -36,9 +38,7 @@ class RutubeIE(InfoExtractor):
} }
def _real_extract(self, url): def _real_extract(self, url):
mobj = re.match(self._VALID_URL, url) video_id = self._match_id(url)
video_id = mobj.group('id')
video = self._download_json( video = self._download_json(
'http://rutube.ru/api/video/%s/?format=json' % video_id, 'http://rutube.ru/api/video/%s/?format=json' % video_id,
video_id, 'Downloading video JSON') video_id, 'Downloading video JSON')
@ -114,8 +114,7 @@ class RutubeMovieIE(RutubeChannelIE):
_PAGE_TEMPLATE = 'http://rutube.ru/api/metainfo/tv/%s/video?page=%s&format=json' _PAGE_TEMPLATE = 'http://rutube.ru/api/metainfo/tv/%s/video?page=%s&format=json'
def _real_extract(self, url): def _real_extract(self, url):
mobj = re.match(self._VALID_URL, url) movie_id = self._match_id(url)
movie_id = mobj.group('id')
movie = self._download_json( movie = self._download_json(
self._MOVIE_TEMPLATE % movie_id, movie_id, self._MOVIE_TEMPLATE % movie_id, movie_id,
'Downloading movie JSON') 'Downloading movie JSON')

View File

@ -1,14 +1,14 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import unicode_literals from __future__ import unicode_literals
import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
ExtractorError,
compat_parse_qs, compat_parse_qs,
compat_urllib_request, compat_urllib_request,
) )
from ..utils import (
ExtractorError,
)
class ScreencastIE(InfoExtractor): class ScreencastIE(InfoExtractor):
@ -57,8 +57,7 @@ class ScreencastIE(InfoExtractor):
] ]
def _real_extract(self, url): def _real_extract(self, url):
mobj = re.match(self._VALID_URL, url) video_id = self._match_id(url)
video_id = mobj.group('id')
webpage = self._download_webpage(url, video_id) webpage = self._download_webpage(url, video_id)
video_url = self._html_search_regex( video_url = self._html_search_regex(

View File

@ -4,10 +4,12 @@ import re
import base64 import base64
from .common import InfoExtractor from .common import InfoExtractor
from ..compat import (
compat_urllib_parse,
compat_urllib_request,
)
from ..utils import ( from ..utils import (
ExtractorError, ExtractorError,
compat_urllib_request,
compat_urllib_parse,
int_or_none, int_or_none,
) )
@ -26,26 +28,30 @@ class SharedIE(InfoExtractor):
} }
def _real_extract(self, url): def _real_extract(self, url):
mobj = re.match(self._VALID_URL, url) video_id = self._match_id(url)
video_id = mobj.group('id') webpage = self._download_webpage(url, video_id)
page = self._download_webpage(url, video_id) if '>File does not exist<' in webpage:
raise ExtractorError(
'Video %s does not exist' % video_id, expected=True)
if re.search(r'>File does not exist<', page) is not None: download_form = dict(re.findall(
raise ExtractorError('Video %s does not exist' % video_id, expected=True) r'<input type="hidden" name="([^"]+)" value="([^"]*)"', webpage))
request = compat_urllib_request.Request(
download_form = dict(re.findall(r'<input type="hidden" name="([^"]+)" value="([^"]*)"', page)) url, compat_urllib_parse.urlencode(download_form))
request = compat_urllib_request.Request(url, compat_urllib_parse.urlencode(download_form))
request.add_header('Content-Type', 'application/x-www-form-urlencoded') request.add_header('Content-Type', 'application/x-www-form-urlencoded')
video_page = self._download_webpage(request, video_id, 'Downloading video page') video_page = self._download_webpage(
request, video_id, 'Downloading video page')
video_url = self._html_search_regex(r'data-url="([^"]+)"', video_page, 'video URL') video_url = self._html_search_regex(
title = base64.b64decode(self._html_search_meta('full:title', page, 'title')).decode('utf-8') r'data-url="([^"]+)"', video_page, 'video URL')
filesize = int_or_none(self._html_search_meta('full:size', page, 'file size', fatal=False)) title = base64.b64decode(self._html_search_meta(
'full:title', webpage, 'title')).decode('utf-8')
filesize = int_or_none(self._html_search_meta(
'full:size', webpage, 'file size', fatal=False))
thumbnail = self._html_search_regex( thumbnail = self._html_search_regex(
r'data-poster="([^"]+)"', video_page, 'thumbnail', fatal=False, default=None) r'data-poster="([^"]+)"', video_page, 'thumbnail', default=None)
return { return {
'id': video_id, 'id': video_id,

View File

@ -4,9 +4,11 @@ from __future__ import unicode_literals
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_parse, compat_urllib_parse,
compat_urllib_request, compat_urllib_request,
)
from ..utils import (
parse_duration, parse_duration,
) )

View File

@ -4,7 +4,7 @@ from __future__ import unicode_literals
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_request, compat_urllib_request,
compat_urllib_parse, compat_urllib_parse,
) )

View File

@ -4,8 +4,10 @@ import re
import json import json
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urlparse, compat_urlparse,
)
from ..utils import (
ExtractorError, ExtractorError,
) )

View File

@ -7,9 +7,11 @@ import hashlib
import uuid import uuid
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_parse, compat_urllib_parse,
compat_urllib_request, compat_urllib_request,
)
from ..utils import (
ExtractorError, ExtractorError,
int_or_none, int_or_none,
unified_strdate, unified_strdate,

View File

@ -1,13 +1,16 @@
# coding: utf-8 # coding: utf-8
from __future__ import unicode_literals from __future__ import unicode_literals
from ..utils import ( import re
ExtractorError,
from ..compat import (
compat_urllib_parse, compat_urllib_parse,
compat_urllib_request, compat_urllib_request,
determine_ext,
) )
import re from ..utils import (
determine_ext,
ExtractorError,
)
from .common import InfoExtractor from .common import InfoExtractor
@ -27,9 +30,7 @@ class SockshareIE(InfoExtractor):
} }
def _real_extract(self, url): def _real_extract(self, url):
mobj = re.match(self._VALID_URL, url) video_id = self._match_id(url)
video_id = mobj.group('id')
url = 'http://sockshare.com/file/%s' % video_id url = 'http://sockshare.com/file/%s' % video_id
webpage = self._download_webpage(url, video_id) webpage = self._download_webpage(url, video_id)

View File

@ -5,11 +5,12 @@ import re
import itertools import itertools
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_str, compat_str,
compat_urlparse, compat_urlparse,
compat_urllib_parse, compat_urllib_parse,
)
from ..utils import (
ExtractorError, ExtractorError,
int_or_none, int_or_none,
unified_strdate, unified_strdate,

View File

@ -3,12 +3,14 @@ from __future__ import unicode_literals
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_parse,
compat_urllib_parse_urlparse, compat_urllib_parse_urlparse,
compat_urllib_request, compat_urllib_request,
compat_urllib_parse, )
unified_strdate, from ..utils import (
str_to_int, str_to_int,
unified_strdate,
) )
from ..aes import aes_decrypt_text from ..aes import aes_decrypt_text

View File

@ -4,8 +4,10 @@ from __future__ import unicode_literals
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_request, compat_urllib_request,
)
from ..utils import (
parse_iso8601, parse_iso8601,
) )

View File

@ -5,7 +5,7 @@ import re
import time import time
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_parse, compat_urllib_parse,
compat_urllib_request, compat_urllib_request,
) )

View File

@ -1,13 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import unicode_literals from __future__ import unicode_literals
import re
import json
from .common import InfoExtractor from .common import InfoExtractor
from ..compat import (
compat_str,
)
from ..utils import ( from ..utils import (
int_or_none, int_or_none,
) )

View File

@ -4,10 +4,12 @@ from __future__ import unicode_literals
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
ExtractorError,
clean_html,
compat_urllib_request, compat_urllib_request,
)
from ..utils import (
clean_html,
ExtractorError,
float_or_none, float_or_none,
parse_iso8601, parse_iso8601,
) )

View File

@ -5,7 +5,7 @@ import re
from .subtitles import SubtitlesInfoExtractor from .subtitles import SubtitlesInfoExtractor
from ..utils import ( from ..compat import (
compat_str, compat_str,
) )

View File

@ -4,8 +4,10 @@ import re
import json import json
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_str, compat_str,
)
from ..utils import (
determine_ext, determine_ext,
ExtractorError, ExtractorError,
xpath_with_ns, xpath_with_ns,

View File

@ -5,7 +5,7 @@ import re
from .common import InfoExtractor from .common import InfoExtractor
from .brightcove import BrightcoveIE from .brightcove import BrightcoveIE
from .discovery import DiscoveryIE from .discovery import DiscoveryIE
from ..utils import compat_urlparse from ..compat import compat_urlparse
class TlcIE(DiscoveryIE): class TlcIE(DiscoveryIE):

View File

@ -4,9 +4,11 @@ import json
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_parse_urlparse, compat_urllib_parse_urlparse,
compat_urllib_request, compat_urllib_request,
)
from ..utils import (
int_or_none, int_or_none,
str_to_int, str_to_int,
) )

View File

@ -1,10 +1,9 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import base64 import base64
import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import compat_parse_qs from ..compat import compat_parse_qs
class TutvIE(InfoExtractor): class TutvIE(InfoExtractor):
@ -20,10 +19,9 @@ class TutvIE(InfoExtractor):
} }
def _real_extract(self, url): def _real_extract(self, url):
mobj = re.match(self._VALID_URL, url) video_id = self._match_id(url)
video_id = mobj.group('id')
webpage = self._download_webpage(url, video_id) webpage = self._download_webpage(url, video_id)
internal_id = self._search_regex(r'codVideo=([0-9]+)', webpage, 'internal video ID') internal_id = self._search_regex(r'codVideo=([0-9]+)', webpage, 'internal video ID')
data_content = self._download_webpage( data_content = self._download_webpage(

View File

@ -5,9 +5,11 @@ import itertools
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_parse, compat_urllib_parse,
compat_urllib_request, compat_urllib_request,
)
from ..utils import (
ExtractorError, ExtractorError,
parse_iso8601, parse_iso8601,
) )

View File

@ -3,9 +3,11 @@ from __future__ import unicode_literals
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_parse, compat_urllib_parse,
compat_urllib_request, compat_urllib_request,
)
from ..utils import (
ExtractorError, ExtractorError,
) )

View File

@ -1,11 +1,11 @@
# coding: utf-8 # coding: utf-8
from __future__ import unicode_literals from __future__ import unicode_literals
import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urllib_parse, compat_urllib_parse,
)
from ..utils import (
unified_strdate, unified_strdate,
) )

View File

@ -3,7 +3,7 @@ from __future__ import unicode_literals
import re import re
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..compat import (
compat_urlparse, compat_urlparse,
) )

Some files were not shown because too many files have changed in this diff Show More