Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
XianxinMao
Yt Dlp
提交
f6755419
Y
Yt Dlp
项目概览
XianxinMao
/
Yt Dlp
11 个月 前同步成功
通知
27
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Y
Yt Dlp
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
f6755419
编写于
7月 21, 2021
作者:
P
Philip Xu
提交者:
GitHub
7月 21, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[douyin] Add extractor (#513)
Authored-by: pukkandan, pyx
上级
145bd631
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
146 addition
and
0 deletion
+146
-0
yt_dlp/extractor/douyin.py
yt_dlp/extractor/douyin.py
+145
-0
yt_dlp/extractor/extractors.py
yt_dlp/extractor/extractors.py
+1
-0
未找到文件。
yt_dlp/extractor/douyin.py
0 → 100644
浏览文件 @
f6755419
# coding: utf-8
from
..utils
import
(
int_or_none
,
traverse_obj
,
url_or_none
,
)
from
.common
import
(
InfoExtractor
,
compat_urllib_parse_unquote
,
)
class
DouyinIE
(
InfoExtractor
):
_VALID_URL
=
r
'https?://(?:www\.)?douyin\.com/video/(?P<id>[0-9]+)'
_TESTS
=
[{
'url'
:
'https://www.douyin.com/video/6961737553342991651'
,
'md5'
:
'10523312c8b8100f353620ac9dc8f067'
,
'info_dict'
:
{
'id'
:
'6961737553342991651'
,
'ext'
:
'mp4'
,
'title'
:
'#杨超越 小小水手带你去远航❤️'
,
'uploader'
:
'杨超越'
,
'upload_date'
:
'20210513'
,
'timestamp'
:
1620905839
,
'uploader_id'
:
'110403406559'
,
'view_count'
:
int
,
'like_count'
:
int
,
'repost_count'
:
int
,
'comment_count'
:
int
,
}
},
{
'url'
:
'https://www.douyin.com/video/6982497745948921092'
,
'md5'
:
'd78408c984b9b5102904cf6b6bc2d712'
,
'info_dict'
:
{
'id'
:
'6982497745948921092'
,
'ext'
:
'mp4'
,
'title'
:
'这个夏日和小羊@杨超越 一起遇见白色幻想'
,
'uploader'
:
'杨超越工作室'
,
'upload_date'
:
'20210708'
,
'timestamp'
:
1625739481
,
'uploader_id'
:
'408654318141572'
,
'view_count'
:
int
,
'like_count'
:
int
,
'repost_count'
:
int
,
'comment_count'
:
int
,
}
},
{
'url'
:
'https://www.douyin.com/video/6953975910773099811'
,
'md5'
:
'72e882e24f75064c218b76c8b713c185'
,
'info_dict'
:
{
'id'
:
'6953975910773099811'
,
'ext'
:
'mp4'
,
'title'
:
'#一起看海 出现在你的夏日里'
,
'uploader'
:
'杨超越'
,
'upload_date'
:
'20210422'
,
'timestamp'
:
1619098692
,
'uploader_id'
:
'110403406559'
,
'view_count'
:
int
,
'like_count'
:
int
,
'repost_count'
:
int
,
'comment_count'
:
int
,
}
},
{
'url'
:
'https://www.douyin.com/video/6950251282489675042'
,
'md5'
:
'b4db86aec367ef810ddd38b1737d2fed'
,
'info_dict'
:
{
'id'
:
'6950251282489675042'
,
'ext'
:
'mp4'
,
'title'
:
'哈哈哈,成功了哈哈哈哈哈哈'
,
'uploader'
:
'杨超越'
,
'upload_date'
:
'20210412'
,
'timestamp'
:
1618231483
,
'uploader_id'
:
'110403406559'
,
'view_count'
:
int
,
'like_count'
:
int
,
'repost_count'
:
int
,
'comment_count'
:
int
,
}
},
{
'url'
:
'https://www.douyin.com/video/6963263655114722595'
,
'md5'
:
'1abe1c477d05ee62efb40bf2329957cf'
,
'info_dict'
:
{
'id'
:
'6963263655114722595'
,
'ext'
:
'mp4'
,
'title'
:
'#哪个爱豆的105度最甜 换个角度看看我哈哈'
,
'uploader'
:
'杨超越'
,
'upload_date'
:
'20210517'
,
'timestamp'
:
1621261163
,
'uploader_id'
:
'110403406559'
,
'view_count'
:
int
,
'like_count'
:
int
,
'repost_count'
:
int
,
'comment_count'
:
int
,
}
}]
def
_real_extract
(
self
,
url
):
video_id
=
self
.
_match_id
(
url
)
webpage
=
self
.
_download_webpage
(
url
,
video_id
)
render_data
=
self
.
_parse_json
(
self
.
_search_regex
(
r
'<script [^>]*\bid=[\'"]RENDER_DATA[\'"][^>]*>(%7B.+%7D)</script>'
,
webpage
,
'render data'
),
video_id
,
transform_source
=
compat_urllib_parse_unquote
)
details
=
traverse_obj
(
render_data
,
(...,
'aweme'
,
'detail'
),
get_all
=
False
)
thumbnails
=
[{
'url'
:
self
.
_proto_relative_url
(
url
)}
for
url
in
traverse_obj
(
details
,
(
'video'
,
(
'cover'
,
'dynamicCover'
,
'originCover'
)),
expected_type
=
url_or_none
,
default
=
[])]
common
=
{
'width'
:
traverse_obj
(
details
,
(
'video'
,
'width'
),
expected_type
=
int
),
'height'
:
traverse_obj
(
details
,
(
'video'
,
'height'
),
expected_type
=
int
),
'ext'
:
'mp4'
,
}
formats
=
[{
**
common
,
'url'
:
self
.
_proto_relative_url
(
url
)}
for
url
in
traverse_obj
(
details
,
(
'video'
,
'playAddr'
,
...,
'src'
),
expected_type
=
url_or_none
,
default
=
[])
if
url
]
self
.
_remove_duplicate_formats
(
formats
)
download_url
=
traverse_obj
(
details
,
(
'download'
,
'url'
),
expected_type
=
url_or_none
)
if
download_url
:
formats
.
append
({
**
common
,
'format_id'
:
'download'
,
'url'
:
self
.
_proto_relative_url
(
download_url
),
'quality'
:
1
,
})
self
.
_sort_formats
(
formats
)
return
{
'id'
:
video_id
,
'title'
:
details
.
get
(
'desc'
)
or
self
.
_html_search_meta
(
'title'
,
webpage
),
'formats'
:
formats
,
'thumbnails'
:
thumbnails
,
'uploader'
:
traverse_obj
(
details
,
(
'authorInfo'
,
'nickname'
),
expected_type
=
str
),
'uploader_id'
:
traverse_obj
(
details
,
(
'authorInfo'
,
'uid'
),
expected_type
=
str
),
'uploader_url'
:
'https://www.douyin.com/user/%s'
%
traverse_obj
(
details
,
(
'authorInfo'
,
'secUid'
),
expected_type
=
str
),
'timestamp'
:
int_or_none
(
details
.
get
(
'createTime'
)),
'duration'
:
traverse_obj
(
details
,
(
'video'
,
'duration'
),
expected_type
=
int
),
'view_count'
:
traverse_obj
(
details
,
(
'stats'
,
'playCount'
),
expected_type
=
int
),
'like_count'
:
traverse_obj
(
details
,
(
'stats'
,
'diggCount'
),
expected_type
=
int
),
'repost_count'
:
traverse_obj
(
details
,
(
'stats'
,
'shareCount'
),
expected_type
=
int
),
'comment_count'
:
traverse_obj
(
details
,
(
'stats'
,
'commentCount'
),
expected_type
=
int
),
}
yt_dlp/extractor/extractors.py
浏览文件 @
f6755419
...
...
@@ -321,6 +321,7 @@
DiscoveryPlusIndiaShowIE
,
)
from
.dotsub
import
DotsubIE
from
.douyin
import
DouyinIE
from
.douyutv
import
(
DouyuShowIE
,
DouyuTVIE
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录