]>
Commit | Line | Data |
---|---|---|
c364f15f JMF |
1 | # coding: utf-8 |
2 | ||
3 | import re | |
de7a91bf | 4 | import json |
c364f15f JMF |
5 | |
6 | from .common import InfoExtractor | |
7 | ||
8 | class WeiboIE(InfoExtractor): | |
9 | """ | |
10 | The videos in Weibo come from different sites, this IE just finds the link | |
11 | to the external video and returns it. | |
12 | """ | |
13 | _VALID_URL = r'https?://video\.weibo\.com/v/weishipin/t_(?P<id>.+?)\.htm' | |
14 | ||
15 | _TEST = { | |
9ee2b5f6 | 16 | u'add_ie': ['Sina'], |
c364f15f JMF |
17 | u'url': u'http://video.weibo.com/v/weishipin/t_zjUw2kZ.htm', |
18 | u'file': u'98322879.flv', | |
19 | u'info_dict': { | |
20 | u'title': u'魔声耳机最新广告“All Eyes On Us”', | |
21 | }, | |
22 | u'note': u'Sina video', | |
23 | u'params': { | |
24 | u'skip_download': True, | |
25 | }, | |
26 | } | |
27 | ||
28 | # Additional example videos from different sites | |
29 | # Youku: http://video.weibo.com/v/weishipin/t_zQGDWQ8.htm | |
30 | # 56.com: http://video.weibo.com/v/weishipin/t_zQ44HxN.htm | |
31 | ||
32 | def _real_extract(self, url): | |
33 | mobj = re.match(self._VALID_URL, url, flags=re.VERBOSE) | |
34 | video_id = mobj.group('id') | |
de7a91bf JMF |
35 | info_url = 'http://video.weibo.com/?s=v&a=play_list&format=json&mix_video_id=t_%s' % video_id |
36 | info_page = self._download_webpage(info_url, video_id) | |
37 | info = json.loads(info_page) | |
38 | ||
39 | videos_urls = map(lambda v: v['play_page_url'], info['result']['data']) | |
40 | #Prefer sina video since they have thumbnails | |
41 | videos_urls = sorted(videos_urls, key=lambda u: u'video.sina.com' in u) | |
42 | player_url = videos_urls[-1] | |
43 | m_sina = re.match(r'https?://video.sina.com.cn/v/b/(\d+)-\d+.html', player_url) | |
44 | if m_sina is not None: | |
45 | self.to_screen('Sina video detected') | |
46 | sina_id = m_sina.group(1) | |
47 | player_url = 'http://you.video.sina.com.cn/swf/quotePlayer.swf?vid=%s' % sina_id | |
c364f15f JMF |
48 | return self.url_result(player_url) |
49 |