From 4ce28ac2b57e5d7383c970c5e42819c672e4cac8 Mon Sep 17 00:00:00 2001 From: iawia002 Date: Fri, 15 Dec 2017 17:21:34 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20add=20douyin=20support?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + src/you_get/common.py | 1 + src/you_get/extractors/__init__.py | 1 + src/you_get/extractors/douyin.py | 38 ++++++++++++++++++++++++++++++ tests/test.py | 7 ++++++ 5 files changed, 48 insertions(+) create mode 100644 src/you_get/extractors/douyin.py diff --git a/README.md b/README.md index 2158c80f..5e338212 100644 --- a/README.md +++ b/README.md @@ -414,6 +414,7 @@ Use `--url`/`-u` to get a list of downloadable resource URLs extracted from the | 全民直播 | |✓| | | | 阳光宽频网 | |✓| | | | 西瓜视频 | |✓| | | +| 抖音 | |✓| | | For all other sites not on the list, the universal extractor will take care of finding and downloading interesting resources from the page. diff --git a/src/you_get/common.py b/src/you_get/common.py index ce707ef4..32d831e5 100755 --- a/src/you_get/common.py +++ b/src/you_get/common.py @@ -38,6 +38,7 @@ SITES = { 'dailymotion' : 'dailymotion', 'dilidili' : 'dilidili', 'douban' : 'douban', + 'douyin' : 'douyin', 'douyu' : 'douyutv', 'ehow' : 'ehow', 'facebook' : 'facebook', diff --git a/src/you_get/extractors/__init__.py b/src/you_get/extractors/__init__.py index 333cc03c..46e5c89c 100755 --- a/src/you_get/extractors/__init__.py +++ b/src/you_get/extractors/__init__.py @@ -15,6 +15,7 @@ from .coub import * from .dailymotion import * from .dilidili import * from .douban import * +from .douyin import * from .douyutv import * from .ehow import * from .facebook import * diff --git a/src/you_get/extractors/douyin.py b/src/you_get/extractors/douyin.py new file mode 100644 index 00000000..213837e7 --- /dev/null +++ b/src/you_get/extractors/douyin.py @@ -0,0 +1,38 @@ +# coding=utf-8 + +import re +import json + +from ..common import ( + url_size, + print_info, + get_content, + download_urls, + playlist_not_supported, +) + + +__all__ = ['douyin_download_by_url'] + + +def douyin_download_by_url(url, **kwargs): + page_content = get_content(url) + match_rule = re.compile(r'var data = \[(.*?)\];') + video_info = json.loads(match_rule.findall(page_content)[0]) + video_url = video_info['video']['play_addr']['url_list'][0] + title = video_info['cha_list'][0]['cha_name'] + video_format = 'mp4' + size = url_size(video_url) + print_info( + site_info='douyin.com', title=title, + type=video_format, size=size + ) + if not kwargs['info_only']: + download_urls( + urls=[video_url], title=title, ext=video_format, total_size=size, + **kwargs + ) + + +download = douyin_download_by_url +download_playlist = playlist_not_supported('douyin') diff --git a/tests/test.py b/tests/test.py index a4503cb9..36c699f5 100644 --- a/tests/test.py +++ b/tests/test.py @@ -8,6 +8,7 @@ from you_get.extractors import ( youtube, yixia, bilibili, + douyin, ) @@ -46,6 +47,12 @@ class YouGetTests(unittest.TestCase): 'https://www.bilibili.com/video/av13228063/', info_only=True ) + def test_douyin(self): + douyin.download( + 'https://www.douyin.com/share/video/6492273288897629454', + info_only=True + ) + if __name__ == '__main__': unittest.main()