2 from __future__ import unicode_literals
4 from .mtv import MTVServicesInfoExtractor
7 class SouthParkIE(MTVServicesInfoExtractor):
8 IE_NAME = 'southpark.cc.com'
9 _VALID_URL = r'https?://(?:www\.)?(?P<url>southpark(?:\.cc|studios)\.com/(?:clips|(?:full-)?episodes|collections)/(?P<id>.+?)(\?|#|$))'
11 _FEED_URL = 'http://feeds.mtvnservices.com/od/feed/intl-mrss-player-feed'
14 'url': 'http://southpark.cc.com/clips/104437/bat-daded#tab=featured',
16 'id': 'a7bff6c2-ed00-11e0-aca6-0026b9414f30',
18 'title': 'South Park|Bat Daded',
19 'description': 'Randy disqualifies South Park by getting into a fight with Bat Dad.',
20 'timestamp': 1112760000,
21 'upload_date': '20050406',
24 'url': 'http://southpark.cc.com/collections/7758/fan-favorites/1',
25 'only_matching': True,
27 'url': 'https://www.southparkstudios.com/episodes/h4o269/south-park-stunning-and-brave-season-19-ep-1',
28 'only_matching': True,
31 def _get_feed_query(self, uri):
33 'accountOverride': 'intl.mtvi.com',
34 'arcEp': 'shared.southpark.global',
36 'imageEp': 'shared.southpark.global',
41 class SouthParkEsIE(SouthParkIE):
42 IE_NAME = 'southpark.cc.com:español'
43 _VALID_URL = r'https?://(?:www\.)?(?P<url>southpark\.cc\.com/episodios-en-espanol/(?P<id>.+?)(\?|#|$))'
47 'url': 'http://southpark.cc.com/episodios-en-espanol/s01e01-cartman-consigue-una-sonda-anal#source=351c1323-0b96-402d-a8b9-40d01b2e9bde&position=1&sort=!airdate',
49 'title': 'Cartman Consigue Una Sonda Anal',
50 'description': 'Cartman Consigue Una Sonda Anal',
53 'skip': 'Geo-restricted',
57 class SouthParkDeIE(SouthParkIE):
58 IE_NAME = 'southpark.de'
59 _VALID_URL = r'https?://(?:www\.)?(?P<url>southpark\.de/(?:clips|alle-episoden|collections)/(?P<id>.+?)(\?|#|$))'
60 _FEED_URL = 'http://www.southpark.de/feeds/video-player/mrss/'
63 'url': 'http://www.southpark.de/clips/uygssh/the-government-wont-respect-my-privacy#tab=featured',
65 'id': '85487c96-b3b9-4e39-9127-ad88583d9bf2',
67 'title': 'South Park|The Government Won\'t Respect My Privacy',
68 'description': 'Cartman explains the benefits of "Shitter" to Stan, Kyle and Craig.',
69 'timestamp': 1380160800,
70 'upload_date': '20130926',
73 # non-ASCII characters in initial URL
74 'url': 'http://www.southpark.de/alle-episoden/s18e09-hashtag-aufwärmen',
76 'title': 'Hashtag „Aufwärmen“',
77 'description': 'Kyle will mit seinem kleinen Bruder Ike Videospiele spielen. Als der nicht mehr mit ihm spielen will, hat Kyle Angst, dass er die Kids von heute nicht mehr versteht.',
81 # non-ASCII characters in redirect URL
82 'url': 'http://www.southpark.de/alle-episoden/s18e09',
84 'title': 'Hashtag „Aufwärmen“',
85 'description': 'Kyle will mit seinem kleinen Bruder Ike Videospiele spielen. Als der nicht mehr mit ihm spielen will, hat Kyle Angst, dass er die Kids von heute nicht mehr versteht.',
89 'url': 'http://www.southpark.de/collections/2476/superhero-showdown/1',
90 'only_matching': True,
94 class SouthParkNlIE(SouthParkIE):
95 IE_NAME = 'southpark.nl'
96 _VALID_URL = r'https?://(?:www\.)?(?P<url>southpark\.nl/(?:clips|(?:full-)?episodes|collections)/(?P<id>.+?)(\?|#|$))'
97 _FEED_URL = 'http://www.southpark.nl/feeds/video-player/mrss/'
100 'url': 'http://www.southpark.nl/full-episodes/s18e06-freemium-isnt-free',
102 'title': 'Freemium Isn\'t Free',
103 'description': 'Stan is addicted to the new Terrance and Phillip mobile game.',
105 'playlist_mincount': 3,
109 class SouthParkDkIE(SouthParkIE):
110 IE_NAME = 'southparkstudios.dk'
111 _VALID_URL = r'https?://(?:www\.)?(?P<url>southparkstudios\.(?:dk|nu)/(?:clips|full-episodes|collections)/(?P<id>.+?)(\?|#|$))'
112 _FEED_URL = 'http://www.southparkstudios.dk/feeds/video-player/mrss/'
115 'url': 'http://www.southparkstudios.dk/full-episodes/s18e07-grounded-vindaloop',
117 'title': 'Grounded Vindaloop',
118 'description': 'Butters is convinced he\'s living in a virtual reality.',
120 'playlist_mincount': 3,
122 'url': 'http://www.southparkstudios.dk/collections/2476/superhero-showdown/1',
123 'only_matching': True,
125 'url': 'http://www.southparkstudios.nu/collections/2476/superhero-showdown/1',
126 'only_matching': True,