Browse Source

[Weiqitv] Add new extractor

totalwebcasting
Founder Fang 9 years ago
parent
commit
5f432ac8f5
3 changed files with 114 additions and 1 deletions
  1. +3
    -1
      youtube_dl/extractor/__init__.py
  2. +57
    -0
      youtube_dl/extractor/letv.py
  3. +54
    -0
      youtube_dl/extractor/weiqitv.py

+ 3
- 1
youtube_dl/extractor/__init__.py 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


+ 57
- 0
youtube_dl/extractor/letv.py 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,
}

+ 54
- 0
youtube_dl/extractor/weiqitv.py 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,
}

Loading…
Cancel
Save