]>
Raphaƫl G. Git Repositories - youtubedl/blob - youtube_dl/extractor/adultswim.py
0d05cbb4b16b470aaa1a82d318c07f323ccd1bf7
   2 from __future__ 
import unicode_literals
 
   6 from .common 
import InfoExtractor
 
   9 class AdultSwimIE(InfoExtractor
): 
  10     _VALID_URL 
= r
'https?://video\.adultswim\.com/(?P<path>.+?)(?:\.html)?(?:\?.*)?(?:#.*)?$' 
  12         'url': 'http://video.adultswim.com/rick-and-morty/close-rick-counters-of-the-rick-kind.html?x=y#title', 
  15                 'md5': '4da359ec73b58df4575cd01a610ba5dc', 
  17                     'id': '8a250ba1450996e901453d7f02ca02f5', 
  19                     'title': 'Rick and Morty Close Rick-Counters of the Rick Kind part 1', 
  20                     'description': 'Rick has a run in with some old associates, resulting in a fallout with Morty. You got any chips, broh?', 
  21                     'uploader': 'Rick and Morty', 
  22                     'thumbnail': 'http://i.cdn.turner.com/asfix/repository/8a250ba13f865824013fc9db8b6b0400/thumbnail_267549017116827057.jpg' 
  26                 'md5': 'ffbdf55af9331c509d95350bd0cc1819', 
  28                     'id': '8a250ba1450996e901453d7f4bd102f6', 
  30                     'title': 'Rick and Morty Close Rick-Counters of the Rick Kind part 2', 
  31                     'description': 'Rick has a run in with some old associates, resulting in a fallout with Morty. You got any chips, broh?', 
  32                     'uploader': 'Rick and Morty', 
  33                     'thumbnail': 'http://i.cdn.turner.com/asfix/repository/8a250ba13f865824013fc9db8b6b0400/thumbnail_267549017116827057.jpg' 
  37                 'md5': 'b92409635540304280b4b6c36bd14a0a', 
  39                     'id': '8a250ba1450996e901453d7fa73c02f7', 
  41                     'title': 'Rick and Morty Close Rick-Counters of the Rick Kind part 3', 
  42                     'description': 'Rick has a run in with some old associates, resulting in a fallout with Morty. You got any chips, broh?', 
  43                     'uploader': 'Rick and Morty', 
  44                     'thumbnail': 'http://i.cdn.turner.com/asfix/repository/8a250ba13f865824013fc9db8b6b0400/thumbnail_267549017116827057.jpg' 
  48                 'md5': 'e8818891d60e47b29cd89d7b0278156d', 
  50                     'id': '8a250ba1450996e901453d7fc8ba02f8', 
  52                     'title': 'Rick and Morty Close Rick-Counters of the Rick Kind part 4', 
  53                     'description': 'Rick has a run in with some old associates, resulting in a fallout with Morty. You got any chips, broh?', 
  54                     'uploader': 'Rick and Morty', 
  55                     'thumbnail': 'http://i.cdn.turner.com/asfix/repository/8a250ba13f865824013fc9db8b6b0400/thumbnail_267549017116827057.jpg' 
  74     def _real_extract(self
, url
): 
  75         mobj 
= re
.match(self
._VALID
_URL
, url
) 
  76         video_path 
= mobj
.group('path') 
  78         webpage 
= self
._download
_webpage
(url
, video_path
) 
  79         episode_id 
= self
._html
_search
_regex
( 
  80             r
'<link rel="video_src" href="http://i\.adultswim\.com/adultswim/adultswimtv/tools/swf/viralplayer.swf\?id=([0-9a-f]+?)"\s*/?\s*>', 
  81             webpage
, 'episode_id') 
  82         title 
= self
._og
_search
_title
(webpage
) 
  84         index_url 
= 'http://asfix.adultswim.com/asfix-svc/episodeSearch/getEpisodesByIDs?networkName=AS&ids=%s' % episode_id
 
  85         idoc 
= self
._download
_xml
(index_url
, title
, 'Downloading episode index', 'Unable to download episode index') 
  87         episode_el 
= idoc
.find('.//episode') 
  88         show_title 
= episode_el
.attrib
.get('collectionTitle') 
  89         episode_title 
= episode_el
.attrib
.get('title') 
  90         thumbnail 
= episode_el
.attrib
.get('thumbnailUrl') 
  91         description 
= episode_el
.find('./description').text
.strip() 
  94         segment_els 
= episode_el
.findall('./segments/segment') 
  96         for part_num
, segment_el 
in enumerate(segment_els
): 
  97             segment_id 
= segment_el
.attrib
.get('id') 
  98             segment_title 
= '%s %s part %d' % (show_title
, episode_title
, part_num 
+ 1) 
  99             thumbnail 
= segment_el
.attrib
.get('thumbnailUrl') 
 100             duration 
= segment_el
.attrib
.get('duration') 
 102             segment_url 
= 'http://asfix.adultswim.com/asfix-svc/episodeservices/getCvpPlaylist?networkName=AS&id=%s' % segment_id
 
 103             idoc 
= self
._download
_xml
( 
 104                 segment_url
, segment_title
, 
 105                 'Downloading segment information', 'Unable to download segment information') 
 108             file_els 
= idoc
.findall('.//files/file') 
 110             for file_el 
in file_els
: 
 111                 bitrate 
= file_el
.attrib
.get('bitrate') 
 112                 type = file_el
.attrib
.get('type') 
 113                 width
, height 
= self
._video
_dimensions
.get(bitrate
, (None, None)) 
 115                     'format_id': '%s-%s' % (bitrate
, type), 
 117                     'ext': self
._video
_extensions
.get(bitrate
, 'mp4'), 
 118                     # The bitrate may not be a number (for example: 'iphone') 
 119                     'tbr': int(bitrate
) if bitrate
.isdigit() else None, 
 124             self
._sort
_formats
(formats
) 
 128                 'title': segment_title
, 
 130                 'uploader': show_title
, 
 131                 'thumbnail': thumbnail
, 
 132                 'duration': duration
, 
 133                 'description': description
 
 139             'display_id': video_path
, 
 141             'title': '%s %s' % (show_title
, episode_title
), 
 142             'description': description
, 
 143             'thumbnail': thumbnail