southpark.py (5127B)
1 # coding: utf-8 2 from __future__ import unicode_literals 3 4 from .mtv import MTVServicesInfoExtractor 5 6 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>.+?)(\?|#|$))' 10 11 _FEED_URL = 'http://feeds.mtvnservices.com/od/feed/intl-mrss-player-feed' 12 13 _TESTS = [{ 14 'url': 'http://southpark.cc.com/clips/104437/bat-daded#tab=featured', 15 'info_dict': { 16 'id': 'a7bff6c2-ed00-11e0-aca6-0026b9414f30', 17 'ext': 'mp4', 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', 22 }, 23 }, { 24 'url': 'http://southpark.cc.com/collections/7758/fan-favorites/1', 25 'only_matching': True, 26 }, { 27 'url': 'https://www.southparkstudios.com/episodes/h4o269/south-park-stunning-and-brave-season-19-ep-1', 28 'only_matching': True, 29 }] 30 31 def _get_feed_query(self, uri): 32 return { 33 'accountOverride': 'intl.mtvi.com', 34 'arcEp': 'shared.southpark.global', 35 'ep': '90877963', 36 'imageEp': 'shared.southpark.global', 37 'mgid': uri, 38 } 39 40 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>.+?)(\?|#|$))' 44 _LANG = 'es' 45 46 _TESTS = [{ 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', 48 'info_dict': { 49 'title': 'Cartman Consigue Una Sonda Anal', 50 'description': 'Cartman Consigue Una Sonda Anal', 51 }, 52 'playlist_count': 4, 53 'skip': 'Geo-restricted', 54 }] 55 56 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/' 61 62 _TESTS = [{ 63 'url': 'http://www.southpark.de/clips/uygssh/the-government-wont-respect-my-privacy#tab=featured', 64 'info_dict': { 65 'id': '85487c96-b3b9-4e39-9127-ad88583d9bf2', 66 'ext': 'mp4', 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', 71 }, 72 }, { 73 # non-ASCII characters in initial URL 74 'url': 'http://www.southpark.de/alle-episoden/s18e09-hashtag-aufwärmen', 75 'info_dict': { 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.', 78 }, 79 'playlist_count': 3, 80 }, { 81 # non-ASCII characters in redirect URL 82 'url': 'http://www.southpark.de/alle-episoden/s18e09', 83 'info_dict': { 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.', 86 }, 87 'playlist_count': 3, 88 }, { 89 'url': 'http://www.southpark.de/collections/2476/superhero-showdown/1', 90 'only_matching': True, 91 }] 92 93 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/' 98 99 _TESTS = [{ 100 'url': 'http://www.southpark.nl/full-episodes/s18e06-freemium-isnt-free', 101 'info_dict': { 102 'title': 'Freemium Isn\'t Free', 103 'description': 'Stan is addicted to the new Terrance and Phillip mobile game.', 104 }, 105 'playlist_mincount': 3, 106 }] 107 108 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/' 113 114 _TESTS = [{ 115 'url': 'http://www.southparkstudios.dk/full-episodes/s18e07-grounded-vindaloop', 116 'info_dict': { 117 'title': 'Grounded Vindaloop', 118 'description': 'Butters is convinced he\'s living in a virtual reality.', 119 }, 120 'playlist_mincount': 3, 121 }, { 122 'url': 'http://www.southparkstudios.dk/collections/2476/superhero-showdown/1', 123 'only_matching': True, 124 }, { 125 'url': 'http://www.southparkstudios.nu/collections/2476/superhero-showdown/1', 126 'only_matching': True, 127 }]