youtube-dl

Another place where youtube-dl lives on
git clone git://git.oshgnacknak.de/youtube-dl.git
Log | Files | Refs | README | LICENSE

commit 60c7520a51b59b096c84033bcd709b5c4148338e
parent 0214ce7c7584bd27c6e175065e3991d97af05855
Author: Filippo Valsorda <filippo.valsorda@gmail.com>
Date:   Tue,  1 Jan 2013 06:49:30 -0800

Merge pull request #612 from jaimeMF/steamIE

SteamIE
Diffstat:
Mtest/tests.json | 9+++++++++
Myoutube_dl/InfoExtractors.py | 49+++++++++++++++++++++++++++++++++++++++++++++++++
Myoutube_dl/__init__.py | 1+
3 files changed, 59 insertions(+), 0 deletions(-)

diff --git a/test/tests.json b/test/tests.json @@ -120,5 +120,14 @@ "upload_date": "20091225", "description": "Installing Gentoo Linux on Powerbook G4, it turns out the sleep indicator becomes HDD activity indicator :D" } + }, + { + "name": "Steam", + "url": "http://store.steampowered.com/video/105600/", + "file": "81300.flv", + "md5": "f870007cee7065d7c76b88f0a45ecc07", + "info_dict": { + "title": "Terraria 1.1 Trailer" + } } ] diff --git a/youtube_dl/InfoExtractors.py b/youtube_dl/InfoExtractors.py @@ -3756,3 +3756,52 @@ class TweetReelIE(InfoExtractor): 'upload_date': upload_date } return [info] + +class SteamIE(InfoExtractor): + _VALID_URL = r"""http://store.steampowered.com/ + (?P<urltype>video|app)/ #If the page is only for videos or for a game + (?P<gameID>\d+)/? + (?P<videoID>\d*)(?P<extra>\??) #For urltype == video we sometimes get the videoID + """ + IE_NAME = u'Steam' + + def suitable(self, url): + """Receives a URL and returns True if suitable for this IE.""" + return re.match(self._VALID_URL, url, re.VERBOSE) is not None + + def report_download_video_page(self, game_id): + self._downloader.to_screen(u'[%s] %s: Downloading video page' % (self.IE_NAME, game_id)) + + def _real_extract(self, url): + m = re.match(self._VALID_URL, url, re.VERBOSE) + urlRE = r"'movie_(?P<videoID>\d+)': \{\s*FILENAME: \"(?P<videoURL>[\w:/\.\?=]+)\"(,\s*MOVIE_NAME: \"(?P<videoName>[\w:/\.\?=\+-]+)\")?\s*\}," + gameID = m.group('gameID') + videourl = 'http://store.steampowered.com/video/%s/' % gameID + try: + self.report_download_video_page(gameID) + urlh = compat_urllib_request.urlopen(videourl) + webpage_bytes = urlh.read() + webpage = webpage_bytes.decode('utf-8', 'ignore') + except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err: + self._downloader.trouble(u'ERROR: unable to download webpage: %s' % compat_str(err)) + return + mweb = re.finditer(urlRE, webpage) + namesRE = r'<span class=\"title\">(?P<videoName>[\w:/\.\?=\+\s-]+)</span>' + titles = list(re.finditer(namesRE, webpage)) + videos = [] + i = 0 + for vid in mweb: + video_id = vid.group('videoID') + title = titles[i].group('videoName') + video_url=vid.group('videoURL') + if not video_url: + self._downloader.trouble(u'ERROR: Cannot find video url for %s' % video_id) + i += 1 + info = { + 'id':video_id, + 'url':video_url, + 'ext': 'flv', + 'title': title + } + videos.append(info) + return videos diff --git a/youtube_dl/__init__.py b/youtube_dl/__init__.py @@ -313,6 +313,7 @@ def gen_extractors(): JustinTVIE(), FunnyOrDieIE(), TweetReelIE(), + SteamIE(), GenericIE() ]