From 302efc19ea970c3737f088d21b69f440d7f440e3 Mon Sep 17 00:00:00 2001 From: dongmao zhang Date: Thu, 9 Aug 2012 02:04:02 +0800 Subject: [PATCH 1/5] add youku support --- youtube_dl/InfoExtractors.py | 118 +++++++++++++++++++++++++++++++++++ youtube_dl/__init__.py | 1 + 2 files changed, 119 insertions(+) diff --git a/youtube_dl/InfoExtractors.py b/youtube_dl/InfoExtractors.py index ddb4aa16b..e1fc93b6b 100644 --- a/youtube_dl/InfoExtractors.py +++ b/youtube_dl/InfoExtractors.py @@ -13,6 +13,8 @@ import urllib import urllib2 import email.utils import xml.etree.ElementTree +import random +import math from urlparse import parse_qs try: @@ -2955,3 +2957,119 @@ class MTVIE(InfoExtractor): } return [info] + + + +class YoukuIE(InfoExtractor): + + _VALID_URL = r'(?:http://)?v\.youku\.com/v_show/id_(?P[A-Za-z0-9]+)\.html' + IE_NAME = u'Youku' + + def __init__(self, downloader=None): + InfoExtractor.__init__(self, downloader) + + def report_download_webpage(self, file_id): + """Report webpage download.""" + self._downloader.to_screen(u'[Youku] %s: Downloading webpage' % file_id) + + def report_extraction(self, file_id): + """Report information extraction.""" + self._downloader.to_screen(u'[Youku] %s: Extracting information' % file_id) + + def _gen_sid(self): + nowTime = int(time.time() * 1000) + random1 = random.randint(1000,1998) + random2 = random.randint(1000,9999) + + return "%d%d%d" %(nowTime,random1,random2) + + def _get_file_ID_mix_string(self, seed): + mixed = [] + source = list("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/\:._-1234567890") + seed = float(seed) + for i in range(len(source)): + seed = (seed * 211 + 30031 ) % 65536 + index = math.floor(seed / 65536 * len(source) ) + mixed.append(source[int(index)]) + source.remove(source[int(index)]) + #return ''.join(mixed) + return mixed + + + def _get_file_id(self, fileId, seed): + mixed = self._get_file_ID_mix_string(seed) + ids = fileId.split('*') + realId = [] + for ch in ids: + if ch is not '': + realId.append(mixed[int(ch)]) + return ''.join(realId) + + def _gen_key(self, key1, key2): + pass + + + + + def _real_extract(self, url): + mobj = re.match(self._VALID_URL, url) + if mobj is None: + self._downloader.trouble(u'ERROR: invalid URL: %s' % url) + return + video_id = mobj.group('ID') + + info_url = 'http://v.youku.com/player/getPlayList/VideoIDS/' + video_id + print info_url + + request = urllib2.Request(info_url, None, std_headers) + try: + self.report_download_webpage(video_id) + jsondata = urllib2.urlopen(request).read() + except (urllib2.URLError, httplib.HTTPException, socket.error) as err: + self._downloader.trouble(u'ERROR: Unable to retrieve video webpage: %s' % str(err)) + return + + self.report_extraction(video_id) + try: + config = json.loads(jsondata) + + video_title = config['data'][0]['title'] + seed = config['data'][0]['seed'] + #choose format flv first + format = 'flv' + + fileid = config['data'][0]['streamfileids'][format] + seg_number = len(config['data'][0]['segs'][format]) + keys=[] + for i in xrange(seg_number): + keys.append(config['data'][0]['segs'][format][i]['k']) + + #TODO check error + #youku only could be viewed from mainland china + except: + self._downloader.trouble(u'ERROR: unable to extract info section') + return + + files_info=[] + sid = self._gen_sid() + fileid = self._get_file_id(fileid, seed) + + #column 8,9 of fileid represent the segment number + #fileid[7:9] should be changed + for index, key in enumerate(keys): + + temp_fileid = '%s%02x%s' % (fileid[0:8], index, fileid[10:]) + download_url = 'http://f.youku.com/player/getFlvPath/sid/%s_%02x/st/flv/fileid/%s?k=%s' % (sid, index, temp_fileid, key) + print download_url + info = { + 'id': '%s_part%02x' % (video_id, index), + 'url': download_url, + 'uploader': None, + 'title': '%s_part%02x' % (video_title, index), + 'ext': u'flv', + 'format': u'NA' + } + files_info.append(info) + + return files_info +# vim: tabstop=4 shiftwidth=4 softtabstop=4 noexpandtab diff --git a/youtube_dl/__init__.py b/youtube_dl/__init__.py index 86951840d..84b972d51 100644 --- a/youtube_dl/__init__.py +++ b/youtube_dl/__init__.py @@ -351,6 +351,7 @@ def gen_extractors(): MixcloudIE(), StanfordOpenClassroomIE(), MTVIE(), + YoukuIE(), GenericIE() ] From 0a98b09bc2d0553f0f5bd44c26b468e55a163d07 Mon Sep 17 00:00:00 2001 From: dongmao zhang Date: Thu, 9 Aug 2012 02:53:21 +0800 Subject: [PATCH 2/5] youku default to download hd2 video --- youtube-dl | Bin 40663 -> 42046 bytes youtube_dl/InfoExtractors.py | 24 ++++++++++++++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/youtube-dl b/youtube-dl index f2268af227b0eee8548aa6d106861cc508879931..09e205cc1f9333412cfafad15804b7d9c864abea 100755 GIT binary patch delta 27699 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 delta 26324 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

F_HpTa$tXP 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 diff --git a/youtube_dl/InfoExtractors.py b/youtube_dl/InfoExtractors.py index e1fc93b6b..00953a254 100644 --- a/youtube_dl/InfoExtractors.py +++ b/youtube_dl/InfoExtractors.py @@ -3035,11 +3035,27 @@ class YoukuIE(InfoExtractor): video_title = config['data'][0]['title'] seed = config['data'][0]['seed'] - #choose format flv first - format = 'flv' + + format = self._downloader.params.get('format', None) + supported_format = config['data'][0]['streamfileids'].keys() + + if format is None or format == 'best': + if 'hd2' in supported_format: + format = 'hd2' + else: + format = 'flv' + ext = u'flv' + elif format == 'worst': + format = 'mp4' + ext = u'mp4' + else: + format = 'flv' + ext = u'flv' + fileid = config['data'][0]['streamfileids'][format] seg_number = len(config['data'][0]['segs'][format]) + keys=[] for i in xrange(seg_number): keys.append(config['data'][0]['segs'][format][i]['k']) @@ -3065,8 +3081,8 @@ class YoukuIE(InfoExtractor): 'id': '%s_part%02x' % (video_id, index), 'url': download_url, 'uploader': None, - 'title': '%s_part%02x' % (video_title, index), - 'ext': u'flv', + 'title': video_title + 'ext': ext, 'format': u'NA' } files_info.append(info) From 7733d455c8b5444395fa3ca0b198bbbb10ac5058 Mon Sep 17 00:00:00 2001 From: dongmao zhang Date: Thu, 9 Aug 2012 03:14:02 +0800 Subject: [PATCH 3/5] fix 0a->0A bug --- youtube_dl/InfoExtractors.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/youtube_dl/InfoExtractors.py b/youtube_dl/InfoExtractors.py index 00953a254..bc26f2f30 100644 --- a/youtube_dl/InfoExtractors.py +++ b/youtube_dl/InfoExtractors.py @@ -3074,11 +3074,11 @@ class YoukuIE(InfoExtractor): #fileid[7:9] should be changed for index, key in enumerate(keys): - temp_fileid = '%s%02x%s' % (fileid[0:8], index, fileid[10:]) - download_url = 'http://f.youku.com/player/getFlvPath/sid/%s_%02x/st/flv/fileid/%s?k=%s' % (sid, index, temp_fileid, key) + temp_fileid = '%s%02X%s' % (fileid[0:8], index, fileid[10:]) + download_url = 'http://f.youku.com/player/getFlvPath/sid/%s_%02X/st/flv/fileid/%s?k=%s' % (sid, index, temp_fileid, key) print download_url info = { - 'id': '%s_part%02x' % (video_id, index), + 'id': '%s_part%d' % (video_id, index), 'url': download_url, 'uploader': None, 'title': video_title From b5809a68bf94e5aa1172e5415be8d7fb91877de8 Mon Sep 17 00:00:00 2001 From: dongmao zhang Date: Thu, 9 Aug 2012 12:26:26 +0800 Subject: [PATCH 4/5] merge --- a.c | 254 +++++++++++++++++++++++++++++++++++ youtube-dl | Bin 42046 -> 42040 bytes youtube_dl/InfoExtractors.py | 4 +- 3 files changed, 256 insertions(+), 2 deletions(-) create mode 100644 a.c diff --git a/a.c b/a.c new file mode 100644 index 000000000..50dc1cc91 --- /dev/null +++ b/a.c @@ -0,0 +1,254 @@ +#include +#include +#include +#include + +#define FLVF_HEADER 1 +#define FLVF_SCRIPT 2 + +struct flvhdr +{ + char fh_magic[3]; + char fh_version; + char fh_flags; + char fh_hlen[4]; + char fh_pads[4]; +}__attribute__((packed)); + +struct taghdr +{ + uint8_t th_type; + uint8_t th_dlen[3]; + uint8_t th_tstamp[3]; + uint8_t th_xstamp; + uint8_t th_streamid[3]; +}__attribute__((packed)); + +struct flvcombine +{ + FILE * fc_file; + uint32_t fc_flags; + uint32_t fc_timestamp; + uint32_t fc_filesize; + double fc_duration; + int fc_filesize_offset; + int fc_duration_offset; +}; + +/* duration, filesize */ + +uint32_t buftoint(const void *buf, size_t len) +{ + uint32_t bufint = 0; + const uint8_t *pval = (const uint8_t *)buf; + while (len-- > 0) + bufint = (bufint << 8) + *pval++; + return bufint; +} + +int dd_copy(FILE * dst_fp, FILE * src_fp, size_t dlen) +{ + size_t len; + char buf[64 * 1024]; + while (dlen > 0 && !feof(src_fp)) { + len = fread(buf, 1, dlen < sizeof(buf)? dlen: sizeof(buf), src_fp); + if (fwrite(buf, 1, len, dst_fp) != len) + break; + dlen -= len; + } + return dlen; +} + +void adjtimestamp(struct taghdr *header, uint32_t stampbase) +{ + uint32_t netval = 0; + uint32_t adjtime = stampbase; + adjtime += buftoint(&header->th_tstamp, sizeof(header->th_tstamp)); + adjtime += (header->th_xstamp << 24); + header->th_xstamp = (adjtime >> 24); + header->th_tstamp[0] = (adjtime >> 16); + header->th_tstamp[1] = (adjtime >> 8); + header->th_tstamp[2] = (adjtime >> 0); +} + +void update_metainfo(struct flvcombine *combine, FILE *fp, size_t dlen) +{ + int i; + size_t len; + char *pmem = NULL; + char buf[256 * 1024]; + double duration = 0.0; + uint8_t duration_bytes[8]; + printf("dlen: %d\n", dlen); + assert (dlen < (256 * 1024)); + + len = fread(buf, 1, dlen < sizeof(buf)? dlen: sizeof(buf), fp); + if (len == 0) + return; + pmem = (char *)memmem(buf, len, "duration", 8); + if (pmem == NULL || pmem + 17l - buf > len) + return; + memcpy(&duration_bytes, pmem + 9, 8); + for (i = 0; i < 4; i ++) { + uint8_t tmp = duration_bytes[i]; + duration_bytes[i] = duration_bytes[7 - i]; + duration_bytes[7 - i] = tmp; + } + memcpy(&duration, &duration_bytes, 8); + combine->fc_duration += duration; + if (combine->fc_flags & FLVF_SCRIPT) + return; + combine->fc_duration_offset = + combine->fc_filesize + (pmem + 9l - buf) + sizeof(struct taghdr); + pmem = (char *)memmem(buf, len, "filesize", 8); + if (pmem == NULL || pmem + 17l - buf > len) + return; + combine->fc_filesize_offset = + combine->fc_filesize + (pmem + 9l - buf) + sizeof(struct taghdr); +} + +int addflv(struct flvcombine *combine, const char *path) +{ + int error = 0; + FILE *fp, *fout; + char magic[4]; + long savepos; + size_t len, dlen, flags; + struct flvhdr header; + struct taghdr *last; + struct taghdr tagvideo; + struct taghdr tagaudio; + struct taghdr tagheader; + + fp = fopen(path, "rb"); + fout = combine->fc_file; + if (fp == NULL || fout == NULL) + return 0; + + last = NULL; + memset(magic, 0, sizeof(magic)); + memset(&tagvideo, 0, sizeof(tagvideo)); + memset(&tagaudio, 0, sizeof(tagaudio)); + + if ( !fread(&header, sizeof(header), 1, fp) ) + goto fail; + + memcpy(magic, header.fh_magic, 3); + if ( strcmp("FLV", magic) ) + goto fail; + + if ((combine->fc_flags & FLVF_HEADER) == 0) { + fwrite(&header, sizeof(header), 1, fout); + combine->fc_filesize += sizeof(header); + combine->fc_flags |= FLVF_HEADER; + } + + printf("magic: %s\n", magic); + printf("flags: 0x%02x\n", header.fh_flags); + printf("version: 0x%02x\n", header.fh_version); + printf("header len: %d\n", buftoint(header.fh_hlen, sizeof(header.fh_hlen))); + + while (feof(fp) == 0) { + if ( !fread(&tagheader, sizeof(tagheader), 1, fp) ) + goto fail; + + dlen = buftoint(tagheader.th_dlen, sizeof(tagheader.th_dlen)); + + switch (tagheader.th_type) + { + case 0x09: + adjtimestamp(&tagheader, combine->fc_timestamp); + tagvideo = tagheader; + last = &tagvideo; + break; + case 0x08: + adjtimestamp(&tagheader, combine->fc_timestamp); + tagaudio = tagheader; + last = &tagaudio; + break; + default: + flags = combine->fc_flags; + savepos = ftell(fp); + if (savepos == -1) + goto fail; + savepos = (flags & FLVF_SCRIPT)? (savepos + dlen + 4): savepos; + update_metainfo(combine, fp, dlen); + combine->fc_flags |= FLVF_SCRIPT; + if ( fseek(fp, savepos, SEEK_SET) ) + goto fail; + if (flags & FLVF_SCRIPT) + continue; + break; + } + fwrite(&tagheader, sizeof(tagheader), 1, fout); + combine->fc_filesize += sizeof(tagheader); + combine->fc_filesize += (dlen + 4); + if ( dd_copy(fout, fp, dlen + 4)) { + error = -__LINE__; + break; + } + } + +fail: + fclose(fp); + if (last == &tagvideo || last == &tagaudio) { + combine->fc_timestamp = buftoint(last->th_tstamp, sizeof(last->th_tstamp)); + combine->fc_timestamp |= (last->th_xstamp << 24); + printf("time stamp: %d\n", combine->fc_timestamp); + } + return 0; +} + +void fixedflv(struct flvcombine *context) +{ + int i; + double dblval = 0.0; + uint8_t dblbytes[8]; + FILE *fout = context->fc_file; + + if (context->fc_filesize_offset > 0) { + if ( fseek(fout, context->fc_filesize_offset, SEEK_SET) ) + return; + dblval = context->fc_filesize; + memcpy(dblbytes, &dblval, 8); + + for (i = 0; i < 4; i ++) { + uint8_t tmp = dblbytes[i]; + dblbytes[i] = dblbytes[7 - i]; + dblbytes[7 - i] = tmp; + } + fwrite(dblbytes, 8, 1, fout); + } + + if (context->fc_duration_offset > 0) { + if ( fseek(fout, context->fc_duration_offset, SEEK_SET) ) + return; + dblval = context->fc_duration; + memcpy(dblbytes, &dblval, 8); + + for (i = 0; i < 4; i ++) { + uint8_t tmp = dblbytes[i]; + dblbytes[i] = dblbytes[7 - i]; + dblbytes[7 - i] = tmp; + } + fwrite(dblbytes, 8, 1, fout); + } +} + +int main(int argc, char *argv[]) +{ + int i; + struct flvcombine context; + memset(&context, 0, sizeof(context)); + context.fc_file = fopen("out.flv", "wb"); + if (context.fc_file == NULL) + return -1; + context.fc_duration = 0; + for (i = 1; i < argc; i++) + addflv(&context, argv[i]); + fixedflv(&context); + fclose(context.fc_file); + + printf("seconds: %d\n", context.fc_timestamp); + return 0; +} diff --git a/youtube-dl b/youtube-dl index 09e205cc1f9333412cfafad15804b7d9c864abea..237181209161874fc06640ea4645299e8f3607c1 100755 GIT binary patch delta 13671 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 c1N4XhlOc%{lfI)s0c(^0qca8`q5uE@0D Date: Thu, 9 Aug 2012 02:04:02 +0800 Subject: [PATCH 5/5] add www.youku.com support --- youtube-dl | Bin 40663 -> 42041 bytes youtube_dl/InfoExtractors.py | 132 +++++++++++++++++++++++++++++++++++ youtube_dl/__init__.py | 1 + 3 files changed, 133 insertions(+) diff --git a/youtube-dl b/youtube-dl index f2268af227b0eee8548aa6d106861cc508879931..635b1356e22be41d6c0e359104f602a51b3f284d 100755 GIT binary patch delta 27693 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 TF#j|g=I^@u+j0Dye|G-`3BV>f delta 26283 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

F_HpTa$tXP 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[A-Za-z0-9]+)\.html' + IE_NAME = u'Youku' + + def __init__(self, downloader=None): + InfoExtractor.__init__(self, downloader) + + def report_download_webpage(self, file_id): + """Report webpage download.""" + self._downloader.to_screen(u'[Youku] %s: Downloading webpage' % file_id) + + def report_extraction(self, file_id): + """Report information extraction.""" + self._downloader.to_screen(u'[Youku] %s: Extracting information' % file_id) + + def _gen_sid(self): + nowTime = int(time.time() * 1000) + random1 = random.randint(1000,1998) + random2 = random.randint(1000,9999) + + return "%d%d%d" %(nowTime,random1,random2) + + def _get_file_ID_mix_string(self, seed): + mixed = [] + source = list("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/\:._-1234567890") + seed = float(seed) + for i in range(len(source)): + seed = (seed * 211 + 30031 ) % 65536 + index = math.floor(seed / 65536 * len(source) ) + mixed.append(source[int(index)]) + source.remove(source[int(index)]) + #return ''.join(mixed) + return mixed + + + def _get_file_id(self, fileId, seed): + mixed = self._get_file_ID_mix_string(seed) + ids = fileId.split('*') + realId = [] + for ch in ids: + if ch is not '': + realId.append(mixed[int(ch)]) + return ''.join(realId) + + def _gen_key(self, key1, key2): + pass + + + + + def _real_extract(self, url): + mobj = re.match(self._VALID_URL, url) + if mobj is None: + self._downloader.trouble(u'ERROR: invalid URL: %s' % url) + return + video_id = mobj.group('ID') + + info_url = 'http://v.youku.com/player/getPlayList/VideoIDS/' + video_id + + request = urllib2.Request(info_url, None, std_headers) + try: + self.report_download_webpage(video_id) + jsondata = urllib2.urlopen(request).read() + except (urllib2.URLError, httplib.HTTPException, socket.error) as err: + self._downloader.trouble(u'ERROR: Unable to retrieve video webpage: %s' % str(err)) + return + + self.report_extraction(video_id) + try: + config = json.loads(jsondata) + + video_title = config['data'][0]['title'] + seed = config['data'][0]['seed'] + + format = self._downloader.params.get('format', None) + supported_format = config['data'][0]['streamfileids'].keys() + + if format is None or format == 'best': + if 'hd2' in supported_format: + format = 'hd2' + else: + format = 'flv' + ext = u'flv' + elif format == 'worst': + format = 'mp4' + ext = u'mp4' + else: + format = 'flv' + ext = u'flv' + + + fileid = config['data'][0]['streamfileids'][format] + seg_number = len(config['data'][0]['segs'][format]) + + keys=[] + for i in xrange(seg_number): + keys.append(config['data'][0]['segs'][format][i]['k']) + + #TODO check error + #youku only could be viewed from mainland china + except: + self._downloader.trouble(u'ERROR: unable to extract info section') + return + + files_info=[] + sid = self._gen_sid() + fileid = self._get_file_id(fileid, seed) + + #column 8,9 of fileid represent the segment number + #fileid[7:9] should be changed + for index, key in enumerate(keys): + + temp_fileid = '%s%02X%s' % (fileid[0:8], index, fileid[10:]) + download_url = 'http://f.youku.com/player/getFlvPath/sid/%s_%02X/st/flv/fileid/%s?k=%s' % (sid, index, temp_fileid, key) + print download_url + info = { + 'id': '%s_part%02d' % (video_id, index), + 'url': download_url, + 'uploader': None, + 'title': video_title, + 'ext': ext, + 'format': u'NA' + } + files_info.append(info) + + return files_info diff --git a/youtube_dl/__init__.py b/youtube_dl/__init__.py index 86951840d..84b972d51 100644 --- a/youtube_dl/__init__.py +++ b/youtube_dl/__init__.py @@ -351,6 +351,7 @@ def gen_extractors(): MixcloudIE(), StanfordOpenClassroomIE(), MTVIE(), + YoukuIE(), GenericIE() ]