From: Philipp Hagemeister Date: Fri, 22 Aug 2014 15:40:36 +0000 (+0200) Subject: Merge remote-tracking branch 'anovicecodemonkey/generic-data-video-url' X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=commitdiff_plain;h=c71dfccc98208be44b1f639af72a257dae34d966;hp=-c;p=youtube-dl Merge remote-tracking branch 'anovicecodemonkey/generic-data-video-url' Conflicts: youtube_dl/extractor/generic.py --- c71dfccc98208be44b1f639af72a257dae34d966 diff --combined youtube_dl/extractor/generic.py index 8e915735e,dfa8d6153..7246ea7fc --- a/youtube_dl/extractor/generic.py +++ b/youtube_dl/extractor/generic.py @@@ -261,34 -261,20 +261,48 @@@ class GenericIE(InfoExtractor) }, 'add_ie': ['Dailymotion'], }, + # YouTube embed + { + 'url': 'http://www.badzine.de/ansicht/datum/2014/06/09/so-funktioniert-die-neue-englische-badminton-liga.html', + 'info_dict': { + 'id': 'FXRb4ykk4S0', + 'ext': 'mp4', + 'title': 'The NBL Auction 2014', + 'uploader': 'BADMINTON England', + 'uploader_id': 'BADMINTONEvents', + 'upload_date': '20140603', + 'description': 'md5:9ef128a69f1e262a700ed83edb163a73', + }, + 'add_ie': ['Youtube'], + 'params': { + 'skip_download': True, + } + }, + # MTVSercices embed + { + 'url': 'http://www.gametrailers.com/news-post/76093/north-america-europe-is-getting-that-mario-kart-8-mercedes-dlc-too', + 'md5': '35727f82f58c76d996fc188f9755b0d5', + 'info_dict': { + 'id': '0306a69b-8adf-4fb5-aace-75f8e8cbfca9', + 'ext': 'mp4', + 'title': 'Review', + 'description': 'Mario\'s life in the fast lane has never looked so good.', + }, + }, + # YouTube embed via + { + 'url': 'https://play.google.com/store/apps/details?id=com.gameloft.android.ANMP.GloftA8HM', + 'md5': 'c267b1ab6d736057d64babaa37e07a66', + 'info_dict': { + 'id': 'Ybd-qmqYYpA', + 'ext': 'mp4', + 'title': 'Asphalt 8: Airborne - Chinese Great Wall - Android Game Trailer', + 'uploader': 'gameloftandroid', + 'uploader_id': 'gameloftandroid', + 'upload_date': '20140321', + 'description': 'md5:9c6dca5dd75b7131ce482ccf080749d6' + } + } ] def report_download_webpage(self, video_id): @@@ -383,28 -369,17 +397,28 @@@ if not parsed_url.scheme: default_search = self._downloader.params.get('default_search') if default_search is None: - default_search = 'auto_warning' + default_search = 'fixup_error' - if default_search in ('auto', 'auto_warning'): + if default_search in ('auto', 'auto_warning', 'fixup_error'): if '/' in url: self._downloader.report_warning('The url doesn\'t specify the protocol, trying with http') return self.url_result('http://' + url) - else: + elif default_search != 'fixup_error': if default_search == 'auto_warning': - self._downloader.report_warning( - 'Falling back to youtube search for %s . Set --default-search to "auto" to suppress this warning.' % url) + if re.match(r'^(?:url|URL)$', url): + raise ExtractorError( + 'Invalid URL: %r . Call youtube-dl like this: youtube-dl -v "https://www.youtube.com/watch?v=BaW_jenozKc" ' % url, + expected=True) + else: + self._downloader.report_warning( + 'Falling back to youtube search for %s . Set --default-search "auto" to suppress this warning.' % url) return self.url_result('ytsearch:' + url) + + if default_search in ('error', 'fixup_error'): + raise ExtractorError( + ('%r is not a valid URL. ' + 'Set --default-search "ytsearch" (or run youtube-dl "ytsearch:%s" ) to search YouTube' + ) % (url, url), expected=True) else: assert ':' in default_search return self.url_result(default_search + url) @@@ -512,18 -487,21 +526,27 @@@ # Look for embedded YouTube player matches = re.findall(r'''(?x) - (?:]+?src=|data-video-url=|embedSWF\(\s*) - (["\'])(?P(?:https?:)?//(?:www\.)?youtube\.com/ + (?: + ]+?src=| ++ data-video-url=| + ]+?src=| + embedSWF\(?:\s* + ) + (["\']) + (?P(?:https?:)?//(?:www\.)?youtube\.com/ (?:embed|v)/.+?) \1''', webpage) if matches: urlrs = [self.url_result(unescapeHTML(tuppl[1]), 'Youtube') for tuppl in matches] + # First, ensure we have a duplicate free list of entries + seen = set() + new_list = [] + theurl = tuple(url.items()) + if theurl not in seen: + seen.add(theurl) + new_list.append(url) + urlrs = new_list return self.playlist_result( urlrs, playlist_id=video_id, playlist_title=video_title) @@@ -533,6 -511,14 +556,14 @@@ if matches: urlrs = [self.url_result(unescapeHTML(tuppl[1])) for tuppl in matches] + # First, ensure we have a duplicate free list of entries + seen = set() + new_list = [] + theurl = tuple(url.items()) + if theurl not in seen: + seen.add(theurl) + new_list.append(url) + urlrs = new_list return self.playlist_result( urlrs, playlist_id=video_id, playlist_title=video_title) @@@ -626,11 -612,6 +657,11 @@@ if mobj is not None: return self.url_result(mobj.group('url'), 'VK') + # Look for embedded ivi player + mobj = re.search(r']+?src=(["\'])(?Phttps?://(?:www\.)?ivi\.ru/video/player.+?)\1', webpage) + if mobj is not None: + return self.url_result(mobj.group('url'), 'Ivi') + # Look for embedded Huffington Post player mobj = re.search( r']+?src=(["\'])(?Phttps?://embed\.live\.huffingtonpost\.com/.+?)\1', webpage) @@@ -650,6 -631,14 +681,14 @@@ if matches: urlrs = [self.url_result(unescapeHTML(eurl), 'FunnyOrDie') for eurl in matches] + # First, ensure we have a duplicate free list of entries + seen = set() + new_list = [] + theurl = tuple(url.items()) + if theurl not in seen: + seen.add(theurl) + new_list.append(url) + urlrs = new_list return self.playlist_result( urlrs, playlist_id=video_id, playlist_title=video_title) @@@ -690,29 -679,6 +729,29 @@@ url = unescapeHTML(mobj.group('url')) return self.url_result(url) + # Look for embedded vulture.com player + mobj = re.search( + r'