Browse Source

[douyutv] Improve and extract all formats

totalwebcasting
Sergey M․ 10 years ago
parent
commit
2ca1c5aa9f
2 changed files with 46 additions and 28 deletions
  1. +1
    -1
      youtube_dl/extractor/__init__.py
  2. +45
    -27
      youtube_dl/extractor/douyutv.py

+ 1
- 1
youtube_dl/extractor/__init__.py View File

@ -107,7 +107,7 @@ from .dctp import DctpTvIE
from .deezer import DeezerPlaylistIE
from .dfb import DFBIE
from .dotsub import DotsubIE
from .douyutv import DouyutvIE
from .douyutv import DouyuTVIE
from .dreisat import DreiSatIE
from .drbonanza import DRBonanzaIE
from .drtuber import DrTuberIE


+ 45
- 27
youtube_dl/extractor/douyutv.py View File

@ -2,58 +2,76 @@
from __future__ import unicode_literals
from .common import InfoExtractor
from ..utils import ExtractorError
from ..utils import (
ExtractorError,
)
class DouyutvIE(InfoExtractor):
class DouyuTVIE(InfoExtractor):
_VALID_URL = r'http://(?:www\.)?douyutv\.com/(?P<id>[A-Za-z0-9]+)'
'''
show_status: 1 2
'''
_TEST = {
'url': 'http://www.douyutv.com/iseven',
'info_dict': {
'id': 'iseven',
'title': '清晨醒脑!T-ara根本停不下来!',
'ext': 'flv',
'title': 're:^清晨醒脑!T-ara根本停不下来! [0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}$',
'description': 'md5:9e525642c25a0a24302869937cf69d17',
'thumbnail': 're:^https?://.*\.jpg$',
'uploader': '7师傅',
'uploader_id': '431925',
'is_live': True,
},
'params': {
'skip_download': True,
}
}
def _real_extract(self, url):
video_id = self._match_id(url)
info_url = 'http://www.douyutv.com/api/client/room/' + video_id
config = self._download_json(info_url, video_id)
config = self._download_json(
'http://www.douyutv.com/api/client/room/%s' % video_id, video_id)
error_code = config.get('error')
show_status = config['data'].get('show_status')
data = config['data']
error_code = config.get('error', 0)
show_status = data.get('show_status')
if error_code is not 0:
raise ExtractorError('Server reported error %i' % error_code,
expected=True)
raise ExtractorError(
'Server reported error %i' % error_code, expected=True)
# 1 = live, 2 = offline
if show_status == '2':
raise ExtractorError('The live show has not yet started',
expected=True)
raise ExtractorError(
'Live stream is offline', expected=True)
base_url = data['rtmp_url']
live_path = data['rtmp_live']
title = config['data'].get('room_name')
rtmp_url = config['data'].get('rtmp_url')
rtmp_live = config['data'].get('rtmp_live')
thumbnail = config['data'].get('room_src')
title = self._live_title(data['room_name'])
description = data.get('show_details')
thumbnail = data.get('room_src')
url = rtmp_url+'/'+rtmp_live
uploader = data.get('nickname')
uploader_id = data.get('owner_uid')
multi_formats = data.get('rtmp_multi_bitrate')
if not isinstance(multi_formats, dict):
multi_formats = {}
multi_formats['live'] = live_path
formats = [{
'url': '%s/%s' % (base_url, format_path),
'format_id': format_id,
'preference': 1 if format_id == 'live' else 0,
} for format_id, format_path in multi_formats.items()]
self._sort_formats(formats)
return {
'id': video_id,
'title': title,
'ext':'flv',
'url': url,
'description': description,
'thumbnail': thumbnail,
'uploader': uploader,
'uploader_id': uploader_id,
'formats': formats,
'is_live': True,
# TODO more properties (see youtube_dl/extractor/common.py)
}
}

Loading…
Cancel
Save