]> jfr.im git - yt-dlp.git/blob - yt_dlp/extractor/southpark.py
[ie/youtube] Suppress "Unavailable videos are hidden" warning (#10159)
[yt-dlp.git] / yt_dlp / extractor / southpark.py
1 from .mtv import MTVServicesInfoExtractor
2
3
4 class SouthParkIE(MTVServicesInfoExtractor):
5 IE_NAME = 'southpark.cc.com'
6 _VALID_URL = r'https?://(?:www\.)?(?P<url>southpark(?:\.cc|studios)\.com/((?:video-)?clips|(?:full-)?episodes|collections)/(?P<id>.+?)(\?|#|$))'
7
8 _FEED_URL = 'http://feeds.mtvnservices.com/od/feed/intl-mrss-player-feed'
9
10 _TESTS = [{
11 'url': 'https://southpark.cc.com/video-clips/d7wr06/south-park-you-all-agreed-to-counseling',
12 'info_dict': {
13 'ext': 'mp4',
14 'title': 'You All Agreed to Counseling',
15 'description': 'Kenny, Cartman, Stan, and Kyle visit Mr. Mackey and ask for his help getting Mrs. Nelson to come back. Mr. Mackey reveals the only way to get things back to normal is to get the teachers vaccinated.',
16 'timestamp': 1615352400,
17 'upload_date': '20210310',
18 },
19 }, {
20 'url': 'http://southpark.cc.com/collections/7758/fan-favorites/1',
21 'only_matching': True,
22 }, {
23 'url': 'https://www.southparkstudios.com/episodes/h4o269/south-park-stunning-and-brave-season-19-ep-1',
24 'only_matching': True,
25 }]
26
27 def _get_feed_query(self, uri):
28 return {
29 'accountOverride': 'intl.mtvi.com',
30 'arcEp': 'shared.southpark.global',
31 'ep': '90877963',
32 'imageEp': 'shared.southpark.global',
33 'mgid': uri,
34 }
35
36
37 class SouthParkEsIE(SouthParkIE): # XXX: Do not subclass from concrete IE
38 IE_NAME = 'southpark.cc.com:espaƱol'
39 _VALID_URL = r'https?://(?:www\.)?(?P<url>southpark\.cc\.com/es/episodios/(?P<id>.+?)(\?|#|$))'
40 _LANG = 'es'
41
42 _TESTS = [{
43 'url': 'http://southpark.cc.com/es/episodios/s01e01-cartman-consigue-una-sonda-anal#source=351c1323-0b96-402d-a8b9-40d01b2e9bde&position=1&sort=!airdate',
44 'info_dict': {
45 'title': 'Cartman Consigue Una Sonda Anal',
46 'description': 'Cartman Consigue Una Sonda Anal',
47 },
48 'playlist_count': 4,
49 'skip': 'Geo-restricted',
50 }]
51
52
53 class SouthParkDeIE(SouthParkIE): # XXX: Do not subclass from concrete IE
54 IE_NAME = 'southpark.de'
55 _VALID_URL = r'https?://(?:www\.)?(?P<url>southpark\.de/(?:(en/(videoclip|collections|episodes|video-clips))|(videoclip|collections|folgen))/(?P<id>(?P<unique_id>.+?)/.+?)(?:\?|#|$))'
56 _TESTS = [{
57 'url': 'https://www.southpark.de/videoclip/rsribv/south-park-rueckzug-zum-gummibonbon-wald',
58 'only_matching': True,
59 }, {
60 'url': 'https://www.southpark.de/folgen/jiru42/south-park-verkabelung-staffel-23-ep-9',
61 'only_matching': True,
62 }, {
63 'url': 'https://www.southpark.de/collections/zzno5a/south-park-good-eats/7q26gp',
64 'only_matching': True,
65 }, {
66 # clip
67 'url': 'https://www.southpark.de/en/video-clips/ct46op/south-park-tooth-fairy-cartman',
68 'info_dict': {
69 'id': 'e99d45ea-ed00-11e0-aca6-0026b9414f30',
70 'ext': 'mp4',
71 'title': 'Tooth Fairy Cartman',
72 'description': 'md5:db02e23818b4dc9cb5f0c5a7e8833a68',
73 },
74 }, {
75 # episode
76 'url': 'https://www.southpark.de/en/episodes/yy0vjs/south-park-the-pandemic-special-season-24-ep-1',
77 'info_dict': {
78 'id': 'f5fbd823-04bc-11eb-9b1b-0e40cf2fc285',
79 'ext': 'mp4',
80 'title': 'South Park',
81 'description': 'md5:ae0d875eff169dcbed16b21531857ac1',
82 },
83 }, {
84 # clip
85 'url': 'https://www.southpark.de/videoclip/ct46op/south-park-zahnfee-cartman',
86 'info_dict': {
87 'id': 'e99d45ea-ed00-11e0-aca6-0026b9414f30',
88 'ext': 'mp4',
89 'title': 'Zahnfee Cartman',
90 'description': 'md5:b917eec991d388811d911fd1377671ac',
91 },
92 }, {
93 # episode
94 'url': 'https://www.southpark.de/folgen/242csn/south-park-her-mit-dem-hirn-staffel-1-ep-7',
95 'info_dict': {
96 'id': '607115f3-496f-40c3-8647-2b0bcff486c0',
97 'ext': 'mp4',
98 'title': 'md5:South Park | Pink Eye | E 0107 | HDSS0107X deu | Version: 634312 | Comedy Central S1',
99 },
100 }]
101
102 def _get_feed_url(self, uri, url=None):
103 video_id = self._id_from_uri(uri)
104 config = self._download_json(
105 f'http://media.mtvnservices.com/pmt/e1/access/index.html?uri={uri}&configtype=edge&ref={url}', video_id)
106 return self._remove_template_parameter(config['feedWithQueryParams'])
107
108 def _get_feed_query(self, uri):
109 return
110
111
112 class SouthParkLatIE(SouthParkIE): # XXX: Do not subclass from concrete IE
113 IE_NAME = 'southpark.lat'
114 _VALID_URL = r'https?://(?:www\.)?southpark\.lat/(?:en/)?(?:video-?clips?|collections|episod(?:e|io)s)/(?P<id>[^/?#&]+)'
115 _TESTS = [{
116 'url': 'https://www.southpark.lat/en/video-clips/ct46op/south-park-tooth-fairy-cartman',
117 'only_matching': True,
118 }, {
119 'url': 'https://www.southpark.lat/episodios/9h0qbg/south-park-orgia-gatuna-temporada-3-ep-7',
120 'only_matching': True,
121 }, {
122 'url': 'https://www.southpark.lat/en/collections/29ve08/south-park-heating-up/lydbrc',
123 'only_matching': True,
124 }, {
125 # clip
126 'url': 'https://www.southpark.lat/en/video-clips/ct46op/south-park-tooth-fairy-cartman',
127 'info_dict': {
128 'id': 'e99d45ea-ed00-11e0-aca6-0026b9414f30',
129 'ext': 'mp4',
130 'title': 'Tooth Fairy Cartman',
131 'description': 'md5:db02e23818b4dc9cb5f0c5a7e8833a68',
132 },
133 }, {
134 # episode
135 'url': 'https://www.southpark.lat/episodios/9h0qbg/south-park-orgia-gatuna-temporada-3-ep-7',
136 'info_dict': {
137 'id': 'f5fbd823-04bc-11eb-9b1b-0e40cf2fc285',
138 'ext': 'mp4',
139 'title': 'South Park',
140 'description': 'md5:ae0d875eff169dcbed16b21531857ac1',
141 },
142 }]
143
144 def _get_feed_url(self, uri, url=None):
145 video_id = self._id_from_uri(uri)
146 config = self._download_json(
147 f'http://media.mtvnservices.com/pmt/e1/access/index.html?uri={uri}&configtype=edge&ref={url}',
148 video_id)
149 return self._remove_template_parameter(config['feedWithQueryParams'])
150
151 def _get_feed_query(self, uri):
152 return
153
154
155 class SouthParkNlIE(SouthParkIE): # XXX: Do not subclass from concrete IE
156 IE_NAME = 'southpark.nl'
157 _VALID_URL = r'https?://(?:www\.)?(?P<url>southpark\.nl/(?:clips|(?:full-)?episodes|collections)/(?P<id>.+?)(\?|#|$))'
158 _FEED_URL = 'http://www.southpark.nl/feeds/video-player/mrss/'
159
160 _TESTS = [{
161 'url': 'http://www.southpark.nl/full-episodes/s18e06-freemium-isnt-free',
162 'info_dict': {
163 'title': 'Freemium Isn\'t Free',
164 'description': 'Stan is addicted to the new Terrance and Phillip mobile game.',
165 },
166 'playlist_mincount': 3,
167 }]
168
169
170 class SouthParkDkIE(SouthParkIE): # XXX: Do not subclass from concrete IE
171 IE_NAME = 'southparkstudios.dk'
172 _VALID_URL = r'https?://(?:www\.)?(?P<url>southparkstudios\.(?:dk|nu)/(?:clips|full-episodes|collections)/(?P<id>.+?)(\?|#|$))'
173 _FEED_URL = 'http://www.southparkstudios.dk/feeds/video-player/mrss/'
174
175 _TESTS = [{
176 'url': 'http://www.southparkstudios.dk/full-episodes/s18e07-grounded-vindaloop',
177 'info_dict': {
178 'title': 'Grounded Vindaloop',
179 'description': 'Butters is convinced he\'s living in a virtual reality.',
180 },
181 'playlist_mincount': 3,
182 }, {
183 'url': 'http://www.southparkstudios.dk/collections/2476/superhero-showdown/1',
184 'only_matching': True,
185 }, {
186 'url': 'http://www.southparkstudios.nu/collections/2476/superhero-showdown/1',
187 'only_matching': True,
188 }]