fix links to ytdl issues

This commit is contained in:
Lauren Liberda 2021-03-04 14:22:51 +01:00 committed by Dominika
parent b02f30e9e9
commit 99ae610f74
44 changed files with 110 additions and 110 deletions

View file

@ -906,7 +906,7 @@ class HaruhiDL(object):
# url_transparent. In such cases outer metadata (from ie_result) # url_transparent. In such cases outer metadata (from ie_result)
# should be propagated to inner one (info). For this to happen # should be propagated to inner one (info). For this to happen
# _type of info should be overridden with url_transparent. This # _type of info should be overridden with url_transparent. This
# fixes issue from https://github.com/ytdl-org/haruhi-dl/pull/11163. # fixes issue from https://github.com/ytdl-org/youtube-dl/pull/11163.
if new_result.get('_type') == 'url': if new_result.get('_type') == 'url':
new_result['_type'] = 'url_transparent' new_result['_type'] = 'url_transparent'
@ -914,7 +914,7 @@ class HaruhiDL(object):
new_result, download=download, extra_info=extra_info) new_result, download=download, extra_info=extra_info)
elif result_type in ('playlist', 'multi_video'): elif result_type in ('playlist', 'multi_video'):
# Protect from infinite recursion due to recursively nested playlists # Protect from infinite recursion due to recursively nested playlists
# (see https://github.com/hdl-org/haruhi-dl/issues/27833) # (see https://github.com/ytdl-org/youtube-dl/issues/27833)
webpage_url = ie_result['webpage_url'] webpage_url = ie_result['webpage_url']
if webpage_url in self._playlist_urls: if webpage_url in self._playlist_urls:
self.to_screen( self.to_screen(
@ -1649,7 +1649,7 @@ class HaruhiDL(object):
# by extractor are incomplete or not (i.e. whether extractor provides only # by extractor are incomplete or not (i.e. whether extractor provides only
# video-only or audio-only formats) for proper formats selection for # video-only or audio-only formats) for proper formats selection for
# extractors with such incomplete formats (see # extractors with such incomplete formats (see
# https://github.com/ytdl-org/haruhi-dl/pull/5556). # https://github.com/ytdl-org/youtube-dl/pull/5556).
# Since formats may be filtered during format selection and may not match # Since formats may be filtered during format selection and may not match
# the original formats the results may be incorrect. Thus original formats # the original formats the results may be incorrect. Thus original formats
# or pre-calculated metrics should be passed to format selection routines # or pre-calculated metrics should be passed to format selection routines
@ -1657,7 +1657,7 @@ class HaruhiDL(object):
# We will pass a context object containing all necessary additional data # We will pass a context object containing all necessary additional data
# instead of just formats. # instead of just formats.
# This fixes incorrect format selection issue (see # This fixes incorrect format selection issue (see
# https://github.com/ytdl-org/haruhi-dl/issues/10083). # https://github.com/ytdl-org/youtube-dl/issues/10083).
incomplete_formats = ( incomplete_formats = (
# All formats are video-only or # All formats are video-only or
all(f.get('vcodec') != 'none' and f.get('acodec') == 'none' for f in formats) all(f.get('vcodec') != 'none' and f.get('acodec') == 'none' for f in formats)
@ -1864,7 +1864,7 @@ class HaruhiDL(object):
if sub_info.get('data') is not None: if sub_info.get('data') is not None:
try: try:
# Use newline='' to prevent conversion of newline characters # Use newline='' to prevent conversion of newline characters
# See https://github.com/ytdl-org/haruhi-dl/issues/10268 # See https://github.com/ytdl-org/youtube-dl/issues/10268
with io.open(encodeFilename(sub_filename), 'w', encoding='utf-8', newline='') as subfile: with io.open(encodeFilename(sub_filename), 'w', encoding='utf-8', newline='') as subfile:
subfile.write(sub_info['data']) subfile.write(sub_info['data'])
except (OSError, IOError): except (OSError, IOError):
@ -2283,7 +2283,7 @@ class HaruhiDL(object):
return return
if type('') is not compat_str: if type('') is not compat_str:
# Python 2.6 on SLES11 SP1 (https://github.com/ytdl-org/haruhi-dl/issues/3326) # Python 2.6 on SLES11 SP1 (https://github.com/ytdl-org/youtube-dl/issues/3326)
self.report_warning( self.report_warning(
'Your Python is broken! Update to a newer and supported version') 'Your Python is broken! Update to a newer and supported version')
@ -2377,7 +2377,7 @@ class HaruhiDL(object):
proxies = {'http': opts_proxy, 'https': opts_proxy} proxies = {'http': opts_proxy, 'https': opts_proxy}
else: else:
proxies = compat_urllib_request.getproxies() proxies = compat_urllib_request.getproxies()
# Set HTTPS proxy to HTTP one if given (https://github.com/ytdl-org/haruhi-dl/issues/805) # Set HTTPS proxy to HTTP one if given (https://github.com/ytdl-org/youtube-dl/issues/805)
if 'http' in proxies and 'https' not in proxies: if 'http' in proxies and 'https' not in proxies:
proxies['https'] = proxies['http'] proxies['https'] = proxies['http']
proxy_handler = PerRequestProxyHandler(proxies) proxy_handler = PerRequestProxyHandler(proxies)
@ -2391,7 +2391,7 @@ class HaruhiDL(object):
# When passing our own FileHandler instance, build_opener won't add the # When passing our own FileHandler instance, build_opener won't add the
# default FileHandler and allows us to disable the file protocol, which # default FileHandler and allows us to disable the file protocol, which
# can be used for malicious purposes (see # can be used for malicious purposes (see
# https://github.com/ytdl-org/haruhi-dl/issues/8227) # https://github.com/ytdl-org/youtube-dl/issues/8227)
file_handler = compat_urllib_request.FileHandler() file_handler = compat_urllib_request.FileHandler()
def file_open(*args, **kwargs): def file_open(*args, **kwargs):
@ -2403,7 +2403,7 @@ class HaruhiDL(object):
# Delete the default user-agent header, which would otherwise apply in # Delete the default user-agent header, which would otherwise apply in
# cases where our custom HTTP handler doesn't come into play # cases where our custom HTTP handler doesn't come into play
# (See https://github.com/ytdl-org/haruhi-dl/issues/1309 for details) # (See https://github.com/ytdl-org/youtube-dl/issues/1309 for details)
opener.addheaders = [] opener.addheaders = []
self._opener = opener self._opener = opener

View file

@ -50,7 +50,7 @@ from .HaruhiDL import HaruhiDL
def _real_main(argv=None): def _real_main(argv=None):
# Compatibility fixes for Windows # Compatibility fixes for Windows
if sys.platform == 'win32': if sys.platform == 'win32':
# https://github.com/ytdl-org/haruhi-dl/issues/820 # https://github.com/ytdl-org/youtube-dl/issues/820
codecs.register(lambda name: codecs.lookup('utf-8') if name == 'cp65001' else None) codecs.register(lambda name: codecs.lookup('utf-8') if name == 'cp65001' else None)
workaround_optparse_bug9161() workaround_optparse_bug9161()

View file

@ -2375,7 +2375,7 @@ except ImportError: # Python 2
# HACK: The following are the correct unquote_to_bytes, unquote and unquote_plus # HACK: The following are the correct unquote_to_bytes, unquote and unquote_plus
# implementations from cpython 3.4.3's stdlib. Python 2's version # implementations from cpython 3.4.3's stdlib. Python 2's version
# is apparently broken (see https://github.com/ytdl-org/haruhi-dl/pull/6244) # is apparently broken (see https://github.com/ytdl-org/youtube-dl/pull/6244)
def compat_urllib_parse_unquote_to_bytes(string): def compat_urllib_parse_unquote_to_bytes(string):
"""unquote_to_bytes('abc%20def') -> b'abc def'.""" """unquote_to_bytes('abc%20def') -> b'abc def'."""
@ -2850,7 +2850,7 @@ else:
compat_socket_create_connection = socket.create_connection compat_socket_create_connection = socket.create_connection
# Fix https://github.com/ytdl-org/haruhi-dl/issues/4223 # Fix https://github.com/ytdl-org/youtube-dl/issues/4223
# See http://bugs.python.org/issue9161 for what is broken # See http://bugs.python.org/issue9161 for what is broken
def workaround_optparse_bug9161(): def workaround_optparse_bug9161():
op = optparse.OptionParser() op = optparse.OptionParser()
@ -2975,7 +2975,7 @@ if platform.python_implementation() == 'PyPy' and sys.pypy_version_info < (5, 4,
# PyPy2 prior to version 5.4.0 expects byte strings as Windows function # PyPy2 prior to version 5.4.0 expects byte strings as Windows function
# names, see the original PyPy issue [1] and the haruhi-dl one [2]. # names, see the original PyPy issue [1] and the haruhi-dl one [2].
# 1. https://bitbucket.org/pypy/pypy/issues/2360/windows-ctypescdll-typeerror-function-name # 1. https://bitbucket.org/pypy/pypy/issues/2360/windows-ctypescdll-typeerror-function-name
# 2. https://github.com/ytdl-org/haruhi-dl/pull/4392 # 2. https://github.com/ytdl-org/youtube-dl/pull/4392
def compat_ctypes_WINFUNCTYPE(*args, **kwargs): def compat_ctypes_WINFUNCTYPE(*args, **kwargs):
real = ctypes.WINFUNCTYPE(*args, **kwargs) real = ctypes.WINFUNCTYPE(*args, **kwargs)

View file

@ -240,7 +240,7 @@ class FFmpegFD(ExternalFD):
# setting -seekable prevents ffmpeg from guessing if the server # setting -seekable prevents ffmpeg from guessing if the server
# supports seeking(by adding the header `Range: bytes=0-`), which # supports seeking(by adding the header `Range: bytes=0-`), which
# can cause problems in some cases # can cause problems in some cases
# https://github.com/ytdl-org/haruhi-dl/issues/11800#issuecomment-275037127 # https://github.com/ytdl-org/youtube-dl/issues/11800#issuecomment-275037127
# http://trac.ffmpeg.org/ticket/6125#comment:10 # http://trac.ffmpeg.org/ticket/6125#comment:10
args += ['-seekable', '1' if seekable else '0'] args += ['-seekable', '1' if seekable else '0']
@ -341,7 +341,7 @@ class FFmpegFD(ExternalFD):
# mp4 file couldn't be played, but if we ask ffmpeg to quit it # mp4 file couldn't be played, but if we ask ffmpeg to quit it
# produces a file that is playable (this is mostly useful for live # produces a file that is playable (this is mostly useful for live
# streams). Note that Windows is not affected and produces playable # streams). Note that Windows is not affected and produces playable
# files (see https://github.com/ytdl-org/haruhi-dl/issues/8300). # files (see https://github.com/ytdl-org/youtube-dl/issues/8300).
if sys.platform != 'win32': if sys.platform != 'win32':
proc.communicate(b'q') proc.communicate(b'q')
raise raise

View file

@ -324,8 +324,8 @@ class F4mFD(FragmentFD):
urlh = self.hdl.urlopen(self._prepare_url(info_dict, man_url)) urlh = self.hdl.urlopen(self._prepare_url(info_dict, man_url))
man_url = urlh.geturl() man_url = urlh.geturl()
# Some manifests may be malformed, e.g. prosiebensat1 generated manifests # Some manifests may be malformed, e.g. prosiebensat1 generated manifests
# (see https://github.com/ytdl-org/haruhi-dl/issues/6215#issuecomment-121704244 # (see https://github.com/ytdl-org/youtube-dl/issues/6215#issuecomment-121704244
# and https://github.com/ytdl-org/haruhi-dl/issues/7823) # and https://github.com/ytdl-org/youtube-dl/issues/7823)
manifest = fix_xml_ampersands(urlh.read().decode('utf-8', 'ignore')).strip() manifest = fix_xml_ampersands(urlh.read().decode('utf-8', 'ignore')).strip()
doc = compat_etree_fromstring(manifest) doc = compat_etree_fromstring(manifest)
@ -409,7 +409,7 @@ class F4mFD(FragmentFD):
# In tests, segments may be truncated, and thus # In tests, segments may be truncated, and thus
# FlvReader may not be able to parse the whole # FlvReader may not be able to parse the whole
# chunk. If so, write the segment as is # chunk. If so, write the segment as is
# See https://github.com/ytdl-org/haruhi-dl/issues/9214 # See https://github.com/ytdl-org/youtube-dl/issues/9214
dest_stream.write(down_data) dest_stream.write(down_data)
break break
raise raise

View file

@ -154,8 +154,8 @@ class HlsFD(FragmentFD):
except compat_urllib_error.HTTPError as err: except compat_urllib_error.HTTPError as err:
# Unavailable (possibly temporary) fragments may be served. # Unavailable (possibly temporary) fragments may be served.
# First we try to retry then either skip or abort. # First we try to retry then either skip or abort.
# See https://github.com/ytdl-org/haruhi-dl/issues/10165, # See https://github.com/ytdl-org/youtube-dl/issues/10165,
# https://github.com/ytdl-org/haruhi-dl/issues/10448). # https://github.com/ytdl-org/youtube-dl/issues/10448).
count += 1 count += 1
if count <= fragment_retries: if count <= fragment_retries:
self.report_retry_fragment(err, frag_index, count, fragment_retries) self.report_retry_fragment(err, frag_index, count, fragment_retries)
@ -173,7 +173,7 @@ class HlsFD(FragmentFD):
decrypt_info['KEY'] = decrypt_info.get('KEY') or self.hdl.urlopen( decrypt_info['KEY'] = decrypt_info.get('KEY') or self.hdl.urlopen(
self._prepare_url(info_dict, info_dict.get('_decryption_key_url') or decrypt_info['URI'])).read() self._prepare_url(info_dict, info_dict.get('_decryption_key_url') or decrypt_info['URI'])).read()
# Don't decrypt the content in tests since the data is explicitly truncated and it's not to a valid block # Don't decrypt the content in tests since the data is explicitly truncated and it's not to a valid block
# size (see https://github.com/hdl-org/haruhi-dl/pull/27660). Tests only care that the correct data downloaded, # size (see https://github.com/ytdl-org/youtube-dl/pull/27660). Tests only care that the correct data downloaded,
# not what it decrypts to. # not what it decrypts to.
if not test: if not test:
frag_content = AES.new( frag_content = AES.new(

View file

@ -118,7 +118,7 @@ class HttpFD(FileDownloader):
# to match the value of requested Range HTTP header. This is due to a webservers # to match the value of requested Range HTTP header. This is due to a webservers
# that don't support resuming and serve a whole file with no Content-Range # that don't support resuming and serve a whole file with no Content-Range
# set in response despite of requested Range (see # set in response despite of requested Range (see
# https://github.com/ytdl-org/haruhi-dl/issues/6057#issuecomment-126129799) # https://github.com/ytdl-org/youtube-dl/issues/6057#issuecomment-126129799)
if has_range: if has_range:
content_range = ctx.data.headers.get('Content-Range') content_range = ctx.data.headers.get('Content-Range')
if content_range: if content_range:

View file

@ -103,7 +103,7 @@ class ArkenaIE(InfoExtractor):
f_url, video_id, mpd_id=kind, fatal=False)) f_url, video_id, mpd_id=kind, fatal=False))
elif kind == 'silverlight': elif kind == 'silverlight':
# TODO: process when ism is supported (see # TODO: process when ism is supported (see
# https://github.com/ytdl-org/haruhi-dl/issues/8118) # https://github.com/ytdl-org/youtube-dl/issues/8118)
continue continue
else: else:
tbr = float_or_none(f.get('Bitrate'), 1000) tbr = float_or_none(f.get('Bitrate'), 1000)

View file

@ -204,7 +204,7 @@ class BBCCoUkIE(InfoExtractor):
}, },
'skip': 'Now it\'s really geo-restricted', 'skip': 'Now it\'s really geo-restricted',
}, { }, {
# compact player (https://github.com/ytdl-org/haruhi-dl/issues/8147) # compact player (https://github.com/ytdl-org/youtube-dl/issues/8147)
'url': 'http://www.bbc.co.uk/programmes/p028bfkf/player', 'url': 'http://www.bbc.co.uk/programmes/p028bfkf/player',
'info_dict': { 'info_dict': {
'id': 'p028bfkj', 'id': 'p028bfkj',

View file

@ -130,7 +130,7 @@ class BrightcoveLegacyIE(InfoExtractor):
'skip': 'Unsupported URL', 'skip': 'Unsupported URL',
}, },
{ {
# playlist with 'playlistTab' (https://github.com/ytdl-org/haruhi-dl/issues/9965) # playlist with 'playlistTab' (https://github.com/ytdl-org/youtube-dl/issues/9965)
'url': 'http://c.brightcove.com/services/json/experience/runtime/?command=get_programming_for_experience&playerKey=AQ%7E%7E,AAABXlLMdok%7E,NJ4EoMlZ4rZdx9eU1rkMVd8EaYPBBUlg', 'url': 'http://c.brightcove.com/services/json/experience/runtime/?command=get_programming_for_experience&playerKey=AQ%7E%7E,AAABXlLMdok%7E,NJ4EoMlZ4rZdx9eU1rkMVd8EaYPBBUlg',
'info_dict': { 'info_dict': {
'id': '1522758701001', 'id': '1522758701001',
@ -154,10 +154,10 @@ class BrightcoveLegacyIE(InfoExtractor):
<object class="BrightcoveExperience">{params}</object> <object class="BrightcoveExperience">{params}</object>
""" """
# Fix up some stupid HTML, see https://github.com/ytdl-org/haruhi-dl/issues/1553 # Fix up some stupid HTML, see https://github.com/ytdl-org/youtube-dl/issues/1553
object_str = re.sub(r'(<param(?:\s+[a-zA-Z0-9_]+="[^"]*")*)>', object_str = re.sub(r'(<param(?:\s+[a-zA-Z0-9_]+="[^"]*")*)>',
lambda m: m.group(1) + '/>', object_str) lambda m: m.group(1) + '/>', object_str)
# Fix up some stupid XML, see https://github.com/ytdl-org/haruhi-dl/issues/1608 # Fix up some stupid XML, see https://github.com/ytdl-org/youtube-dl/issues/1608
object_str = object_str.replace('<--', '<!--') object_str = object_str.replace('<--', '<!--')
# remove namespace to simplify extraction # remove namespace to simplify extraction
object_str = re.sub(r'(<object[^>]*)(xmlns=".*?")', r'\1', object_str) object_str = re.sub(r'(<object[^>]*)(xmlns=".*?")', r'\1', object_str)

View file

@ -157,7 +157,7 @@ class CeskaTelevizeIE(InfoExtractor):
stream_formats = self._extract_mpd_formats( stream_formats = self._extract_mpd_formats(
stream_url, playlist_id, stream_url, playlist_id,
mpd_id='dash-%s' % format_id, fatal=False) mpd_id='dash-%s' % format_id, fatal=False)
# See https://github.com/ytdl-org/haruhi-dl/issues/12119#issuecomment-280037031 # See https://github.com/ytdl-org/youtube-dl/issues/12119#issuecomment-280037031
if format_id == 'audioDescription': if format_id == 'audioDescription':
for f in stream_formats: for f in stream_formats:
f['source_preference'] = -10 f['source_preference'] = -10

View file

@ -1519,7 +1519,7 @@ class InfoExtractor(object):
manifest_url, video_id, 'Downloading f4m manifest', manifest_url, video_id, 'Downloading f4m manifest',
'Unable to download f4m manifest', 'Unable to download f4m manifest',
# Some manifests may be malformed, e.g. prosiebensat1 generated manifests # Some manifests may be malformed, e.g. prosiebensat1 generated manifests
# (see https://github.com/ytdl-org/haruhi-dl/issues/6215#issuecomment-121704244) # (see https://github.com/ytdl-org/youtube-dl/issues/6215#issuecomment-121704244)
transform_source=transform_source, transform_source=transform_source,
fatal=fatal, data=data, headers=headers, query=query) fatal=fatal, data=data, headers=headers, query=query)
@ -1550,7 +1550,7 @@ class InfoExtractor(object):
manifest_version = '2.0' manifest_version = '2.0'
media_nodes = manifest.findall('{http://ns.adobe.com/f4m/2.0}media') media_nodes = manifest.findall('{http://ns.adobe.com/f4m/2.0}media')
# Remove unsupported DRM protected media from final formats # Remove unsupported DRM protected media from final formats
# rendition (see https://github.com/ytdl-org/haruhi-dl/issues/8573). # rendition (see https://github.com/ytdl-org/youtube-dl/issues/8573).
media_nodes = remove_encrypted_media(media_nodes) media_nodes = remove_encrypted_media(media_nodes)
if not media_nodes: if not media_nodes:
return formats return formats
@ -1681,8 +1681,8 @@ class InfoExtractor(object):
# References: # References:
# 1. https://tools.ietf.org/html/draft-pantos-http-live-streaming-21 # 1. https://tools.ietf.org/html/draft-pantos-http-live-streaming-21
# 2. https://github.com/ytdl-org/haruhi-dl/issues/12211 # 2. https://github.com/ytdl-org/youtube-dl/issues/12211
# 3. https://github.com/ytdl-org/haruhi-dl/issues/18923 # 3. https://github.com/ytdl-org/youtube-dl/issues/18923
# We should try extracting formats only from master playlists [1, 4.3.4], # We should try extracting formats only from master playlists [1, 4.3.4],
# i.e. playlists that describe available qualities. On the other hand # i.e. playlists that describe available qualities. On the other hand
@ -2238,7 +2238,7 @@ class InfoExtractor(object):
# First of, % characters outside $...$ templates # First of, % characters outside $...$ templates
# must be escaped by doubling for proper processing # must be escaped by doubling for proper processing
# by % operator string formatting used further (see # by % operator string formatting used further (see
# https://github.com/ytdl-org/haruhi-dl/issues/16867). # https://github.com/ytdl-org/youtube-dl/issues/16867).
t = '' t = ''
in_template = False in_template = False
for c in tmpl: for c in tmpl:
@ -2257,7 +2257,7 @@ class InfoExtractor(object):
# @initialization is a regular template like @media one # @initialization is a regular template like @media one
# so it should be handled just the same way (see # so it should be handled just the same way (see
# https://github.com/ytdl-org/haruhi-dl/issues/11605) # https://github.com/ytdl-org/youtube-dl/issues/11605)
if 'initialization' in representation_ms_info: if 'initialization' in representation_ms_info:
initialization_template = prepare_template( initialization_template = prepare_template(
'initialization', 'initialization',
@ -2343,7 +2343,7 @@ class InfoExtractor(object):
elif 'segment_urls' in representation_ms_info: elif 'segment_urls' in representation_ms_info:
# Segment URLs with no SegmentTimeline # Segment URLs with no SegmentTimeline
# Example: https://www.seznam.cz/zpravy/clanek/cesko-zasahne-vitr-o-sile-vichrice-muze-byt-i-zivotu-nebezpecny-39091 # Example: https://www.seznam.cz/zpravy/clanek/cesko-zasahne-vitr-o-sile-vichrice-muze-byt-i-zivotu-nebezpecny-39091
# https://github.com/ytdl-org/haruhi-dl/pull/14844 # https://github.com/ytdl-org/youtube-dl/pull/14844
fragments = [] fragments = []
segment_duration = float_or_none( segment_duration = float_or_none(
representation_ms_info['segment_duration'], representation_ms_info['segment_duration'],
@ -2381,8 +2381,8 @@ class InfoExtractor(object):
# According to [1, 5.3.5.2, Table 7, page 35] @id of Representation # According to [1, 5.3.5.2, Table 7, page 35] @id of Representation
# is not necessarily unique within a Period thus formats with # is not necessarily unique within a Period thus formats with
# the same `format_id` are quite possible. There are numerous examples # the same `format_id` are quite possible. There are numerous examples
# of such manifests (see https://github.com/ytdl-org/haruhi-dl/issues/15111, # of such manifests (see https://github.com/ytdl-org/youtube-dl/issues/15111,
# https://github.com/ytdl-org/haruhi-dl/issues/13919) # https://github.com/ytdl-org/youtube-dl/issues/13919)
full_info = formats_dict.get(representation_id, {}).copy() full_info = formats_dict.get(representation_id, {}).copy()
full_info.update(f) full_info.update(f)
formats.append(full_info) formats.append(full_info)
@ -2545,7 +2545,7 @@ class InfoExtractor(object):
media_tags.extend(re.findall( media_tags.extend(re.findall(
# We only allow video|audio followed by a whitespace or '>'. # We only allow video|audio followed by a whitespace or '>'.
# Allowing more characters may end up in significant slow down (see # Allowing more characters may end up in significant slow down (see
# https://github.com/ytdl-org/haruhi-dl/issues/11979, example URL: # https://github.com/ytdl-org/youtube-dl/issues/11979, example URL:
# http://www.porntrex.com/maps/videositemap.xml). # http://www.porntrex.com/maps/videositemap.xml).
r'(?s)(<(?P<tag>(?:amp-)?(?:video|audio))(?:\s+[^>]*)?>)(.*?)</(?P=tag)>', webpage)) r'(?s)(<(?P<tag>(?:amp-)?(?:video|audio))(?:\s+[^>]*)?>)(.*?)</(?P=tag)>', webpage))
for media_tag, media_type, media_content in media_tags: for media_tag, media_type, media_content in media_tags:
@ -2940,7 +2940,7 @@ class InfoExtractor(object):
We will workaround this issue by resetting the cookie to We will workaround this issue by resetting the cookie to
the first one manually. the first one manually.
1. https://new.vk.com/ 1. https://new.vk.com/
2. https://github.com/ytdl-org/haruhi-dl/issues/9841#issuecomment-227871201 2. https://github.com/ytdl-org/youtube-dl/issues/9841#issuecomment-227871201
3. https://learning.oreilly.com/ 3. https://learning.oreilly.com/
""" """
for header, cookies in url_handle.headers.items(): for header, cookies in url_handle.headers.items():

View file

@ -36,7 +36,7 @@ class UnicodeBOMIE(InfoExtractor):
_VALID_URL = r'(?P<bom>\ufeff)(?P<id>.*)$' _VALID_URL = r'(?P<bom>\ufeff)(?P<id>.*)$'
# Disable test for python 3.2 since BOM is broken in re in this version # Disable test for python 3.2 since BOM is broken in re in this version
# (see https://github.com/ytdl-org/haruhi-dl/issues/9751) # (see https://github.com/ytdl-org/youtube-dl/issues/9751)
_TESTS = [] if (3, 0) < sys.version_info <= (3, 3) else [{ _TESTS = [] if (3, 0) < sys.version_info <= (3, 3) else [{
'url': '\ufeffhttp://www.youtube.com/watch?v=BaW_jenozKc', 'url': '\ufeffhttp://www.youtube.com/watch?v=BaW_jenozKc',
'only_matching': True, 'only_matching': True,

View file

@ -112,7 +112,7 @@ class CrunchyrollBaseIE(InfoExtractor):
# > This content may be inappropriate for some people. # > This content may be inappropriate for some people.
# > Are you sure you want to continue? # > Are you sure you want to continue?
# since it's not disabled by default in crunchyroll account's settings. # since it's not disabled by default in crunchyroll account's settings.
# See https://github.com/ytdl-org/haruhi-dl/issues/7202. # See https://github.com/ytdl-org/youtube-dl/issues/7202.
qs['skip_wall'] = ['1'] qs['skip_wall'] = ['1']
return compat_urlparse.urlunparse( return compat_urlparse.urlunparse(
parsed_url._replace(query=compat_urllib_parse_urlencode(qs, True))) parsed_url._replace(query=compat_urllib_parse_urlencode(qs, True)))
@ -267,7 +267,7 @@ class CrunchyrollIE(CrunchyrollBaseIE, VRVIE):
request = (url_or_request if isinstance(url_or_request, compat_urllib_request.Request) request = (url_or_request if isinstance(url_or_request, compat_urllib_request.Request)
else sanitized_Request(url_or_request)) else sanitized_Request(url_or_request))
# Accept-Language must be set explicitly to accept any language to avoid issues # Accept-Language must be set explicitly to accept any language to avoid issues
# similar to https://github.com/ytdl-org/haruhi-dl/issues/6797. # similar to https://github.com/ytdl-org/youtube-dl/issues/6797.
# Along with IP address Crunchyroll uses Accept-Language to guess whether georestriction # Along with IP address Crunchyroll uses Accept-Language to guess whether georestriction
# should be imposed or not (from what I can see it just takes the first language # should be imposed or not (from what I can see it just takes the first language
# ignoring the priority and requires it to correspond the IP). By the way this causes # ignoring the priority and requires it to correspond the IP). By the way this causes

View file

@ -114,7 +114,7 @@ class DreiSatIE(InfoExtractor):
video_url, video_id, fatal=False)) video_url, video_id, fatal=False))
elif ext == 'm3u8': elif ext == 'm3u8':
# the certificates are misconfigured (see # the certificates are misconfigured (see
# https://github.com/ytdl-org/haruhi-dl/issues/8665) # https://github.com/ytdl-org/youtube-dl/issues/8665)
if video_url.startswith('https://'): if video_url.startswith('https://'):
continue continue
formats.extend(self._extract_m3u8_formats( formats.extend(self._extract_m3u8_formats(

View file

@ -164,7 +164,7 @@ class FranceTVIE(InfoExtractor):
ext = determine_ext(video_url) ext = determine_ext(video_url)
if ext == 'f4m': if ext == 'f4m':
if georestricted: if georestricted:
# See https://github.com/ytdl-org/haruhi-dl/issues/3963 # See https://github.com/ytdl-org/youtube-dl/issues/3963
# m3u8 urls work fine # m3u8 urls work fine
continue continue
formats.extend(self._extract_f4m_formats( formats.extend(self._extract_f4m_formats(

View file

@ -487,7 +487,7 @@ class GenericIE(InfoExtractor):
}, },
}, },
{ {
# https://github.com/ytdl-org/haruhi-dl/issues/2253 # https://github.com/ytdl-org/youtube-dl/issues/2253
'url': 'http://bcove.me/i6nfkrc3', 'url': 'http://bcove.me/i6nfkrc3',
'md5': '0ba9446db037002366bab3b3eb30c88c', 'md5': '0ba9446db037002366bab3b3eb30c88c',
'info_dict': { 'info_dict': {
@ -512,7 +512,7 @@ class GenericIE(InfoExtractor):
}, },
}, },
{ {
# https://github.com/ytdl-org/haruhi-dl/issues/3541 # https://github.com/ytdl-org/youtube-dl/issues/3541
'add_ie': ['BrightcoveLegacy'], 'add_ie': ['BrightcoveLegacy'],
'url': 'http://www.kijk.nl/sbs6/leermijvrouwenkennen/videos/jqMiXKAYan2S/aflevering-1', 'url': 'http://www.kijk.nl/sbs6/leermijvrouwenkennen/videos/jqMiXKAYan2S/aflevering-1',
'info_dict': { 'info_dict': {
@ -976,7 +976,7 @@ class GenericIE(InfoExtractor):
} }
}, },
# Multiple brightcove videos # Multiple brightcove videos
# https://github.com/ytdl-org/haruhi-dl/issues/2283 # https://github.com/ytdl-org/youtube-dl/issues/2283
{ {
'url': 'http://www.newyorker.com/online/blogs/newsdesk/2014/01/always-never-nuclear-command-and-control.html', 'url': 'http://www.newyorker.com/online/blogs/newsdesk/2014/01/always-never-nuclear-command-and-control.html',
'info_dict': { 'info_dict': {
@ -2593,12 +2593,12 @@ class GenericIE(InfoExtractor):
return camtasia_res return camtasia_res
# Sometimes embedded video player is hidden behind percent encoding # Sometimes embedded video player is hidden behind percent encoding
# (e.g. https://github.com/ytdl-org/haruhi-dl/issues/2448) # (e.g. https://github.com/ytdl-org/youtube-dl/issues/2448)
# Unescaping the whole page allows to handle those cases in a generic way # Unescaping the whole page allows to handle those cases in a generic way
webpage = compat_urllib_parse_unquote(webpage) webpage = compat_urllib_parse_unquote(webpage)
# Unescape squarespace embeds to be detected by generic extractor, # Unescape squarespace embeds to be detected by generic extractor,
# see https://github.com/ytdl-org/haruhi-dl/issues/21294 # see https://github.com/ytdl-org/youtube-dl/issues/21294
webpage = re.sub( webpage = re.sub(
r'<div[^>]+class=[^>]*?\bsqs-video-wrapper\b[^>]*>', r'<div[^>]+class=[^>]*?\bsqs-video-wrapper\b[^>]*>',
lambda x: unescapeHTML(x.group(0)), webpage) lambda x: unescapeHTML(x.group(0)), webpage)
@ -3210,7 +3210,7 @@ class GenericIE(InfoExtractor):
jwplayer_data, video_id, require_title=False, base_url=url) jwplayer_data, video_id, require_title=False, base_url=url)
return merge_dicts(info, info_dict) return merge_dicts(info, info_dict)
except ExtractorError: except ExtractorError:
# See https://github.com/ytdl-org/haruhi-dl/pull/16735 # See https://github.com/ytdl-org/youtube-dl/pull/16735
pass pass
# Video.js embed # Video.js embed

View file

@ -36,7 +36,7 @@ class GoogleDriveIE(InfoExtractor):
} }
}, { }, {
# video can't be watched anonymously due to view count limit reached, # video can't be watched anonymously due to view count limit reached,
# but can be downloaded (see https://github.com/ytdl-org/haruhi-dl/issues/14046) # but can be downloaded (see https://github.com/ytdl-org/youtube-dl/issues/14046)
'url': 'https://drive.google.com/file/d/0B-vUyvmDLdWDcEt4WjBqcmI2XzQ/view', 'url': 'https://drive.google.com/file/d/0B-vUyvmDLdWDcEt4WjBqcmI2XzQ/view',
'md5': 'bfbd670d03a470bb1e6d4a257adec12e', 'md5': 'bfbd670d03a470bb1e6d4a257adec12e',
'info_dict': { 'info_dict': {

View file

@ -141,7 +141,7 @@ class InstagramIE(InfoExtractor):
lambda x: x['entry_data']['PostPage'][0]['media']), lambda x: x['entry_data']['PostPage'][0]['media']),
dict) dict)
# _sharedData.entry_data.PostPage is empty when authenticated (see # _sharedData.entry_data.PostPage is empty when authenticated (see
# https://github.com/hdl-org/haruhi-dl/pull/22880) # https://github.com/ytdl-org/youtube-dl/pull/22880)
if not media: if not media:
additional_data = self._parse_json( additional_data = self._parse_json(
self._search_regex( self._search_regex(

View file

@ -44,7 +44,7 @@ class LiveLeakIE(InfoExtractor):
}, },
'skip': 'Video is dead', 'skip': 'Video is dead',
}, { }, {
# Covers https://github.com/ytdl-org/haruhi-dl/pull/5983 # Covers https://github.com/ytdl-org/youtube-dl/pull/5983
# Multiple resolutions # Multiple resolutions
'url': 'http://www.liveleak.com/view?i=801_1409392012', 'url': 'http://www.liveleak.com/view?i=801_1409392012',
'md5': 'c3a449dbaca5c0d1825caecd52a57d7b', 'md5': 'c3a449dbaca5c0d1825caecd52a57d7b',
@ -57,7 +57,7 @@ class LiveLeakIE(InfoExtractor):
'thumbnail': r're:^https?://.*\.jpg$' 'thumbnail': r're:^https?://.*\.jpg$'
} }
}, { }, {
# Covers https://github.com/ytdl-org/haruhi-dl/pull/10664#issuecomment-247439521 # Covers https://github.com/ytdl-org/youtube-dl/pull/10664#issuecomment-247439521
'url': 'http://m.liveleak.com/view?i=763_1473349649', 'url': 'http://m.liveleak.com/view?i=763_1473349649',
'add_ie': ['Youtube'], 'add_ie': ['Youtube'],
'info_dict': { 'info_dict': {
@ -134,7 +134,7 @@ class LiveLeakIE(InfoExtractor):
# Removing '.*.mp4' gives the raw video, which is essentially # Removing '.*.mp4' gives the raw video, which is essentially
# the same video without the LiveLeak logo at the top (see # the same video without the LiveLeak logo at the top (see
# https://github.com/ytdl-org/haruhi-dl/pull/4768) # https://github.com/ytdl-org/youtube-dl/pull/4768)
orig_url = re.sub(r'\.mp4\.[^.]+', '', a_format['url']) orig_url = re.sub(r'\.mp4\.[^.]+', '', a_format['url'])
if a_format['url'] != orig_url: if a_format['url'] != orig_url:
format_id = a_format.get('format_id') format_id = a_format.get('format_id')

View file

@ -111,7 +111,7 @@ class MSNIE(InfoExtractor):
continue continue
if 'format=m3u8-aapl' in format_url: if 'format=m3u8-aapl' in format_url:
# m3u8_native should not be used here until # m3u8_native should not be used here until
# https://github.com/ytdl-org/haruhi-dl/issues/9913 is fixed # https://github.com/ytdl-org/youtube-dl/issues/9913 is fixed
formats.extend(self._extract_m3u8_formats( formats.extend(self._extract_m3u8_formats(
format_url, display_id, 'mp4', format_url, display_id, 'mp4',
m3u8_id='hls', fatal=False)) m3u8_id='hls', fatal=False))

View file

@ -108,7 +108,7 @@ class NHLIE(NHLBaseIE):
'timestamp': 1454544904, 'timestamp': 1454544904,
}, },
}, { }, {
# Some m3u8 URLs are invalid (https://github.com/ytdl-org/haruhi-dl/issues/10713) # Some m3u8 URLs are invalid (https://github.com/ytdl-org/youtube-dl/issues/10713)
'url': 'https://www.nhl.com/predators/video/poile-laviolette-on-subban-trade/t-277437416/c-44315003', 'url': 'https://www.nhl.com/predators/video/poile-laviolette-on-subban-trade/t-277437416/c-44315003',
'md5': '50b2bb47f405121484dda3ccbea25459', 'md5': '50b2bb47f405121484dda3ccbea25459',
'info_dict': { 'info_dict': {

View file

@ -115,7 +115,7 @@ class NocoIE(InfoExtractor):
# Timestamp adjustment offset between server time and local time # Timestamp adjustment offset between server time and local time
# must be calculated in order to use timestamps closest to server's # must be calculated in order to use timestamps closest to server's
# in all API requests (see https://github.com/ytdl-org/haruhi-dl/issues/7864) # in all API requests (see https://github.com/ytdl-org/youtube-dl/issues/7864)
webpage = self._download_webpage(url, video_id) webpage = self._download_webpage(url, video_id)
player_url = self._search_regex( player_url = self._search_regex(

View file

@ -21,7 +21,7 @@ class OnceIE(InfoExtractor):
progressive_formats = [] progressive_formats = []
for adaptive_format in formats: for adaptive_format in formats:
# Prevent advertisement from embedding into m3u8 playlist (see # Prevent advertisement from embedding into m3u8 playlist (see
# https://github.com/ytdl-org/haruhi-dl/issues/8893#issuecomment-199912684) # https://github.com/ytdl-org/youtube-dl/issues/8893#issuecomment-199912684)
adaptive_format['url'] = re.sub( adaptive_format['url'] = re.sub(
r'\badsegmentlength=\d+', r'adsegmentlength=0', adaptive_format['url']) r'\badsegmentlength=\d+', r'adsegmentlength=0', adaptive_format['url'])
rendition_id = self._search_regex( rendition_id = self._search_regex(

View file

@ -305,7 +305,7 @@ class PBSIE(InfoExtractor):
{ {
# Video embedded in iframe containing angle brackets as attribute's value (e.g. # Video embedded in iframe containing angle brackets as attribute's value (e.g.
# "<iframe style='position: absolute;<br />\ntop: 0; left: 0;' ...", see # "<iframe style='position: absolute;<br />\ntop: 0; left: 0;' ...", see
# https://github.com/ytdl-org/haruhi-dl/issues/7059) # https://github.com/ytdl-org/youtube-dl/issues/7059)
'url': 'http://www.pbs.org/food/features/a-chefs-life-season-3-episode-5-prickly-business/', 'url': 'http://www.pbs.org/food/features/a-chefs-life-season-3-episode-5-prickly-business/',
'md5': '59b0ef5009f9ac8a319cc5efebcd865e', 'md5': '59b0ef5009f9ac8a319cc5efebcd865e',
'info_dict': { 'info_dict': {
@ -348,7 +348,7 @@ class PBSIE(InfoExtractor):
}, },
}, },
{ {
# https://github.com/ytdl-org/haruhi-dl/issues/13801 # https://github.com/ytdl-org/youtube-dl/issues/13801
'url': 'https://www.pbs.org/video/pbs-newshour-full-episode-july-31-2017-1501539057/', 'url': 'https://www.pbs.org/video/pbs-newshour-full-episode-july-31-2017-1501539057/',
'info_dict': { 'info_dict': {
'id': '3003333873', 'id': '3003333873',
@ -642,7 +642,7 @@ class PBSIE(InfoExtractor):
# we won't try extracting them. # we won't try extracting them.
# Since summer 2016 higher quality formats (4500k and 6500k) are also available # Since summer 2016 higher quality formats (4500k and 6500k) are also available
# albeit they are not documented in [2]. # albeit they are not documented in [2].
# 1. https://github.com/ytdl-org/haruhi-dl/commit/cbc032c8b70a038a69259378c92b4ba97b42d491#commitcomment-17313656 # 1. https://github.com/ytdl-org/youtube-dl/commit/cbc032c8b70a038a69259378c92b4ba97b42d491#commitcomment-17313656
# 2. https://projects.pbs.org/confluence/display/coveapi/COVE+Video+Specifications # 2. https://projects.pbs.org/confluence/display/coveapi/COVE+Video+Specifications
if not bitrate or int(bitrate) < 400: if not bitrate or int(bitrate) < 400:
continue continue

View file

@ -327,7 +327,7 @@ query viewClip {
) )
# Some courses also offer widescreen resolution for high quality (see # Some courses also offer widescreen resolution for high quality (see
# https://github.com/ytdl-org/haruhi-dl/issues/7766) # https://github.com/ytdl-org/youtube-dl/issues/7766)
widescreen = course.get('supportsWideScreenVideoFormats') is True widescreen = course.get('supportsWideScreenVideoFormats') is True
best_quality = 'high-widescreen' if widescreen else 'high' best_quality = 'high-widescreen' if widescreen else 'high'
if widescreen: if widescreen:
@ -388,8 +388,8 @@ query viewClip {
# Pluralsight tracks multiple sequential calls to ViewClip API and start # Pluralsight tracks multiple sequential calls to ViewClip API and start
# to return 429 HTTP errors after some time (see # to return 429 HTTP errors after some time (see
# https://github.com/ytdl-org/haruhi-dl/pull/6989). Moreover it may even lead # https://github.com/ytdl-org/youtube-dl/pull/6989). Moreover it may even lead
# to account ban (see https://github.com/ytdl-org/haruhi-dl/issues/6842). # to account ban (see https://github.com/ytdl-org/youtube-dl/issues/6842).
# To somewhat reduce the probability of these consequences # To somewhat reduce the probability of these consequences
# we will sleep random amount of time before each call to ViewClip. # we will sleep random amount of time before each call to ViewClip.
self._sleep( self._sleep(

View file

@ -477,7 +477,7 @@ class PornHubPlaylistBaseIE(PornHubBaseIE):
def _extract_entries(self, webpage, host): def _extract_entries(self, webpage, host):
# Only process container div with main playlist content skipping # Only process container div with main playlist content skipping
# drop-down menu that uses similar pattern for videos (see # drop-down menu that uses similar pattern for videos (see
# https://github.com/ytdl-org/haruhi-dl/issues/11594). # https://github.com/ytdl-org/youtube-dl/issues/11594).
container = self._search_regex( container = self._search_regex(
r'(?s)(<div[^>]+class=["\']container.+)', webpage, r'(?s)(<div[^>]+class=["\']container.+)', webpage,
'container', default=webpage) 'container', default=webpage)
@ -515,7 +515,7 @@ class PornHubUserIE(PornHubPlaylistBaseIE):
}, { }, {
# Unavailable via /videos page, but available with direct pagination # Unavailable via /videos page, but available with direct pagination
# on pornstar page (see [1]), requires premium # on pornstar page (see [1]), requires premium
# 1. https://github.com/hdl-org/haruhi-dl/issues/27853 # 1. https://github.com/ytdl-org/youtube-dl/issues/27853
'url': 'https://www.pornhubpremium.com/pornstar/sienna-west', 'url': 'https://www.pornhubpremium.com/pornstar/sienna-west',
'only_matching': True, 'only_matching': True,
}, { }, {
@ -568,7 +568,7 @@ class PornHubPagedPlaylistBaseIE(PornHubPlaylistBaseIE):
except ExtractorError as e: except ExtractorError as e:
# Some sources may not be available via /videos page, # Some sources may not be available via /videos page,
# trying to fallback to main page pagination (see [1]) # trying to fallback to main page pagination (see [1])
# 1. https://github.com/hdl-org/haruhi-dl/issues/27853 # 1. https://github.com/ytdl-org/youtube-dl/issues/27853
if is_404(e) and page_num == first_page and VIDEOS in base_url: if is_404(e) and page_num == first_page and VIDEOS in base_url:
base_url = base_url.replace(VIDEOS, '') base_url = base_url.replace(VIDEOS, '')
webpage = download_page(base_url, page_num, fallback=True) webpage = download_page(base_url, page_num, fallback=True)

View file

@ -185,8 +185,8 @@ class ProSiebenSat1IE(ProSiebenSat1BaseIE):
_TESTS = [ _TESTS = [
{ {
# Tests changes introduced in https://github.com/ytdl-org/haruhi-dl/pull/6242 # Tests changes introduced in https://github.com/ytdl-org/youtube-dl/pull/6242
# in response to fixing https://github.com/ytdl-org/haruhi-dl/issues/6215: # in response to fixing https://github.com/ytdl-org/youtube-dl/issues/6215:
# - malformed f4m manifest support # - malformed f4m manifest support
# - proper handling of URLs starting with `https?://` in 2.0 manifests # - proper handling of URLs starting with `https?://` in 2.0 manifests
# - recursive child f4m manifests extraction # - recursive child f4m manifests extraction

View file

@ -96,7 +96,7 @@ class RadioCanadaIE(InfoExtractor):
return text return text
# protectionType does not necessarily mean the video is DRM protected (see # protectionType does not necessarily mean the video is DRM protected (see
# https://github.com/ytdl-org/haruhi-dl/pull/18609). # https://github.com/ytdl-org/youtube-dl/pull/18609).
if get_meta('protectionType'): if get_meta('protectionType'):
self.report_warning('This video is probably DRM protected.') self.report_warning('This video is probably DRM protected.')

View file

@ -63,7 +63,7 @@ class RtlNlIE(InfoExtractor):
'description': 'Er zijn nieuwe beelden vrijgegeven die vlak na de aanslag in Kopenhagen zijn gemaakt. Op de video is goed te zien hoe omstanders zich bekommeren om één van de slachtoffers, terwijl de eerste agenten ter plaatse komen.', 'description': 'Er zijn nieuwe beelden vrijgegeven die vlak na de aanslag in Kopenhagen zijn gemaakt. Op de video is goed te zien hoe omstanders zich bekommeren om één van de slachtoffers, terwijl de eerste agenten ter plaatse komen.',
} }
}, { }, {
# empty synopsis and missing episodes (see https://github.com/ytdl-org/haruhi-dl/issues/6275) # empty synopsis and missing episodes (see https://github.com/ytdl-org/youtube-dl/issues/6275)
# best format available nettv # best format available nettv
'url': 'http://www.rtl.nl/system/videoplayer/derden/rtlnieuws/video_embed.html#uuid=f536aac0-1dc3-4314-920e-3bd1c5b3811a/autoplay=false', 'url': 'http://www.rtl.nl/system/videoplayer/derden/rtlnieuws/video_embed.html#uuid=f536aac0-1dc3-4314-920e-3bd1c5b3811a/autoplay=false',
'info_dict': { 'info_dict': {

View file

@ -209,7 +209,7 @@ class ThePlatformIE(ThePlatformBaseIE, AdobePassIE):
return [m.group('url')] return [m.group('url')]
# Are whitesapces ignored in URLs? # Are whitesapces ignored in URLs?
# https://github.com/ytdl-org/haruhi-dl/issues/12044 # https://github.com/ytdl-org/youtube-dl/issues/12044
matches = re.findall( matches = re.findall(
r'(?s)<(?:iframe|script)[^>]+src=(["\'])((?:https?:)?//player\.theplatform\.com/p/.+?)\1', webpage) r'(?s)<(?:iframe|script)[^>]+src=(["\'])((?:https?:)?//player\.theplatform\.com/p/.+?)\1', webpage)
if matches: if matches:
@ -274,7 +274,7 @@ class ThePlatformIE(ThePlatformBaseIE, AdobePassIE):
if smuggled_data.get('force_smil_url', False): if smuggled_data.get('force_smil_url', False):
smil_url = url smil_url = url
# Explicitly specified SMIL (see https://github.com/ytdl-org/haruhi-dl/issues/7385) # Explicitly specified SMIL (see https://github.com/ytdl-org/youtube-dl/issues/7385)
elif '/guid/' in url: elif '/guid/' in url:
headers = {} headers = {}
source_url = smuggled_data.get('source_url') source_url = smuggled_data.get('source_url')

View file

@ -73,7 +73,7 @@ class TouTvIE(RadioCanadaIE):
'version': 4, 'version': 4,
}) })
# IsDrm does not necessarily mean the video is DRM protected (see # IsDrm does not necessarily mean the video is DRM protected (see
# https://github.com/ytdl-org/haruhi-dl/issues/13994). # https://github.com/ytdl-org/youtube-dl/issues/13994).
if metadata.get('IsDrm'): if metadata.get('IsDrm'):
self.report_warning('This video is probably DRM protected.', path) self.report_warning('This video is probably DRM protected.', path)
video_id = metadata['IdMedia'] video_id = metadata['IdMedia']

View file

@ -378,7 +378,7 @@ class UdemyIE(InfoExtractor):
}, res)) }, res))
# react rendition since 2017.04.15 (see # react rendition since 2017.04.15 (see
# https://github.com/ytdl-org/haruhi-dl/issues/12744) # https://github.com/ytdl-org/youtube-dl/issues/12744)
data = self._parse_json( data = self._parse_json(
self._search_regex( self._search_regex(
r'videojs-setup-data=(["\'])(?P<data>{.+?})\1', view_html, r'videojs-setup-data=(["\'])(?P<data>{.+?})\1', view_html,

View file

@ -168,7 +168,7 @@ class UstreamIE(InfoExtractor):
m = re.match(self._VALID_URL, url) m = re.match(self._VALID_URL, url)
video_id = m.group('id') video_id = m.group('id')
# some sites use this embed format (see: https://github.com/ytdl-org/haruhi-dl/issues/2990) # some sites use this embed format (see: https://github.com/ytdl-org/youtube-dl/issues/2990)
if m.group('type') == 'embed/recorded': if m.group('type') == 'embed/recorded':
video_id = m.group('id') video_id = m.group('id')
desktop_url = 'http://www.ustream.tv/recorded/' + video_id desktop_url = 'http://www.ustream.tv/recorded/' + video_id

View file

@ -54,7 +54,7 @@ class VeeHDIE(InfoExtractor):
video_id = self._match_id(url) video_id = self._match_id(url)
# VeeHD seems to send garbage on the first request. # VeeHD seems to send garbage on the first request.
# See https://github.com/ytdl-org/haruhi-dl/issues/2102 # See https://github.com/ytdl-org/youtube-dl/issues/2102
self._download_webpage(url, video_id, 'Requesting webpage') self._download_webpage(url, video_id, 'Requesting webpage')
webpage = self._download_webpage(url, video_id) webpage = self._download_webpage(url, video_id)

View file

@ -204,7 +204,7 @@ class VevoIE(VevoBaseIE):
fatal=False) fatal=False)
# Some videos are only available via webpage (e.g. # Some videos are only available via webpage (e.g.
# https://github.com/ytdl-org/haruhi-dl/issues/9366) # https://github.com/ytdl-org/youtube-dl/issues/9366)
if not video_versions: if not video_versions:
webpage = self._download_webpage(url, video_id) webpage = self._download_webpage(url, video_id)
json_data = self._extract_json(webpage, video_id) json_data = self._extract_json(webpage, video_id)

View file

@ -587,7 +587,7 @@ class VimeoIE(VimeoBaseInfoExtractor):
is_player = '://player.vimeo.com/video/' in url is_player = '://player.vimeo.com/video/' in url
if is_pro: if is_pro:
# some videos require portfolio_id to be present in player url # some videos require portfolio_id to be present in player url
# https://github.com/ytdl-org/haruhi-dl/issues/20070 # https://github.com/ytdl-org/youtube-dl/issues/20070
url = self._extract_url(url, self._download_webpage(url, video_id)) url = self._extract_url(url, self._download_webpage(url, video_id))
if not url: if not url:
url = 'https://vimeo.com/' + video_id url = 'https://vimeo.com/' + video_id
@ -638,7 +638,7 @@ class VimeoIE(VimeoBaseInfoExtractor):
if not config_url: if not config_url:
# Sometimes new react-based page is served instead of old one that require # Sometimes new react-based page is served instead of old one that require
# different config URL extraction approach (see # different config URL extraction approach (see
# https://github.com/ytdl-org/haruhi-dl/pull/7209) # https://github.com/ytdl-org/youtube-dl/pull/7209)
page_config = self._parse_json(self._search_regex( page_config = self._parse_json(self._search_regex(
r'vimeo\.(?:clip|vod_title)_page_config\s*=\s*({.+?});', r'vimeo\.(?:clip|vod_title)_page_config\s*=\s*({.+?});',
webpage, 'page config'), video_id) webpage, 'page config'), video_id)

View file

@ -258,7 +258,7 @@ class VLiveChannelIE(InfoExtractor):
# Large values of maxNumOfRows (~300 or above) may cause # Large values of maxNumOfRows (~300 or above) may cause
# empty responses (see [1]), e.g. this happens for [2] that # empty responses (see [1]), e.g. this happens for [2] that
# has more than 300 videos. # has more than 300 videos.
# 1. https://github.com/ytdl-org/haruhi-dl/issues/13830 # 1. https://github.com/ytdl-org/youtube-dl/issues/13830
# 2. http://channels.vlive.tv/EDBF. # 2. http://channels.vlive.tv/EDBF.
'maxNumOfRows': 100, 'maxNumOfRows': 100,
'_': int(time.time()), '_': int(time.time()),

View file

@ -242,7 +242,7 @@ class YandexMusicPlaylistIE(YandexMusicPlaylistBaseIE):
'skip': 'Travis CI servers blocked by YandexMusic', 'skip': 'Travis CI servers blocked by YandexMusic',
}, { }, {
# playlist exceeding the limit of 150 tracks shipped with webpage (see # playlist exceeding the limit of 150 tracks shipped with webpage (see
# https://github.com/ytdl-org/haruhi-dl/issues/6666) # https://github.com/ytdl-org/youtube-dl/issues/6666)
'url': 'https://music.yandex.ru/users/ya.playlist/playlists/1036', 'url': 'https://music.yandex.ru/users/ya.playlist/playlists/1036',
'info_dict': { 'info_dict': {
'id': '1036', 'id': '1036',

View file

@ -45,7 +45,7 @@ def parseOpts(overrideArguments=None):
except IOError: except IOError:
return default # silently skip if file is not present return default # silently skip if file is not present
try: try:
# FIXME: https://github.com/ytdl-org/haruhi-dl/commit/dfe5fa49aed02cf36ba9f743b11b0903554b5e56 # FIXME: https://github.com/ytdl-org/youtube-dl/commit/dfe5fa49aed02cf36ba9f743b11b0903554b5e56
contents = optionf.read() contents = optionf.read()
if sys.version_info < (3,): if sys.version_info < (3,):
contents = contents.decode(preferredencoding()) contents = contents.decode(preferredencoding())

View file

@ -2143,7 +2143,7 @@ def sanitize_url(url):
return 'http:%s' % url return 'http:%s' % url
# Fix some common typos seen so far # Fix some common typos seen so far
COMMON_TYPOS = ( COMMON_TYPOS = (
# https://github.com/ytdl-org/haruhi-dl/issues/15649 # https://github.com/ytdl-org/youtube-dl/issues/15649
(r'^httpss://', r'https://'), (r'^httpss://', r'https://'),
# https://bx1.be/lives/direct-tv/ # https://bx1.be/lives/direct-tv/
(r'^rmtp([es]?)://', r'rtmp\1://'), (r'^rmtp([es]?)://', r'rtmp\1://'),
@ -2193,7 +2193,7 @@ def _htmlentity_transform(entity_with_semicolon):
numstr = '0%s' % numstr numstr = '0%s' % numstr
else: else:
base = 10 base = 10
# See https://github.com/ytdl-org/haruhi-dl/issues/7518 # See https://github.com/ytdl-org/youtube-dl/issues/7518
try: try:
return compat_chr(int(numstr, base)) return compat_chr(int(numstr, base))
except ValueError: except ValueError:
@ -2475,7 +2475,7 @@ class XAttrUnavailableError(HaruhiDLError):
def _create_http_connection(hdl_handler, http_class, is_https, *args, **kwargs): def _create_http_connection(hdl_handler, http_class, is_https, *args, **kwargs):
# Working around python 2 bug (see http://bugs.python.org/issue17849) by limiting # Working around python 2 bug (see http://bugs.python.org/issue17849) by limiting
# expected HTTP responses to meet HTTP/1.0 or later (see also # expected HTTP responses to meet HTTP/1.0 or later (see also
# https://github.com/ytdl-org/haruhi-dl/issues/6727) # https://github.com/ytdl-org/youtube-dl/issues/6727)
if sys.version_info < (3, 0): if sys.version_info < (3, 0):
kwargs['strict'] = True kwargs['strict'] = True
hc = http_class(*args, **compat_kwargs(kwargs)) hc = http_class(*args, **compat_kwargs(kwargs))
@ -2649,7 +2649,7 @@ class HaruhiDLHandler(compat_urllib_request.HTTPHandler):
resp.msg = old_resp.msg resp.msg = old_resp.msg
del resp.headers['Content-encoding'] del resp.headers['Content-encoding']
# Percent-encode redirect URL of Location HTTP header to satisfy RFC 3986 (see # Percent-encode redirect URL of Location HTTP header to satisfy RFC 3986 (see
# https://github.com/ytdl-org/haruhi-dl/issues/6457). # https://github.com/ytdl-org/youtube-dl/issues/6457).
if 300 <= resp.code < 400: if 300 <= resp.code < 400:
location = resp.headers.get('Location') location = resp.headers.get('Location')
if location: if location:
@ -2863,7 +2863,7 @@ class HaruhiDLCookieProcessor(compat_urllib_request.HTTPCookieProcessor):
def http_response(self, request, response): def http_response(self, request, response):
# Python 2 will choke on next HTTP request in row if there are non-ASCII # Python 2 will choke on next HTTP request in row if there are non-ASCII
# characters in Set-Cookie HTTP header of last response (see # characters in Set-Cookie HTTP header of last response (see
# https://github.com/ytdl-org/haruhi-dl/issues/6769). # https://github.com/ytdl-org/youtube-dl/issues/6769).
# In order to at least prevent crashing we will percent encode Set-Cookie # In order to at least prevent crashing we will percent encode Set-Cookie
# header before HTTPCookieProcessor starts processing it. # header before HTTPCookieProcessor starts processing it.
# if sys.version_info < (3, 0) and response.headers: # if sys.version_info < (3, 0) and response.headers:
@ -3735,7 +3735,7 @@ def get_exe_version(exe, args=['--version'],
try: try:
# STDIN should be redirected too. On UNIX-like systems, ffmpeg triggers # STDIN should be redirected too. On UNIX-like systems, ffmpeg triggers
# SIGTTOU if haruhi-dl is run in the background. # SIGTTOU if haruhi-dl is run in the background.
# See https://github.com/ytdl-org/haruhi-dl/issues/955#issuecomment-209789656 # See https://github.com/ytdl-org/youtube-dl/issues/955#issuecomment-209789656
out, _ = subprocess.Popen( out, _ = subprocess.Popen(
[encodeArgument(exe)] + args, [encodeArgument(exe)] + args,
stdin=subprocess.PIPE, stdin=subprocess.PIPE,
@ -4342,7 +4342,7 @@ def _match_one(filter_part, dct):
# If the original field is a string and matching comparisonvalue is # If the original field is a string and matching comparisonvalue is
# a number we should respect the origin of the original field # a number we should respect the origin of the original field
# and process comparison value as a string (see # and process comparison value as a string (see
# https://github.com/ytdl-org/haruhi-dl/issues/11082). # https://github.com/ytdl-org/youtube-dl/issues/11082).
or actual_value is not None and m.group('intval') is not None or actual_value is not None and m.group('intval') is not None
and isinstance(actual_value, compat_str)): and isinstance(actual_value, compat_str)):
if m.group('op') not in ('=', '!='): if m.group('op') not in ('=', '!='):
@ -5508,7 +5508,7 @@ def urshift(val, n):
# Based on png2str() written by @gdkchan and improved by @yokrysty # Based on png2str() written by @gdkchan and improved by @yokrysty
# Originally posted at https://github.com/ytdl-org/haruhi-dl/issues/9706 # Originally posted at https://github.com/ytdl-org/youtube-dl/issues/9706
def decode_png(png_data): def decode_png(png_data):
# Reference: https://www.w3.org/TR/PNG/ # Reference: https://www.w3.org/TR/PNG/
header = png_data[8:] header = png_data[8:]
@ -5623,7 +5623,7 @@ def write_xattr(path, key, value):
if hasattr(xattr, 'set'): # pyxattr if hasattr(xattr, 'set'): # pyxattr
# Unicode arguments are not supported in python-pyxattr until # Unicode arguments are not supported in python-pyxattr until
# version 0.5.0 # version 0.5.0
# See https://github.com/ytdl-org/haruhi-dl/issues/5498 # See https://github.com/ytdl-org/youtube-dl/issues/5498
pyxattr_required_version = '0.5.0' pyxattr_required_version = '0.5.0'
if version_tuple(xattr.__version__) < version_tuple(pyxattr_required_version): if version_tuple(xattr.__version__) < version_tuple(pyxattr_required_version):
# TODO: fallback to CLI tools # TODO: fallback to CLI tools

View file

@ -414,7 +414,7 @@ class TestFormatSelection(unittest.TestCase):
# For extractors with incomplete formats (all formats are audio-only or # For extractors with incomplete formats (all formats are audio-only or
# video-only) best and worst should fallback to corresponding best/worst # video-only) best and worst should fallback to corresponding best/worst
# video-only or audio-only formats (as per # video-only or audio-only formats (as per
# https://github.com/ytdl-org/haruhi-dl/pull/5556) # https://github.com/ytdl-org/youtube-dl/pull/5556)
formats = [ formats = [
{'format_id': 'low', 'ext': 'mp3', 'preference': 1, 'vcodec': 'none', 'url': TEST_URL}, {'format_id': 'low', 'ext': 'mp3', 'preference': 1, 'vcodec': 'none', 'url': TEST_URL},
{'format_id': 'high', 'ext': 'mp3', 'preference': 2, 'vcodec': 'none', 'url': TEST_URL}, {'format_id': 'high', 'ext': 'mp3', 'preference': 2, 'vcodec': 'none', 'url': TEST_URL},
@ -445,7 +445,7 @@ class TestFormatSelection(unittest.TestCase):
self.assertRaises(ExtractorError, hdl.process_ie_result, info_dict.copy()) self.assertRaises(ExtractorError, hdl.process_ie_result, info_dict.copy())
def test_format_selection_issue_10083(self): def test_format_selection_issue_10083(self):
# See https://github.com/ytdl-org/haruhi-dl/issues/10083 # See https://github.com/ytdl-org/youtube-dl/issues/10083
formats = [ formats = [
{'format_id': 'regular', 'height': 360, 'url': TEST_URL}, {'format_id': 'regular', 'height': 360, 'url': TEST_URL},
{'format_id': 'video', 'height': 720, 'acodec': 'none', 'url': TEST_URL}, {'format_id': 'video', 'height': 720, 'acodec': 'none', 'url': TEST_URL},
@ -867,7 +867,7 @@ class TestHaruhiDL(unittest.TestCase):
result = get_ids({'playlist_items': '2-4,3-4,3'}) result = get_ids({'playlist_items': '2-4,3-4,3'})
self.assertEqual(result, [2, 3, 4]) self.assertEqual(result, [2, 3, 4])
# Tests for https://github.com/ytdl-org/haruhi-dl/issues/10591 # Tests for https://github.com/ytdl-org/youtube-dl/issues/10591
# @{ # @{
result = get_downloaded_info_dicts({'playlist_items': '2-4,3-4,3'}) result = get_downloaded_info_dicts({'playlist_items': '2-4,3-4,3'})
self.assertEqual(result[0]['playlist_index'], 2) self.assertEqual(result[0]['playlist_index'], 2)
@ -884,7 +884,7 @@ class TestHaruhiDL(unittest.TestCase):
# @} # @}
def test_urlopen_no_file_protocol(self): def test_urlopen_no_file_protocol(self):
# see https://github.com/ytdl-org/haruhi-dl/issues/8227 # see https://github.com/ytdl-org/youtube-dl/issues/8227
hdl = HDL() hdl = HDL()
self.assertRaises(compat_urllib_error.URLError, hdl.urlopen, 'file:///etc/passwd') self.assertRaises(compat_urllib_error.URLError, hdl.urlopen, 'file:///etc/passwd')
@ -930,7 +930,7 @@ class TestHaruhiDL(unittest.TestCase):
self.assertEqual(downloaded['extractor'], 'testex') self.assertEqual(downloaded['extractor'], 'testex')
self.assertEqual(downloaded['extractor_key'], 'TestEx') self.assertEqual(downloaded['extractor_key'], 'TestEx')
# Test case for https://github.com/hdl-org/haruhi-dl/issues/27064 # Test case for https://github.com/ytdl-org/youtube-dl/issues/27064
def test_ignoreerrors_for_playlist_with_url_transparent_iterable_entries(self): def test_ignoreerrors_for_playlist_with_url_transparent_iterable_entries(self):
class _HDL(HDL): class _HDL(HDL):

View file

@ -99,7 +99,7 @@ class TestInfoExtractor(unittest.TestCase):
self.assertRaises(RegexNotFoundError, ie._html_search_meta, ('z', 'x'), html, None, fatal=True) self.assertRaises(RegexNotFoundError, ie._html_search_meta, ('z', 'x'), html, None, fatal=True)
def test_search_json_ld_realworld(self): def test_search_json_ld_realworld(self):
# https://github.com/hdl-org/haruhi-dl/issues/23306 # https://github.com/ytdl-org/youtube-dl/issues/23306
expect_dict( expect_dict(
self, self,
self.ie._search_json_ld(r'''<script type="application/ld+json"> self.ie._search_json_ld(r'''<script type="application/ld+json">
@ -428,7 +428,7 @@ jwplayer("mediaplayer").setup({"abouttext":"Visit Indie DB","aboutlink":"http:\/
def test_parse_m3u8_formats(self): def test_parse_m3u8_formats(self):
_TEST_CASES = [ _TEST_CASES = [
( (
# https://github.com/ytdl-org/haruhi-dl/issues/11507 # https://github.com/ytdl-org/youtube-dl/issues/11507
# http://pluzz.francetv.fr/videos/le_ministere.html # http://pluzz.francetv.fr/videos/le_ministere.html
'pluzz_francetv_11507', 'pluzz_francetv_11507',
'http://replayftv-vh.akamaihd.net/i/streaming-adaptatif_france-dom-tom/2017/S16/J2/156589847-58f59130c1f52-,standard1,standard2,standard3,standard4,standard5,.mp4.csmil/master.m3u8?caption=2017%2F16%2F156589847-1492488987.m3u8%3Afra%3AFrancais&audiotrack=0%3Afra%3AFrancais', 'http://replayftv-vh.akamaihd.net/i/streaming-adaptatif_france-dom-tom/2017/S16/J2/156589847-58f59130c1f52-,standard1,standard2,standard3,standard4,standard5,.mp4.csmil/master.m3u8?caption=2017%2F16%2F156589847-1492488987.m3u8%3Afra%3AFrancais&audiotrack=0%3Afra%3AFrancais',
@ -490,7 +490,7 @@ jwplayer("mediaplayer").setup({"abouttext":"Visit Indie DB","aboutlink":"http:\/
}] }]
), ),
( (
# https://github.com/ytdl-org/haruhi-dl/issues/11995 # https://github.com/ytdl-org/youtube-dl/issues/11995
# http://teamcoco.com/video/clueless-gamer-super-bowl-for-honor # http://teamcoco.com/video/clueless-gamer-super-bowl-for-honor
'teamcoco_11995', 'teamcoco_11995',
'http://ak.storage-w.teamcococdn.com/cdn/2017-02/98599/ed8f/main.m3u8', 'http://ak.storage-w.teamcococdn.com/cdn/2017-02/98599/ed8f/main.m3u8',
@ -564,7 +564,7 @@ jwplayer("mediaplayer").setup({"abouttext":"Visit Indie DB","aboutlink":"http:\/
}] }]
), ),
( (
# https://github.com/ytdl-org/haruhi-dl/issues/12211 # https://github.com/ytdl-org/youtube-dl/issues/12211
# http://video.toggle.sg/en/series/whoopie-s-world/ep3/478601 # http://video.toggle.sg/en/series/whoopie-s-world/ep3/478601
'toggle_mobile_12211', 'toggle_mobile_12211',
'http://cdnapi.kaltura.com/p/2082311/sp/208231100/playManifest/protocol/http/entryId/0_89q6e8ku/format/applehttp/tags/mobile_sd/f/a.m3u8', 'http://cdnapi.kaltura.com/p/2082311/sp/208231100/playManifest/protocol/http/entryId/0_89q6e8ku/format/applehttp/tags/mobile_sd/f/a.m3u8',
@ -728,7 +728,7 @@ jwplayer("mediaplayer").setup({"abouttext":"Visit Indie DB","aboutlink":"http:\/
}] }]
), ),
( (
# https://github.com/ytdl-org/haruhi-dl/issues/18923 # https://github.com/ytdl-org/youtube-dl/issues/18923
# https://www.ted.com/talks/boris_hesser_a_grassroots_healthcare_revolution_in_africa # https://www.ted.com/talks/boris_hesser_a_grassroots_healthcare_revolution_in_africa
'ted_18923', 'ted_18923',
'http://hls.ted.com/talks/31241.m3u8', 'http://hls.ted.com/talks/31241.m3u8',
@ -797,9 +797,9 @@ jwplayer("mediaplayer").setup({"abouttext":"Visit Indie DB","aboutlink":"http:\/
def test_parse_mpd_formats(self): def test_parse_mpd_formats(self):
_TEST_CASES = [ _TEST_CASES = [
( (
# https://github.com/ytdl-org/haruhi-dl/issues/13919 # https://github.com/ytdl-org/youtube-dl/issues/13919
# Also tests duplicate representation ids, see # Also tests duplicate representation ids, see
# https://github.com/ytdl-org/haruhi-dl/issues/15111 # https://github.com/ytdl-org/youtube-dl/issues/15111
'float_duration', 'float_duration',
'http://unknown/manifest.mpd', # mpd_url 'http://unknown/manifest.mpd', # mpd_url
None, # mpd_base_url None, # mpd_base_url
@ -880,7 +880,7 @@ jwplayer("mediaplayer").setup({"abouttext":"Visit Indie DB","aboutlink":"http:\/
'height': 1080, 'height': 1080,
}] }]
), ( ), (
# https://github.com/ytdl-org/haruhi-dl/pull/14844 # https://github.com/ytdl-org/youtube-dl/pull/14844
'urls_only', 'urls_only',
'http://unknown/manifest.mpd', # mpd_url 'http://unknown/manifest.mpd', # mpd_url
None, # mpd_base_url None, # mpd_base_url
@ -963,7 +963,7 @@ jwplayer("mediaplayer").setup({"abouttext":"Visit Indie DB","aboutlink":"http:\/
'height': 1080, 'height': 1080,
}] }]
), ( ), (
# https://github.com/ytdl-org/haruhi-dl/issues/20346 # https://github.com/ytdl-org/youtube-dl/issues/20346
# Media considered unfragmented even though it contains # Media considered unfragmented even though it contains
# Initialization tag # Initialization tag
'unfragmented', 'unfragmented',
@ -1023,7 +1023,7 @@ jwplayer("mediaplayer").setup({"abouttext":"Visit Indie DB","aboutlink":"http:\/
def test_parse_f4m_formats(self): def test_parse_f4m_formats(self):
_TEST_CASES = [ _TEST_CASES = [
( (
# https://github.com/ytdl-org/haruhi-dl/issues/14660 # https://github.com/ytdl-org/youtube-dl/issues/14660
'custom_base_url', 'custom_base_url',
'http://api.new.livestream.com/accounts/6115179/events/6764928/videos/144884262.f4m', 'http://api.new.livestream.com/accounts/6115179/events/6764928/videos/144884262.f4m',
[{ [{

View file

@ -114,7 +114,7 @@ class TestAllURLsMatching(unittest.TestCase):
self.assertMatch('https://vimeo.com/user7108434/videos', ['vimeo:user']) self.assertMatch('https://vimeo.com/user7108434/videos', ['vimeo:user'])
self.assertMatch('https://vimeo.com/user21297594/review/75524534/3c257a1b5d', ['vimeo:review']) self.assertMatch('https://vimeo.com/user21297594/review/75524534/3c257a1b5d', ['vimeo:review'])
# https://github.com/ytdl-org/haruhi-dl/issues/1930 # https://github.com/ytdl-org/youtube-dl/issues/1930
def test_soundcloud_not_matching_sets(self): def test_soundcloud_not_matching_sets(self):
self.assertMatch('http://soundcloud.com/floex/sets/gone-ep', ['soundcloud:set']) self.assertMatch('http://soundcloud.com/floex/sets/gone-ep', ['soundcloud:set'])
@ -123,7 +123,7 @@ class TestAllURLsMatching(unittest.TestCase):
self.assertMatch('http://tatianamaslanydaily.tumblr.com/post/54196191430', ['Tumblr']) self.assertMatch('http://tatianamaslanydaily.tumblr.com/post/54196191430', ['Tumblr'])
def test_pbs(self): def test_pbs(self):
# https://github.com/ytdl-org/haruhi-dl/issues/2350 # https://github.com/ytdl-org/youtube-dl/issues/2350
self.assertMatch('http://video.pbs.org/viralplayer/2365173446/', ['pbs']) self.assertMatch('http://video.pbs.org/viralplayer/2365173446/', ['pbs'])
self.assertMatch('http://video.pbs.org/widget/partnerplayer/980042464/', ['pbs']) self.assertMatch('http://video.pbs.org/widget/partnerplayer/980042464/', ['pbs'])