]>
Raphaƫl G. Git Repositories - youtubedl/blob - youtube_dl/extractor/steam.py
   1 from __future__ 
import unicode_literals
 
   5 from .common 
import InfoExtractor
 
  12 class SteamIE(InfoExtractor
): 
  14         https?://store\.steampowered\.com/ 
  16             (?P<urltype>video|app)/ #If the page is only for videos or for a game 
  18             (?P<videoID>\d*)(?P<extra>\??) # For urltype == video we sometimes get the videoID 
  20         https?://(?:www\.)?steamcommunity\.com/sharedfiles/filedetails/\?id=(?P<fileID>[0-9]+) 
  22     _VIDEO_PAGE_TEMPLATE 
= 'http://store.steampowered.com/video/%s/' 
  23     _AGECHECK_TEMPLATE 
= 'http://store.steampowered.com/agecheck/video/%s/?snr=1_agecheck_agecheck__age-gate&ageDay=1&ageMonth=January&ageYear=1970' 
  25         "url": "http://store.steampowered.com/video/105600/", 
  28                 "md5": "f870007cee7065d7c76b88f0a45ecc07", 
  32                     "title": "Terraria 1.1 Trailer", 
  37                 "md5": "61aaf31a5c5c3041afb58fb83cbb5751", 
  41                     "title": "Terraria Trailer", 
  50         'url': 'http://steamcommunity.com/sharedfiles/filedetails/?id=242472205', 
  54             'upload_date': '20140329', 
  55             'title': 'FRONTIERS - Final Greenlight Trailer', 
  56             'description': 'md5:dc96a773669d0ca1b36c13c1f30250d9', 
  57             'uploader': 'AAD Productions', 
  58             'uploader_id': 'AtomicAgeDogGames', 
  62     def _real_extract(self
, url
): 
  63         m 
= re
.match(self
._VALID
_URL
, url
) 
  64         fileID 
= m
.group('fileID') 
  69             gameID 
= m
.group('gameID') 
  71             videourl 
= self
._VIDEO
_PAGE
_TEMPLATE 
% playlist_id
 
  72         webpage 
= self
._download
_webpage
(videourl
, playlist_id
) 
  74         if re
.search('<h2>Please enter your birth date to continue:</h2>', webpage
) is not None: 
  75             videourl 
= self
._AGECHECK
_TEMPLATE 
% playlist_id
 
  76             self
.report_age_confirmation() 
  77             webpage 
= self
._download
_webpage
(videourl
, playlist_id
) 
  80             playlist_title 
= self
._html
_search
_regex
( 
  81                 r
'<div class="workshopItemTitle">(.+)</div>', webpage
, 'title') 
  82             mweb 
= re
.finditer(r
'''(?x) 
  83                 'movie_(?P<videoID>[0-9]+)':\s*\{\s* 
  84                 YOUTUBE_VIDEO_ID:\s*"(?P<youtube_id>[^"]+)", 
  88                 'url': vid
.group('youtube_id'), 
  92             playlist_title 
= self
._html
_search
_regex
( 
  93                 r
'<h2 class="pageheader">(.*?)</h2>', webpage
, 'game title') 
  95             mweb 
= re
.finditer(r
'''(?x) 
  96                 'movie_(?P<videoID>[0-9]+)':\s*\{\s* 
  97                 FILENAME:\s*"(?P<videoURL>[\w:/\.\?=]+)" 
  98                 (,\s*MOVIE_NAME:\s*\"(?P<videoName>[\w:/\.\?=\+-]+)\")?\s*\}, 
 100             titles 
= re
.finditer( 
 101                 r
'<span class="title">(?P<videoName>.+?)</span>', webpage
) 
 102             thumbs 
= re
.finditer( 
 103                 r
'<img class="movie_thumb" src="(?P<thumbnail>.+?)">', webpage
) 
 106             for vid
, vtitle
, thumb 
in zip(mweb
, titles
, thumbs
): 
 107                 video_id 
= vid
.group('videoID') 
 108                 title 
= vtitle
.group('videoName') 
 109                 video_url 
= vid
.group('videoURL') 
 110                 video_thumb 
= thumb
.group('thumbnail') 
 112                     raise ExtractorError('Cannot find video url for %s' % video_id
) 
 117                     'title': unescapeHTML(title
), 
 118                     'thumbnail': video_thumb
 
 121             raise ExtractorError('Could not find any videos') 
 123         return self
.playlist_result(videos
, playlist_id
, playlist_title
)