kickstarter.py (2708B)
1 # coding: utf-8 2 from __future__ import unicode_literals 3 4 from .common import InfoExtractor 5 from ..utils import smuggle_url 6 7 8 class KickStarterIE(InfoExtractor): 9 _VALID_URL = r'https?://(?:www\.)?kickstarter\.com/projects/(?P<id>[^/]*)/.*' 10 _TESTS = [{ 11 'url': 'https://www.kickstarter.com/projects/1404461844/intersection-the-story-of-josh-grant/description', 12 'md5': 'c81addca81327ffa66c642b5d8b08cab', 13 'info_dict': { 14 'id': '1404461844', 15 'ext': 'mp4', 16 'title': 'Intersection: The Story of Josh Grant by Kyle Cowling', 17 'description': ( 18 'A unique motocross documentary that examines the ' 19 'life and mind of one of sports most elite athletes: Josh Grant.' 20 ), 21 }, 22 }, { 23 'note': 'Embedded video (not using the native kickstarter video service)', 24 'url': 'https://www.kickstarter.com/projects/597507018/pebble-e-paper-watch-for-iphone-and-android/posts/659178', 25 'info_dict': { 26 'id': '78704821', 27 'ext': 'mp4', 28 'uploader_id': 'pebble', 29 'uploader': 'Pebble Technology', 30 'title': 'Pebble iOS Notifications', 31 }, 32 'add_ie': ['Vimeo'], 33 }, { 34 'url': 'https://www.kickstarter.com/projects/1420158244/power-drive-2000/widget/video.html', 35 'info_dict': { 36 'id': '1420158244', 37 'ext': 'mp4', 38 'title': 'Power Drive 2000', 39 }, 40 }] 41 42 def _real_extract(self, url): 43 video_id = self._match_id(url) 44 webpage = self._download_webpage(url, video_id) 45 46 title = self._html_search_regex( 47 r'<title>\s*(.*?)(?:\s*—\s*Kickstarter)?\s*</title>', 48 webpage, 'title') 49 video_url = self._search_regex( 50 r'data-video-url="(.*?)"', 51 webpage, 'video URL', default=None) 52 if video_url is None: # No native kickstarter, look for embedded videos 53 return { 54 '_type': 'url_transparent', 55 'ie_key': 'Generic', 56 'url': smuggle_url(url, {'to_generic': True}), 57 'title': title, 58 } 59 60 thumbnail = self._og_search_thumbnail(webpage, default=None) 61 if thumbnail is None: 62 thumbnail = self._html_search_regex( 63 r'<img[^>]+class="[^"]+\s*poster\s*[^"]+"[^>]+src="([^"]+)"', 64 webpage, 'thumbnail image', fatal=False) 65 return { 66 'id': video_id, 67 'url': video_url, 68 'title': title, 69 'description': self._og_search_description(webpage, default=None), 70 'thumbnail': thumbnail, 71 }