#!/usr/bin/env python # -*- coding: utf-8 -*- from ..common import * from ..extractor import VideoExtractor class Youku(VideoExtractor): name = "优酷 (Youku)" stream_types = [ # FIXME: Does not work for 1080P # {'id': 'hd3', 'container': 'flv', 'video_profile': '1080P'}, {'id': 'hd2', 'container': 'flv', 'video_profile': '超清'}, {'id': 'mp4', 'container': 'mp4', 'video_profile': '高清'}, {'id': 'flvhd', 'container': 'flv', 'video_profile': '高清'}, {'id': 'flv', 'container': 'flv', 'video_profile': '标清'}, {'id': '3gphd', 'container': '3gp', 'video_profile': '高清(3GP)'}, ] def parse_m3u8(m3u8): return re.findall(r'(http://[^?]+)\?ts_start=0', m3u8) def get_vid_from_url(url): """Extracts video ID from URL. """ return match1(url, r'youku\.com/v_show/id_([\w=]+)') or \ match1(url, r'player\.youku\.com/player\.php/sid/([\w=]+)/v\.swf') or \ match1(url, r'loader\.swf\?VideoIDS=([\w=]+)') def get_playlist_id_from_url(url): """Extracts playlist ID from URL. """ return match1(url, r'youku\.com/playlist_show/id_([\w=]+)') def download_playlist_by_url(self, url, **kwargs): self.url = url playlist_id = __class__.get_playlist_id_from_url(self.url) if playlist_id is None: log.wtf('[Failed] Unsupported URL pattern.') video_page = get_content('http://www.youku.com/playlist_show/id_%s' % playlist_id) videos = set(re.findall(r'href="(http://v\.youku\.com/[^?"]+)', video_page)) self.title = re.search(r'