1
0
Fork 0
mirror of https://github.com/ytdl-org/youtube-dl.git synced 2024-11-22 18:22:21 +00:00

[Weiqitv] Add new extractor

This commit is contained in:
Founder Fang 2015-12-20 19:09:45 +08:00
parent ce7d243c7e
commit 5f432ac8f5
3 changed files with 114 additions and 1 deletions

View file

@ -331,7 +331,8 @@ from .lecture2go import Lecture2GoIE
from .letv import ( from .letv import (
LetvIE, LetvIE,
LetvTvIE, LetvTvIE,
LetvPlaylistIE LetvPlaylistIE,
LetvCloudIE,
) )
from .libsyn import LibsynIE from .libsyn import LibsynIE
from .lifenews import ( from .lifenews import (
@ -834,6 +835,7 @@ from .webofstories import (
WebOfStoriesPlaylistIE, WebOfStoriesPlaylistIE,
) )
from .weibo import WeiboIE from .weibo import WeiboIE
from .weiqitv import WeiqitvIE
from .wimp import WimpIE from .wimp import WimpIE
from .wistia import WistiaIE from .wistia import WistiaIE
from .worldstarhiphop import WorldStarHipHopIE from .worldstarhiphop import WorldStarHipHopIE

View file

@ -4,6 +4,7 @@ from __future__ import unicode_literals
import datetime import datetime
import re import re
import time import time
import base64
from .common import InfoExtractor from .common import InfoExtractor
from ..compat import ( from ..compat import (
@ -16,6 +17,7 @@ from ..utils import (
parse_iso8601, parse_iso8601,
sanitized_Request, sanitized_Request,
int_or_none, int_or_none,
str_or_none,
encode_data_uri, encode_data_uri,
) )
@ -239,3 +241,58 @@ class LetvPlaylistIE(LetvTvIE):
}, },
'playlist_mincount': 7 'playlist_mincount': 7
}] }]
class LetvCloudIE(InfoExtractor):
IE_DESC = '乐视云'
_VALID_URL = r'http://yuntv\.letv\.com/bcloud.html\?.*$'
_TESTS = [{
'url': 'http://yuntv.letv.com/bcloud.html?uu=p7jnfw5hw9&vu=467623dedf',
'md5': '26450599afd64c513bc77030ad15db44',
'info_dict': {
'id': 'p7jnfw5hw9_467623dedf',
'ext': 'mp4',
'title': 'p7jnfw5hw9_467623dedf',
},
}, {
'url': 'http://yuntv.letv.com/bcloud.html?uu=p7jnfw5hw9&vu=ec93197892&pu=2c7cd40209&auto_play=1&gpcflag=1&width=640&height=360',
'info_dict': {
'id': 'p7jnfw5hw9_ec93197892',
'ext': 'mp4',
'title': 'p7jnfw5hw9_ec93197892',
},
}, {
'url': 'http://yuntv.letv.com/bcloud.html?uu=p7jnfw5hw9&vu=187060b6fd',
'info_dict': {
'id': 'p7jnfw5hw9_187060b6fd',
'ext': 'mp4',
'title': 'p7jnfw5hw9_187060b6fd',
},
}]
def _real_extract(self, url):
uu = re.search('uu=([\w]+)', url).group(1)
vu = re.search('vu=([\w]+)', url).group(1)
media_id = uu + '_' + vu
play_json_req = sanitized_Request(
'http://api.letvcloud.com/gpc.php?cf=html5&sign=signxxxxx&ver=2.2&format=json&' +
"uu=" + uu + "&vu=" + vu)
play_json = self._download_json(play_json_req, media_id, 'Downloading playJson data')
formats = [{
'url': base64.b64decode(media['play_url']['main_url'].encode('utf-8')).decode("utf-8"),
'ext': 'mp4',
'format_id': int_or_none(media.get('play_url', {}).get('vtype')),
'format_note': str_or_none(media.get('play_url', {}).get('definition')),
'width': int_or_none(media.get('play_url', {}).get('vwidth')),
'height': int_or_none(media.get('play_url', {}).get('vheight')),
} for media in play_json['data']['video_info']['media'].values()]
self._sort_formats(formats)
return {
'id': media_id,
'title': media_id,
'formats': formats,
}

View file

@ -0,0 +1,54 @@
# coding: utf-8
from __future__ import unicode_literals
from .common import InfoExtractor
class WeiqitvIE(InfoExtractor):
IE_DESC = 'WQTV'
_VALID_URL = r'http://www\.weiqitv\.com/index/video_play\?videoId=(?P<id>[A-Za-z0-9]+)'
_TESTS = [{
'url': 'http://www.weiqitv.com/index/video_play?videoId=53c744f09874f0e76a8b46f3',
'md5': '26450599afd64c513bc77030ad15db44',
'info_dict': {
'id': '53c744f09874f0e76a8b46f3',
'ext': 'mp4',
'title': '2013年度盘点',
},
}, {
'url': 'http://www.weiqitv.com/index/video_play?videoId=567379a2d4c36cca518b4569',
'info_dict': {
'id': '567379a2d4c36cca518b4569',
'ext': 'mp4',
'title': '民国围棋史',
},
}, {
'url': 'http://www.weiqitv.com/index/video_play?videoId=5430220a9874f088658b4567',
'info_dict': {
'id': '5430220a9874f088658b4567',
'ext': 'mp4',
'title': '二路托过的手段和运用',
},
}]
def _real_extract(self, url):
media_id = self._match_id(url)
page = self._download_webpage(url, media_id)
info_json_str = self._search_regex(
'var\s+video\s*=\s*(.+});',
page, 'info_json_str')
info_json = self._parse_json(info_json_str, media_id)
letvcloud_url = self._search_regex(
'var\s+letvurl\s*=\s*"([^"]+)',
page, 'letvcloud_url')
return {
'_type': 'url_transparent',
"ie_key": 'LetvCloud',
'url': letvcloud_url,
'title': info_json['name'],
'id': media_id,
}