|
|
@ -33,10 +33,124 @@ class VevoIE(VevoBaseIE):
|
|
|
|
https?://cache\.vevo\.com/m/html/embed\.html\?video=|
|
|
|
|
https?://cache\.vevo\.com/m/html/embed\.html\?video=|
|
|
|
|
https?://videoplayer\.vevo\.com/embed/embedded\?videoId=|
|
|
|
|
https?://videoplayer\.vevo\.com/embed/embedded\?videoId=|
|
|
|
|
https?://embed\.vevo\.com/.*?[?&]isrc=|
|
|
|
|
https?://embed\.vevo\.com/.*?[?&]isrc=|
|
|
|
|
|
|
|
|
https?://tv\.vevo\.com/watch/artist/(?:[^/]+)/|
|
|
|
|
vevo:)
|
|
|
|
vevo:)
|
|
|
|
(?P<id>[^&?#]+)'''
|
|
|
|
(?P<id>[^&?#]+)'''
|
|
|
|
|
|
|
|
|
|
|
|
_TESTS = []
|
|
|
|
_TESTS = [{
|
|
|
|
|
|
|
|
'url': 'http://www.vevo.com/watch/hurts/somebody-to-die-for/GB1101300280',
|
|
|
|
|
|
|
|
'md5': '95ee28ee45e70130e3ab02b0f579ae23',
|
|
|
|
|
|
|
|
'info_dict': {
|
|
|
|
|
|
|
|
'id': 'GB1101300280',
|
|
|
|
|
|
|
|
'ext': 'mp4',
|
|
|
|
|
|
|
|
'title': 'Hurts - Somebody to Die For',
|
|
|
|
|
|
|
|
'timestamp': 1372057200,
|
|
|
|
|
|
|
|
'upload_date': '20130624',
|
|
|
|
|
|
|
|
'uploader': 'Hurts',
|
|
|
|
|
|
|
|
'track': 'Somebody to Die For',
|
|
|
|
|
|
|
|
'artist': 'Hurts',
|
|
|
|
|
|
|
|
'genre': 'Pop',
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
'expected_warnings': ['Unable to download SMIL file', 'Unable to download info'],
|
|
|
|
|
|
|
|
}, {
|
|
|
|
|
|
|
|
'note': 'v3 SMIL format',
|
|
|
|
|
|
|
|
'url': 'http://www.vevo.com/watch/cassadee-pope/i-wish-i-could-break-your-heart/USUV71302923',
|
|
|
|
|
|
|
|
'md5': 'f6ab09b034f8c22969020b042e5ac7fc',
|
|
|
|
|
|
|
|
'info_dict': {
|
|
|
|
|
|
|
|
'id': 'USUV71302923',
|
|
|
|
|
|
|
|
'ext': 'mp4',
|
|
|
|
|
|
|
|
'title': 'Cassadee Pope - I Wish I Could Break Your Heart',
|
|
|
|
|
|
|
|
'timestamp': 1392796919,
|
|
|
|
|
|
|
|
'upload_date': '20140219',
|
|
|
|
|
|
|
|
'uploader': 'Cassadee Pope',
|
|
|
|
|
|
|
|
'track': 'I Wish I Could Break Your Heart',
|
|
|
|
|
|
|
|
'artist': 'Cassadee Pope',
|
|
|
|
|
|
|
|
'genre': 'Country',
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
'expected_warnings': ['Unable to download SMIL file', 'Unable to download info'],
|
|
|
|
|
|
|
|
}, {
|
|
|
|
|
|
|
|
'note': 'Age-limited video',
|
|
|
|
|
|
|
|
'url': 'https://www.vevo.com/watch/justin-timberlake/tunnel-vision-explicit/USRV81300282',
|
|
|
|
|
|
|
|
'info_dict': {
|
|
|
|
|
|
|
|
'id': 'USRV81300282',
|
|
|
|
|
|
|
|
'ext': 'mp4',
|
|
|
|
|
|
|
|
'title': 'Justin Timberlake - Tunnel Vision (Explicit)',
|
|
|
|
|
|
|
|
'age_limit': 18,
|
|
|
|
|
|
|
|
'timestamp': 1372888800,
|
|
|
|
|
|
|
|
'upload_date': '20130703',
|
|
|
|
|
|
|
|
'uploader': 'Justin Timberlake',
|
|
|
|
|
|
|
|
'track': 'Tunnel Vision (Explicit)',
|
|
|
|
|
|
|
|
'artist': 'Justin Timberlake',
|
|
|
|
|
|
|
|
'genre': 'Pop',
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
'expected_warnings': ['Unable to download SMIL file', 'Unable to download info'],
|
|
|
|
|
|
|
|
}, {
|
|
|
|
|
|
|
|
'note': 'No video_info',
|
|
|
|
|
|
|
|
'url': 'http://www.vevo.com/watch/k-camp-1/Till-I-Die/USUV71503000',
|
|
|
|
|
|
|
|
'md5': '8b83cc492d72fc9cf74a02acee7dc1b0',
|
|
|
|
|
|
|
|
'info_dict': {
|
|
|
|
|
|
|
|
'id': 'USUV71503000',
|
|
|
|
|
|
|
|
'ext': 'mp4',
|
|
|
|
|
|
|
|
'title': 'K Camp ft. T.I. - Till I Die',
|
|
|
|
|
|
|
|
'age_limit': 18,
|
|
|
|
|
|
|
|
'timestamp': 1449468000,
|
|
|
|
|
|
|
|
'upload_date': '20151207',
|
|
|
|
|
|
|
|
'uploader': 'K Camp',
|
|
|
|
|
|
|
|
'track': 'Till I Die',
|
|
|
|
|
|
|
|
'artist': 'K Camp',
|
|
|
|
|
|
|
|
'genre': 'Hip-Hop',
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
'expected_warnings': ['Unable to download SMIL file', 'Unable to download info'],
|
|
|
|
|
|
|
|
}, {
|
|
|
|
|
|
|
|
'note': 'Featured test',
|
|
|
|
|
|
|
|
'url': 'https://www.vevo.com/watch/lemaitre/Wait/USUV71402190',
|
|
|
|
|
|
|
|
'md5': 'd28675e5e8805035d949dc5cf161071d',
|
|
|
|
|
|
|
|
'info_dict': {
|
|
|
|
|
|
|
|
'id': 'USUV71402190',
|
|
|
|
|
|
|
|
'ext': 'mp4',
|
|
|
|
|
|
|
|
'title': 'Lemaitre ft. LoLo - Wait',
|
|
|
|
|
|
|
|
'age_limit': 0,
|
|
|
|
|
|
|
|
'timestamp': 1413432000,
|
|
|
|
|
|
|
|
'upload_date': '20141016',
|
|
|
|
|
|
|
|
'uploader': 'Lemaitre',
|
|
|
|
|
|
|
|
'track': 'Wait',
|
|
|
|
|
|
|
|
'artist': 'Lemaitre',
|
|
|
|
|
|
|
|
'genre': 'Electronic',
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
'expected_warnings': ['Unable to download SMIL file', 'Unable to download info'],
|
|
|
|
|
|
|
|
}, {
|
|
|
|
|
|
|
|
'note': 'Only available via webpage',
|
|
|
|
|
|
|
|
'url': 'http://www.vevo.com/watch/GBUV71600656',
|
|
|
|
|
|
|
|
'md5': '67e79210613865b66a47c33baa5e37fe',
|
|
|
|
|
|
|
|
'info_dict': {
|
|
|
|
|
|
|
|
'id': 'GBUV71600656',
|
|
|
|
|
|
|
|
'ext': 'mp4',
|
|
|
|
|
|
|
|
'title': 'ABC - Viva Love',
|
|
|
|
|
|
|
|
'age_limit': 0,
|
|
|
|
|
|
|
|
'timestamp': 1461830400,
|
|
|
|
|
|
|
|
'upload_date': '20160428',
|
|
|
|
|
|
|
|
'uploader': 'ABC',
|
|
|
|
|
|
|
|
'track': 'Viva Love',
|
|
|
|
|
|
|
|
'artist': 'ABC',
|
|
|
|
|
|
|
|
'genre': 'Pop',
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
'expected_warnings': ['Failed to download video versions info'],
|
|
|
|
|
|
|
|
}, {
|
|
|
|
|
|
|
|
# no genres available
|
|
|
|
|
|
|
|
'url': 'http://www.vevo.com/watch/INS171400764',
|
|
|
|
|
|
|
|
'only_matching': True,
|
|
|
|
|
|
|
|
}, {
|
|
|
|
|
|
|
|
# Another case available only via the webpage; using streams/streamsV3 formats
|
|
|
|
|
|
|
|
# Geo-restricted to Netherlands/Germany
|
|
|
|
|
|
|
|
'url': 'http://www.vevo.com/watch/boostee/pop-corn-clip-officiel/FR1A91600909',
|
|
|
|
|
|
|
|
'only_matching': True,
|
|
|
|
|
|
|
|
}, {
|
|
|
|
|
|
|
|
'url': 'https://embed.vevo.com/?isrc=USH5V1923499&partnerId=4d61b777-8023-4191-9ede-497ed6c24647&partnerAdCode=',
|
|
|
|
|
|
|
|
'only_matching': True,
|
|
|
|
|
|
|
|
}, {
|
|
|
|
|
|
|
|
'url': 'https://tv.vevo.com/watch/artist/janet-jackson/US0450100550',
|
|
|
|
|
|
|
|
'only_matching': True,
|
|
|
|
|
|
|
|
}]
|
|
|
|
_VERSIONS = {
|
|
|
|
_VERSIONS = {
|
|
|
|
0: 'youtube', # only in AuthenticateVideo videoVersions
|
|
|
|
0: 'youtube', # only in AuthenticateVideo videoVersions
|
|
|
|
1: 'level3',
|
|
|
|
1: 'level3',
|
|
|
@ -138,6 +252,7 @@ class VevoIE(VevoBaseIE):
|
|
|
|
fatal=False))
|
|
|
|
fatal=False))
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
m = re.search(r'''(?xi)
|
|
|
|
m = re.search(r'''(?xi)
|
|
|
|
|
|
|
|
_(?P<quality>[a-z0-9]+)
|
|
|
|
_(?P<width>[0-9]+)x(?P<height>[0-9]+)
|
|
|
|
_(?P<width>[0-9]+)x(?P<height>[0-9]+)
|
|
|
|
_(?P<vcodec>[a-z0-9]+)
|
|
|
|
_(?P<vcodec>[a-z0-9]+)
|
|
|
|
_(?P<vbr>[0-9]+)
|
|
|
|
_(?P<vbr>[0-9]+)
|
|
|
@ -149,7 +264,7 @@ class VevoIE(VevoBaseIE):
|
|
|
|
|
|
|
|
|
|
|
|
formats.append({
|
|
|
|
formats.append({
|
|
|
|
'url': version_url,
|
|
|
|
'url': version_url,
|
|
|
|
'format_id': 'http-%s-%s' % (version, video_version['quality']),
|
|
|
|
'format_id': f'http-{version}-{video_version.get("quality") or m.group("quality")}',
|
|
|
|
'vcodec': m.group('vcodec'),
|
|
|
|
'vcodec': m.group('vcodec'),
|
|
|
|
'acodec': m.group('acodec'),
|
|
|
|
'acodec': m.group('acodec'),
|
|
|
|
'vbr': int(m.group('vbr')),
|
|
|
|
'vbr': int(m.group('vbr')),
|
|
|
|