diff --git a/yt_dlp/extractor/generic.py b/yt_dlp/extractor/generic.py index 99864f4e0..129555f53 100644 --- a/yt_dlp/extractor/generic.py +++ b/yt_dlp/extractor/generic.py @@ -1481,21 +1481,6 @@ class GenericIE(InfoExtractor): 'view_count': int, }, 'params': {'skip_download': True}, - }, { - # ✅110 - # VHXEmbedIE - 'url': 'https://demo.vhx.tv/packages/behind-the-scenes-with-sasha/videos/hard-work', - 'info_dict': { - 'id': '2251259', - 'ext': 'mp4', - 'title': 'Untitled', - 'duration': 30, - 'thumbnail': r're:https?://i\.vimeocdn\.com/video/.+', - 'uploader': 'OTT Videos', - 'uploader_id': 'user80538407', - 'uploader_url': 'https://vimeo.com/user80538407', - }, - 'expected_warnings': ['Failed to parse XML'], }, { # 🔍111 # ViddlerIE @@ -1541,45 +1526,6 @@ class GenericIE(InfoExtractor): 'title': '#whilewewatch', }, 'skip': 'Invalid URL', - }, { - # ✅115 - # VimeoIE - 'url': 'https://www.gsd.harvard.edu/event/i-m-pei-a-centennial-celebration/', - 'info_dict': { - 'id': '855172304', - 'ext': 'mp4', - 'title': 'I. M. Pei: A Centennial Celebration', - 'duration': 6073, - 'thumbnail': r're:https?://i\.vimeocdn\.com/video/.+', - 'uploader': 'Harvard GSD', - 'uploader_id': 'harvardgsd', - 'uploader_url': 'https://vimeo.com/harvardgsd', - }, - 'expected_warnings': ['Failed to parse XML'], - 'params': { - 'extractor_args': {'generic': {'impersonate': ['chrome']}}, - 'skip_download': 'm3u8', - }, - }, { - # 🆑116; duplicate of 115 - # VimeoIE - 'url': 'https://openclassrooms.com/en/courses/3314571-understanding-the-web', - 'info_dict': { - 'id': '148867247', - 'ext': 'mp4', - 'title': 'Understanding the web - Teaser', - }, - 'skip': 'Site changed', - }, { - # 🆑117; duplicate of 115 - # VimeoIE - 'url': 'http://www.esa.int/Our_Activities/Space_Science/Rosetta/Philae_comet_touch-down_webcast', - 'info_dict': { - 'id': '67864563', - 'ext': 'flv', - 'title': 'Rosetta #CometLanding webcast HL 10', - }, - 'skip': 'Invalid URL', }, { # ✅124 # YoutubeIE diff --git a/yt_dlp/extractor/vimeo.py b/yt_dlp/extractor/vimeo.py index 7ffe89f22..36e594be8 100644 --- a/yt_dlp/extractor/vimeo.py +++ b/yt_dlp/extractor/vimeo.py @@ -553,7 +553,7 @@ class VimeoIE(VimeoBaseInfoExtractor): 'uploader_url': r're:https?://(?:www\.)?vimeo\.com/businessofsoftware', 'uploader_id': 'businessofsoftware', 'duration': 3610, - 'thumbnail': 'https://i.vimeocdn.com/video/376682406-f34043e7b766af6bef2af81366eacd6724f3fc3173179a11a97a1e26587c9529-d', + 'thumbnail': r're:https?://i\.vimeocdn\.com/video/.+', }, 'params': { 'format': 'best[protocol=https]', @@ -578,8 +578,7 @@ class VimeoIE(VimeoBaseInfoExtractor): 'duration': 10, 'comment_count': int, 'like_count': int, - 'view_count': int, - 'thumbnail': 'https://i.vimeocdn.com/video/440665496-b2c5aee2b61089442c794f64113a8e8f7d5763c3e6b3ebfaf696ae6413f8b1f4-d', + 'thumbnail': r're:https?://i\.vimeocdn\.com/video/.+', }, 'params': { 'format': 'best[protocol=https]', @@ -603,7 +602,7 @@ class VimeoIE(VimeoBaseInfoExtractor): 'timestamp': 1380339469, 'upload_date': '20130928', 'duration': 187, - 'thumbnail': 'https://i.vimeocdn.com/video/450239872-a05512d9b1e55d707a7c04365c10980f327b06d966351bc403a5d5d65c95e572-d', + 'thumbnail': r're:https?://i\.vimeocdn\.com/video/.+', 'view_count': int, 'comment_count': int, 'like_count': int, @@ -629,12 +628,12 @@ class VimeoIE(VimeoBaseInfoExtractor): 'duration': 62, 'comment_count': int, 'like_count': int, - 'thumbnail': 'https://i.vimeocdn.com/video/452001751-8216e0571c251a09d7a8387550942d89f7f86f6398f8ed886e639b0dd50d3c90-d', + 'thumbnail': r're:https?://i\.vimeocdn\.com/video/.+', 'subtitles': { - 'de': 'count:3', - 'en': 'count:3', - 'es': 'count:3', - 'fr': 'count:3', + 'de': 'count:2', + 'en': 'count:2', + 'es': 'count:2', + 'fr': 'count:2', }, }, 'expected_warnings': [ @@ -654,9 +653,10 @@ class VimeoIE(VimeoBaseInfoExtractor): 'uploader_url': r're:https?://(?:www\.)?vimeo\.com/user28849593', 'uploader_id': 'user28849593', 'duration': 118, - 'thumbnail': 'https://i.vimeocdn.com/video/478636036-c18440305ef3df9decfb6bf207a61fe39d2d17fa462a96f6f2d93d30492b037d-d', + 'thumbnail': r're:https?://i\.vimeocdn\.com/video/.+', }, 'expected_warnings': ['Failed to parse XML: not well-formed'], + 'params': {'extractor_args': {'generic': {'impersonate': ['chrome']}}}, }, { # contains Original format @@ -674,8 +674,7 @@ class VimeoIE(VimeoBaseInfoExtractor): 'description': 'md5:f37b4ad0f3ded6fa16f38ecde16c3c44', 'duration': 60, 'comment_count': int, - 'view_count': int, - 'thumbnail': 'https://i.vimeocdn.com/video/231174622-dd07f015e9221ff529d451e1cc31c982b5d87bfafa48c4189b1da72824ee289a-d', + 'thumbnail': r're:https?://i\.vimeocdn\.com/video/.+', 'like_count': int, 'release_timestamp': 1324361742, 'release_date': '20111220', @@ -697,7 +696,7 @@ class VimeoIE(VimeoBaseInfoExtractor): 'uploader': 'Framework Studio', 'upload_date': '20200225', 'duration': 176, - 'thumbnail': 'https://i.vimeocdn.com/video/859377297-836494a4ef775e9d4edbace83937d9ad34dc846c688c0c419c0e87f7ab06c4b3-d', + 'thumbnail': r're:https?://i\.vimeocdn\.com/video/.+', 'uploader_url': 'https://vimeo.com/frameworkla', 'comment_count': int, 'like_count': int, @@ -726,7 +725,7 @@ class VimeoIE(VimeoBaseInfoExtractor): 'duration': 321, 'comment_count': int, 'view_count': int, - 'thumbnail': 'https://i.vimeocdn.com/video/22728298-bfc22146f930de7cf497821c7b0b9f168099201ecca39b00b6bd31fcedfca7a6-d', + 'thumbnail': r're:https?://i\.vimeocdn\.com/video/.+', 'like_count': int, 'tags': ['[the shining', 'vimeohq', 'cv', 'vimeo tribute]'], }, @@ -766,7 +765,7 @@ class VimeoIE(VimeoBaseInfoExtractor): 'uploader_id': 'user18948128', 'uploader': 'Jaime Marquínez Ferrándiz', 'duration': 10, - 'thumbnail': 'https://i.vimeocdn.com/video/440665496-b2c5aee2b61089442c794f64113a8e8f7d5763c3e6b3ebfaf696ae6413f8b1f4-d', + 'thumbnail': r're:https?://i\.vimeocdn\.com/video/.+', }, 'params': { 'format': 'best[protocol=https]', @@ -803,7 +802,7 @@ class VimeoIE(VimeoBaseInfoExtractor): 'description': str, # FIXME: Dynamic SEO spam description 'upload_date': '20150209', 'timestamp': 1423518307, - 'thumbnail': r're:https://i\.vimeocdn\.com/video/default', + 'thumbnail': r're:https?://i\.vimeocdn\.com/video/.+', 'duration': 10, 'like_count': int, 'uploader_url': 'https://vimeo.com/user20132939', @@ -836,11 +835,10 @@ class VimeoIE(VimeoBaseInfoExtractor): 'license': 'by-nc', 'duration': 159, 'comment_count': int, - 'thumbnail': 'https://i.vimeocdn.com/video/562802436-585eeb13b5020c6ac0f171a2234067938098f84737787df05ff0d767f6d54ee9-d', + 'thumbnail': r're:https?://i\.vimeocdn\.com/video/.+', 'like_count': int, 'uploader_url': 'https://vimeo.com/aliniamedia', 'release_date': '20160329', - 'view_count': int, }, 'params': {'skip_download': True}, 'expected_warnings': ['Failed to parse XML: not well-formed'], @@ -857,10 +855,9 @@ class VimeoIE(VimeoBaseInfoExtractor): 'uploader': 'Firework Champions', 'upload_date': '20150910', 'timestamp': 1441916295, - 'thumbnail': 'https://i.vimeocdn.com/video/534715882-6ff8e4660cbf2fea68282876d8d44f318825dfe572cc4016e73b3266eac8ae3a-d', + 'thumbnail': r're:https?://i\.vimeocdn\.com/video/.+', 'uploader_url': 'https://vimeo.com/fireworkchampions', 'duration': 229, - 'view_count': int, 'like_count': int, 'comment_count': int, 'release_timestamp': 1441916295, @@ -887,7 +884,7 @@ class VimeoIE(VimeoBaseInfoExtractor): 'duration': 336, 'comment_count': int, 'view_count': int, - 'thumbnail': 'https://i.vimeocdn.com/video/541243181-b593db36a16db2f0096f655da3f5a4dc46b8766d77b0f440df937ecb0c418347-d', + 'thumbnail': r're:https?://i\.vimeocdn\.com/video/.+', 'like_count': int, 'uploader_url': 'https://vimeo.com/karimhd', 'channel_url': 'https://vimeo.com/channels/staffpicks', @@ -912,7 +909,7 @@ class VimeoIE(VimeoBaseInfoExtractor): 'release_timestamp': 1627621014, 'duration': 976, 'comment_count': int, - 'thumbnail': 'https://i.vimeocdn.com/video/1202249320-4ddb2c30398c0dc0ee059172d1bd5ea481ad12f0e0e3ad01d2266f56c744b015-d', + 'thumbnail': r're:https?://i\.vimeocdn\.com/video/.+', 'like_count': int, 'uploader_url': 'https://vimeo.com/txwestcapital', 'release_date': '20210730', @@ -936,7 +933,7 @@ class VimeoIE(VimeoBaseInfoExtractor): 'uploader': 'Alex Howard', 'uploader_id': 'user54729178', 'uploader_url': 'https://vimeo.com/user54729178', - 'thumbnail': r're:https://i\.vimeocdn\.com/video/1520099929-[\da-f]+-d', + 'thumbnail': r're:https?://i\.vimeocdn\.com/video/.+', 'duration': 2636, 'chapters': [ {'start_time': 0, 'end_time': 10, 'title': ''}, @@ -977,9 +974,8 @@ class VimeoIE(VimeoBaseInfoExtractor): 'release_date': '20151104', 'release_timestamp': 1446607180, 'like_count': int, - 'view_count': int, 'comment_count': int, - 'thumbnail': r're:https://i\.vimeocdn\.com/video/1018638656-[\da-f]+-d', + 'thumbnail': r're:https?://i\.vimeocdn\.com/video/.+', }, # 'params': {'format': 'Original'}, 'expected_warnings': ['Failed to parse XML: not well-formed'], @@ -996,10 +992,11 @@ class VimeoIE(VimeoBaseInfoExtractor): 'uploader_id': 'rajavirdi', 'uploader_url': 'https://vimeo.com/rajavirdi', 'duration': 300, - 'thumbnail': r're:https://i\.vimeocdn\.com/video/1716727772-[\da-f]+-d', + 'thumbnail': r're:https?://i\.vimeocdn\.com/video/.+', }, # 'params': {'format': 'source'}, 'expected_warnings': ['Failed to parse XML: not well-formed'], + 'params': {'skip_download': 'm3u8'}, }, { # user playlist alias -> https://vimeo.com/258705797 @@ -1009,6 +1006,24 @@ class VimeoIE(VimeoBaseInfoExtractor): # https://gettingthingsdone.com/workflowmap/ # vimeo embed with check-password page protected by Referer header ] + _WEBPAGE_TESTS = [{ + 'url': 'https://www.gsd.harvard.edu/event/i-m-pei-a-centennial-celebration/', + 'info_dict': { + 'id': '855172304', + 'ext': 'mp4', + 'title': 'I. M. Pei: A Centennial Celebration', + 'duration': 6073, + 'thumbnail': r're:https?://i\.vimeocdn\.com/video/.+', + 'uploader': 'Harvard GSD', + 'uploader_id': 'harvardgsd', + 'uploader_url': 'https://vimeo.com/harvardgsd', + }, + 'expected_warnings': ['Failed to parse XML: not well-formed'], + 'params': { + 'extractor_args': {'generic': {'impersonate': ['chrome']}}, + 'skip_download': 'm3u8', + }, + }] @classmethod def _extract_embed_urls(cls, url, webpage): @@ -1389,7 +1404,7 @@ class VimeoOndemandIE(VimeoIE): # XXX: Do not subclass from concrete IE 'description': 'md5:aeeba3dbd4d04b0fa98a4fdc9c639998', 'upload_date': '20140906', 'timestamp': 1410032453, - 'thumbnail': r're:https://i\.vimeocdn\.com/video/\d+-[\da-f]+-d', + 'thumbnail': r're:https?://i\.vimeocdn\.com/video/.+', 'comment_count': int, 'license': 'https://creativecommons.org/licenses/by-nc-nd/3.0/', 'duration': 53, @@ -1416,7 +1431,7 @@ class VimeoOndemandIE(VimeoIE): # XXX: Do not subclass from concrete IE 'duration': 121, 'comment_count': int, 'view_count': int, - 'thumbnail': r're:https://i\.vimeocdn\.com/video/\d+-[\da-f]+-d', + 'thumbnail': r're:https?://i\.vimeocdn\.com/video/.+', 'like_count': int, 'tags': 'count:5', }, @@ -1637,7 +1652,7 @@ class VimeoReviewIE(VimeoBaseInfoExtractor): 'uploader_id': 'user170863801', 'uploader_url': 'https://vimeo.com/user170863801', 'duration': 30, - 'thumbnail': r're:https://i\.vimeocdn\.com/video/\d+-[\da-f]+-d', + 'thumbnail': r're:https?://i\.vimeocdn\.com/video/.+', }, 'params': {'skip_download': 'm3u8'}, 'expected_warnings': ['Failed to parse XML: not well-formed'], @@ -1652,7 +1667,7 @@ class VimeoReviewIE(VimeoBaseInfoExtractor): 'uploader_id': 'user21297594', 'description': "Comedian Dick Hardwick's five minute demo filmed in front of a live theater audience.\nEdit by Doug Mattocks", 'duration': 304, - 'thumbnail': 'https://i.vimeocdn.com/video/450115033-43303819d9ebe24c2630352e18b7056d25197d09b3ae901abdac4c4f1d68de71-d_1280', + 'thumbnail': r're:https?://i\.vimeocdn\.com/video/.+', 'uploader_url': 'https://vimeo.com/user21297594', }, 'skip': '404 Not Found', @@ -1666,7 +1681,7 @@ class VimeoReviewIE(VimeoBaseInfoExtractor): 'title': 're:(?i)^Death by dogma versus assembling agile . Sander Hoogendoorn', 'uploader': 'DevWeek Events', 'duration': 2773, - 'thumbnail': r're:^https?://.*\.jpg$', + 'thumbnail': r're:https?://i\.vimeocdn\.com/video/.+', 'uploader_id': 'user22258446', }, 'skip': 'video gone', @@ -1757,6 +1772,20 @@ class VHXEmbedIE(VimeoBaseInfoExtractor): IE_NAME = 'vhx:embed' _VALID_URL = r'https?://embed\.vhx\.tv/videos/(?P\d+)' _EMBED_REGEX = [r']+src="(?Phttps?://embed\.vhx\.tv/videos/\d+[^"]*)"'] + _WEBPAGE_TESTS = [{ + 'url': 'https://demo.vhx.tv/packages/behind-the-scenes-with-sasha/videos/hard-work', + 'info_dict': { + 'id': '2251259', + 'ext': 'mp4', + 'title': 'Untitled', + 'duration': 30, + 'thumbnail': r're:https?://i\.vimeocdn\.com/video/.+', + 'uploader': 'OTT Videos', + 'uploader_id': 'user80538407', + 'uploader_url': 'https://vimeo.com/user80538407', + }, + 'expected_warnings': ['Failed to parse XML: not well-formed'], + }] @classmethod def _extract_embed_urls(cls, url, webpage): @@ -1796,8 +1825,7 @@ class VimeoProIE(VimeoBaseInfoExtractor): 'upload_date': '20130610', 'timestamp': 1370907556, 'license': 'by', - 'thumbnail': r're:https://i\.vimeocdn\.com/video/\d+-[\da-f]+-d', - 'view_count': int, + 'thumbnail': r're:https?://i\.vimeocdn\.com/video/.+', 'comment_count': int, 'like_count': int, 'release_timestamp': 1370907556, @@ -1814,7 +1842,7 @@ class VimeoProIE(VimeoBaseInfoExtractor): 'id': '764543723', 'ext': 'mp4', 'title': 'Mechanische Systeme in Perfektion: Realität erfassen, Innovation treiben', - 'thumbnail': r're:https://i\.vimeocdn\.com/video/\d+-[\da-f]+-d', + 'thumbnail': r're:https?://i\.vimeocdn\.com/video/.+', 'description': 'md5:2a9d195cd1b0f6f79827107dc88c2420', 'uploader': 'CADFEM', 'uploader_id': 'cadfem', @@ -1890,7 +1918,7 @@ class VimeoEventIE(VimeoBaseInfoExtractor): 'comment_count': int, 'like_count': int, 'duration': 9810, - 'thumbnail': r're:https://i\.vimeocdn\.com/video/\d+-[\da-f]+-d', + 'thumbnail': r're:https?://i\.vimeocdn\.com/video/.+', 'timestamp': 1747502974, 'upload_date': '20250517', 'release_timestamp': 1747502998, @@ -1912,7 +1940,7 @@ class VimeoEventIE(VimeoBaseInfoExtractor): 'uploader_id': 'mitmedialab', 'uploader_url': 'https://vimeo.com/mitmedialab', 'duration': 23235, - 'thumbnail': r're:https://i\.vimeocdn\.com/video/\d+-[\da-f]+-d', + 'thumbnail': r're:https?://i\.vimeocdn\.com/video/.+', 'chapters': 'count:37', 'release_timestamp': 1744290000, 'release_date': '20250410', @@ -1938,7 +1966,7 @@ class VimeoEventIE(VimeoBaseInfoExtractor): 'comment_count': int, 'like_count': int, 'duration': 4962, - 'thumbnail': r're:https://i\.vimeocdn\.com/video/\d+-[\da-f]+-d', + 'thumbnail': r're:https?://i\.vimeocdn\.com/video/.+', 'timestamp': 1736702464, 'upload_date': '20250112', 'release_timestamp': 1736702543, @@ -1951,7 +1979,7 @@ class VimeoEventIE(VimeoBaseInfoExtractor): # "24/7" livestream 'url': 'https://vimeo.com/event/4768062', 'info_dict': { - 'id': '1079901414', + 'id': '1097650937', 'ext': 'mp4', 'display_id': '4768062', 'title': r're:GRACELAND CAM \d{4}-\d{2}-\d{2} \d{2}:\d{2}$', @@ -1959,8 +1987,8 @@ class VimeoEventIE(VimeoBaseInfoExtractor): 'uploader': 'Elvis Presley\'s Graceland', 'uploader_id': 'visitgraceland', 'uploader_url': 'https://vimeo.com/visitgraceland', - 'release_timestamp': 1745975450, - 'release_date': '20250430', + 'release_timestamp': 1751396691, + 'release_date': '20250701', 'live_status': 'is_live', }, 'params': {'skip_download': 'livestream'}, @@ -1979,7 +2007,7 @@ class VimeoEventIE(VimeoBaseInfoExtractor): 'comment_count': int, 'like_count': int, 'duration': 3961, - 'thumbnail': r're:https://i\.vimeocdn\.com/video/\d+-[\da-f]+-d', + 'thumbnail': r're:https?://i\.vimeocdn\.com/video/.+', 'timestamp': 1716408008, 'upload_date': '20240522', 'release_timestamp': 1716408062, @@ -2003,7 +2031,7 @@ class VimeoEventIE(VimeoBaseInfoExtractor): 'comment_count': int, 'like_count': int, 'duration': 4466, - 'thumbnail': r're:https://i\.vimeocdn\.com/video/\d+-[\da-f]+-d', + 'thumbnail': r're:https?://i\.vimeocdn\.com/video/.+', 'timestamp': 1612228466, 'upload_date': '20210202', 'release_timestamp': 1612228538, @@ -2026,7 +2054,7 @@ class VimeoEventIE(VimeoBaseInfoExtractor): 'comment_count': int, 'like_count': int, 'duration': 33115, - 'thumbnail': r're:https://i\.vimeocdn\.com/video/\d+-[\da-f]+-d', + 'thumbnail': r're:https?://i\.vimeocdn\.com/video/.+', 'timestamp': 1740261836, 'upload_date': '20250222', 'release_timestamp': 1740261873, @@ -2077,7 +2105,7 @@ class VimeoEventIE(VimeoBaseInfoExtractor): 'uploader_id': 'mitmedialab', 'uploader_url': 'https://vimeo.com/mitmedialab', 'duration': 23235, - 'thumbnail': r're:https://i\.vimeocdn\.com/video/\d+-[\da-f]+-d', + 'thumbnail': r're:https?://i\.vimeocdn\.com/video/.+', 'chapters': 'count:37', 'release_timestamp': 1744290000, 'release_date': '20250410',