Add Douyin video downloader with auto-cookie feature
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: 创建详细错误报告帮助解决你遇到的问题
|
||||
title: "[BUG]"
|
||||
labels: 故障(bug)
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
- [ ] 我查看了 [文档](https://johnserf-seed.github.io/f2/quick-start.html) 以及 [已关闭的问题](https://github.com/Johnserf-Seed/f2/issues?q=is%3Aissue+is%3Aclosed) 以寻找可能的解决方案。
|
||||
- [ ] 我在 [常见的问题与解决办法](https://johnserf-seed.github.io/f2/question-answer/qa.html) 中找不到我的问题。
|
||||
- [ ] ~~*你的问题是公开的,请注意删除个人敏感内容再上传*~~
|
||||
- [ ] 不按照模板填写的问题将不会得到优先的处理。
|
||||
|
||||
- 如果错误问题是可视化的,请在**屏幕截图**贴截图。如果你是开发者请在**错误重现**提供一个最小的代码示例来演示该问题。
|
||||
- 相同的问题将会被标记`重复(duplicate)`,如果你的问题被标记为`已确认(confirmed)`则会在后续的推送中修复,请时刻留意。
|
||||
- 退订邮件提醒请点击邮件的底部`unsubscribe`。
|
||||
|
||||
|
||||
**详细描述错误**
|
||||
简明扼要地描述遇到的错误。
|
||||
|
||||
**系统平台**
|
||||
<details>
|
||||
<summary>单击展开</summary>
|
||||
Q:你在哪个平台(Win/Linux/Mac)上运行?你使用的是什么浏览器?你使用的是什么终端软件?你使用的F2是什么版本?
|
||||
|
||||
A:
|
||||
|
||||
- 操作系统: [e.g. Win10 x64 22H2 19045.4046]
|
||||
- 浏览器 [e.g. Edge 122.0.2365.52]
|
||||
- 终端 [e.g. WT 1.18.10301.0]
|
||||
- F2版本 [e.g. 0.0.1.5]
|
||||
|
||||
</details>
|
||||
|
||||
**错误重现**
|
||||
<details>
|
||||
<summary>单击展开</summary>
|
||||
Q: 请你复制并粘贴出错时运行的命令和配置文件内容,以及重现该行为的步骤。如果你一次性就提供完整信息,就会节省很多解决问题的时间。
|
||||
|
||||
A:
|
||||
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
|
||||
Q: 请添加调试命令`f2 -d DEBUG`重新运行出错的命令并提供日志目录下的日志文件。
|
||||
|
||||
A:
|
||||
|
||||
Q: 如果是开发者请提供最小的代码示例
|
||||
|
||||
A:
|
||||
|
||||
```python
|
||||
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
**预期行为**
|
||||
简明扼要地描述期望发生的事情。
|
||||
|
||||
**屏幕截图**
|
||||
请添加截图以帮助解释你的问题。
|
||||
|
||||
**日志文件**
|
||||
请添加调试日志文件以帮助解释你的问题。
|
||||
|
||||
**其他**
|
||||
如有,可以添加有关问题的其他信息。
|
||||
@@ -0,0 +1,26 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: 为此项目提出建议
|
||||
title: "[FEATRUE / REQUEST]"
|
||||
labels: 需求建议(enhancement)
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
在提出功能请求之前,请考虑在 https://github.com/Johnserf-Seed/f2/discussions 上发布反馈或在Discord中讨论。
|
||||
|
||||
**Q: 你有检查过类似建议的问题吗?**
|
||||
在所有的问题列表里检查是否有类似的建议。
|
||||
- [ ] 是
|
||||
- [ ] 否
|
||||
|
||||
**Q: 你将如何改进 F2?**
|
||||
请尽可能详细地说明。请提供你希望它如何工作的示例代码或流程。
|
||||
A:
|
||||
|
||||
**Q: 它能为你解决什么问题?**
|
||||
该功能能解决你的什么问题?我也许可以建议一种现有的解决方法。
|
||||
A:
|
||||
|
||||
**其他**
|
||||
如有,请添加有关功能请求的任何其他内容或截图。
|
||||
+144
@@ -0,0 +1,144 @@
|
||||
# Byte-compiled / optimized / DLL files
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
|
||||
RE_TikTokDownload.py
|
||||
TikTokPyPi
|
||||
upx.exe
|
||||
|
||||
GUI.py
|
||||
# C extensions
|
||||
*.so
|
||||
|
||||
# Distribution / packaging
|
||||
.Python
|
||||
build/
|
||||
develop-eggs/
|
||||
dist/
|
||||
downloads/
|
||||
eggs/
|
||||
.eggs/
|
||||
lib/
|
||||
lib64/
|
||||
parts/
|
||||
sdist/
|
||||
var/
|
||||
wheels/
|
||||
pip-wheel-metadata/
|
||||
share/python-wheels/
|
||||
*.egg-info/
|
||||
.installed.cfg
|
||||
*.egg
|
||||
MANIFEST
|
||||
|
||||
# PyInstaller
|
||||
# Usually these files are written by a python script from a template
|
||||
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
||||
*.manifest
|
||||
*.spec
|
||||
|
||||
# Installer logs
|
||||
pip-log.txt
|
||||
pip-delete-this-directory.txt
|
||||
|
||||
# Unit test / coverage reports
|
||||
htmlcov/
|
||||
.tox/
|
||||
.nox/
|
||||
.coverage
|
||||
.coverage.*
|
||||
.cache
|
||||
nosetests.xml
|
||||
coverage.xml
|
||||
*.cover
|
||||
*.py,cover
|
||||
.hypothesis/
|
||||
.pytest_cache/
|
||||
|
||||
# Translations
|
||||
*.mo
|
||||
*.pot
|
||||
|
||||
# Django stuff:
|
||||
*.log
|
||||
local_settings.py
|
||||
db.sqlite3
|
||||
db.sqlite3-journal
|
||||
|
||||
# Flask stuff:
|
||||
instance/
|
||||
.webassets-cache
|
||||
|
||||
# Scrapy stuff:
|
||||
.scrapy
|
||||
|
||||
# Sphinx documentation
|
||||
docs/_build/
|
||||
|
||||
# PyBuilder
|
||||
target/
|
||||
|
||||
# Jupyter Notebook
|
||||
.ipynb_checkpoints
|
||||
|
||||
# IPython
|
||||
profile_default/
|
||||
ipython_config.py
|
||||
|
||||
# pyenv
|
||||
.python-version
|
||||
|
||||
# pipenv
|
||||
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
||||
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
||||
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
||||
# install all needed dependencies.
|
||||
#Pipfile.lock
|
||||
|
||||
# PEP 582; used by e.g. github.com/David-OConnor/pyflow
|
||||
__pypackages__/
|
||||
|
||||
# Celery stuff
|
||||
celerybeat-schedule
|
||||
celerybeat.pid
|
||||
|
||||
# SageMath parsed files
|
||||
*.sage.py
|
||||
|
||||
# Environments
|
||||
.env
|
||||
.venv
|
||||
env/
|
||||
venv/
|
||||
ENV/
|
||||
env.bak/
|
||||
venv.bak/
|
||||
|
||||
# Spyder project settings
|
||||
.spyderproject
|
||||
.spyproject
|
||||
|
||||
# Rope project settings
|
||||
.ropeproject
|
||||
|
||||
# mkdocs documentation
|
||||
/site
|
||||
|
||||
# mypy
|
||||
.mypy_cache/
|
||||
.dmypy.json
|
||||
dmypy.json
|
||||
|
||||
# Pyre type checker
|
||||
.pyre/
|
||||
|
||||
#filter
|
||||
/Download/
|
||||
readconf.py
|
||||
.vscode
|
||||
/Server/node_modules/
|
||||
1.py
|
||||
test.py
|
||||
/refactor
|
||||
*.db
|
||||
@@ -0,0 +1,41 @@
|
||||
# UTF-8
|
||||
#
|
||||
# For more details about fixed file info 'ffi' see:
|
||||
# http://msdn.microsoft.com/en-us/library/ms646997.aspx
|
||||
VSVersionInfo(
|
||||
ffi=FixedFileInfo(
|
||||
# filevers and prodvers should be always a tuple with four items: (1, 2, 3, 4)
|
||||
# Set not needed items to zero 0.
|
||||
filevers=(1, 4, 2, 2),
|
||||
prodvers=(1, 4, 2, 2),
|
||||
# Contains a bitmask that specifies the valid bits 'flags'r
|
||||
mask=0x3f,
|
||||
# Contains a bitmask that specifies the Boolean attributes of the file.
|
||||
flags=0x0,
|
||||
# The operating system for which this file was designed.
|
||||
# 0x4 - NT and there is no need to change it.
|
||||
OS=0x40004,
|
||||
# The general type of file.
|
||||
# 0x1 - the file is an application.
|
||||
fileType=0x1,
|
||||
# The function of the file.
|
||||
# 0x0 - the function is not defined for this fileType
|
||||
subtype=0x0,
|
||||
# Creation date and time stamp.
|
||||
date=(0, 0)
|
||||
),
|
||||
kids=[
|
||||
StringFileInfo(
|
||||
[
|
||||
StringTable(
|
||||
u'080404b0',
|
||||
[StringStruct(u'CompanyName', u'JohnserfSeed'),
|
||||
StringStruct(u'FileDescription', u'抖音视频批量下载'),
|
||||
StringStruct(u'FileVersion', u'1.5.0.0'),
|
||||
StringStruct(u'LegalCopyright', u'Copyright (C) 2019-2023 JohnserfSeed. All Rights Reserved'),
|
||||
StringStruct(u'ProductName', u'抖音视频批量下载'),
|
||||
StringStruct(u'ProductVersion', u'1.5.0.0')])
|
||||
]),
|
||||
VarFileInfo([VarStruct(u'Translation', [2052, 1200])])
|
||||
]
|
||||
)
|
||||
@@ -0,0 +1,50 @@
|
||||
{
|
||||
"status_code": 0,
|
||||
"next_req_count": 0,
|
||||
"data": [
|
||||
{
|
||||
"uid": "89964046416",
|
||||
"short_id": "629064951",
|
||||
"nickname": "蔓越莓烦恼",
|
||||
"avatar_thumb": {
|
||||
"uri": "100x100/aweme-avatar/tos-cn-avt-0015_9c8aea4ba21f591774723a3820a07aef",
|
||||
"url_list": [
|
||||
"https://p3.douyinpic.com/aweme/100x100/aweme-avatar/tos-cn-avt-0015_9c8aea4ba21f591774723a3820a07aef.jpeg?from=3782654143",
|
||||
"https://p6.douyinpic.com/aweme/100x100/aweme-avatar/tos-cn-avt-0015_9c8aea4ba21f591774723a3820a07aef.jpeg?from=3782654143",
|
||||
"https://p11.douyinpic.com/aweme/100x100/aweme-avatar/tos-cn-avt-0015_9c8aea4ba21f591774723a3820a07aef.jpeg?from=3782654143"
|
||||
]
|
||||
},
|
||||
"signature": "风格多变的小🦁️\n🧣:yoki小蔓\n🍠:同名",
|
||||
"follow_status": 1,
|
||||
"enterprise_verify_reason": "",
|
||||
"verification_type": 0,
|
||||
"custom_verify": "",
|
||||
"unique_id": "777_23",
|
||||
"commerce_user_level": 0,
|
||||
"with_commerce_entry": false,
|
||||
"is_block": false,
|
||||
"sec_uid": "MS4wLjABAAAADgOltsr_SYTX6VurKA1H3n61xlFvYD1y_FrrY1UhI-o",
|
||||
"webcast_sp_info": {},
|
||||
"has_e_account_role": false,
|
||||
"follower_status": 0,
|
||||
"avatar_small": {
|
||||
"uri": "168x168/aweme-avatar/tos-cn-avt-0015_9c8aea4ba21f591774723a3820a07aef",
|
||||
"url_list": [
|
||||
"https://p6.douyinpic.com/img/aweme-avatar/tos-cn-avt-0015_9c8aea4ba21f591774723a3820a07aef~c5_168x168.webp?from=3782654143",
|
||||
"https://p26.douyinpic.com/img/aweme-avatar/tos-cn-avt-0015_9c8aea4ba21f591774723a3820a07aef~c5_168x168.webp?from=3782654143",
|
||||
"https://p3.douyinpic.com/img/aweme-avatar/tos-cn-avt-0015_9c8aea4ba21f591774723a3820a07aef~c5_168x168.webp?from=3782654143",
|
||||
"https://p6.douyinpic.com/img/aweme-avatar/tos-cn-avt-0015_9c8aea4ba21f591774723a3820a07aef~c5_168x168.jpeg?from=3782654143"
|
||||
]
|
||||
},
|
||||
"gender": 2
|
||||
}
|
||||
],
|
||||
"extra": {
|
||||
"fatal_item_ids": [],
|
||||
"logid": "20230720194718A0B55C720A4E710A68EF",
|
||||
"now": 1689853638000
|
||||
},
|
||||
"log_pb": {
|
||||
"impr_id": "20230720194718A0B55C720A4E710A68EF"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"aweme_detail": null,
|
||||
"filter_detail": {
|
||||
"aweme_id": "7223326284024139065",
|
||||
"detail_msg": "因作品权限或已被删除,无法观看,去看看其他作品吧",
|
||||
"filter_reason": "status_self_see",
|
||||
"icon": "https://p3.douyinpic.com/aweme-server-static-resource/reflow_notice_icon1.png~tplv-obj.image",
|
||||
"notice": "抱歉,作品不见了"
|
||||
},
|
||||
"log_pb": {
|
||||
"impr_id": "20230721183110BAFBC650B1FCD50ACE6F"
|
||||
},
|
||||
"status_code": 0
|
||||
}
|
||||
@@ -0,0 +1,679 @@
|
||||
{
|
||||
"aweme_detail": {
|
||||
"activity_video_type": 0,
|
||||
"admire_auth": {
|
||||
"admire_button": 0,
|
||||
"author_can_admire": 0,
|
||||
"exit_admire_in_aweme_post": 0,
|
||||
"is_admire": 0,
|
||||
"is_click_admire_icon_recently": 0,
|
||||
"is_fifty_admire_author_stable_fans": 0,
|
||||
"is_iron_fans_in_aweme_post": 0,
|
||||
"is_show_admire_button": 0,
|
||||
"is_show_admire_tab": 0
|
||||
},
|
||||
"anchors": null,
|
||||
"authentication_token": "MS4wLjAAAAAANyRrG5Pc-vuXA0GLydogCwzhiFLi6WTBtXip2GW2PU-iKfl3cohIbiKnusp5yQA33rgzXsD6iJmm7td2cYSH_Ys8s-17ENHTgs_Yyi-ZoFFJPJB-69Nc0G52o0RNJ5eFsUO4I5Qu_eD-blXDU95cE1pPL1j_-KJYSLborn6E5BcIWa0f0KJW-uBmnHBE-pim",
|
||||
"author": {
|
||||
"avatar_thumb": {
|
||||
"height": 720,
|
||||
"uri": "100x100/aweme-avatar/tos-cn-avt-0015_b4a51067e5d3c41d5d7758f14532ace6",
|
||||
"url_list": [
|
||||
"https://p3.douyinpic.com/aweme/100x100/aweme-avatar/tos-cn-avt-0015_b4a51067e5d3c41d5d7758f14532ace6.webp?from=116350172",
|
||||
"https://p11.douyinpic.com/aweme/100x100/aweme-avatar/tos-cn-avt-0015_b4a51067e5d3c41d5d7758f14532ace6.webp?from=116350172",
|
||||
"https://p6.douyinpic.com/aweme/100x100/aweme-avatar/tos-cn-avt-0015_b4a51067e5d3c41d5d7758f14532ace6.webp?from=116350172",
|
||||
"https://p3.douyinpic.com/aweme/100x100/aweme-avatar/tos-cn-avt-0015_b4a51067e5d3c41d5d7758f14532ace6.jpeg?from=116350172"
|
||||
],
|
||||
"width": 720
|
||||
},
|
||||
"cf_list": null,
|
||||
"close_friend_type": 0,
|
||||
"contacts_status": 2,
|
||||
"contrail_list": null,
|
||||
"cover_url": [
|
||||
{
|
||||
"height": 720,
|
||||
"uri": "c8510002be9a3a61aad2",
|
||||
"url_list": [
|
||||
"https://p95-sign.douyinpic.com/obj/c8510002be9a3a61aad2?x-expires=1691143200&x-signature=qJHxr4ZBto7cySJnUghuqh0g2xs%3D&from=116350172",
|
||||
"https://p3-sign.douyinpic.com/obj/c8510002be9a3a61aad2?x-expires=1691143200&x-signature=hL79H8ZL8auuw4fsZznTDVZpY1g%3D&from=116350172",
|
||||
"https://p5-a-sign.douyinpic.com/obj/c8510002be9a3a61aad2?x-expires=1691143200&x-signature=eVqrjbTpvzgt32HndkTGEBur9kw%3D&from=116350172"
|
||||
],
|
||||
"width": 720
|
||||
}
|
||||
],
|
||||
"create_time": 0,
|
||||
"custom_verify": "",
|
||||
"data_label_list": null,
|
||||
"endorsement_info_list": null,
|
||||
"enterprise_verify_reason": "",
|
||||
"familiar_visitor_user": null,
|
||||
"favoriting_count": 1622,
|
||||
"follow_status": 0,
|
||||
"follow_status_err_code": 1,
|
||||
"follower_count": 0,
|
||||
"follower_list_secondary_information_struct": null,
|
||||
"follower_status": 0,
|
||||
"following_count": 0,
|
||||
"im_role_ids": null,
|
||||
"is_ad_fake": false,
|
||||
"is_ban": false,
|
||||
"is_blocked_v2": false,
|
||||
"is_blocking_v2": false,
|
||||
"is_cf": 0,
|
||||
"live_high_value": 0,
|
||||
"max_follower_count": 0,
|
||||
"nickname": "百里TUFU",
|
||||
"not_seen_item_id_list": null,
|
||||
"not_seen_item_id_list_v2": null,
|
||||
"offline_info_list": null,
|
||||
"personal_tag_list": null,
|
||||
"prevent_download": false,
|
||||
"risk_notice_text": "",
|
||||
"sec_uid": "MS4wLjABAAAAERbHksh_jtLRYjO8hOx9clHF9tJDBsZmhcL0VoPLItYXWg8H0jwYJd3mJOxiIGsU",
|
||||
"secret": 0,
|
||||
"share_info": {
|
||||
"share_desc": "",
|
||||
"share_desc_info": "",
|
||||
"share_qrcode_url": {
|
||||
"height": 720,
|
||||
"uri": "2db880004580bf4797e76",
|
||||
"url_list": [
|
||||
"https://p26-sign.douyinpic.com/obj/2db880004580bf4797e76?x-expires=1689955200&x-signature=q%2FuR%2FZToVl1%2BYYP4oObAr3p33V4%3D&from=116350172",
|
||||
"https://p9-sign.douyinpic.com/obj/2db880004580bf4797e76?x-expires=1689955200&x-signature=gT2ojN5OcNq2zCl62z2lEUJkh3g%3D&from=116350172",
|
||||
"https://p95-sign.douyinpic.com/obj/2db880004580bf4797e76?x-expires=1689955200&x-signature=yx7UFONX9hLb89Le1j4SvzwETJI%3D&from=116350172"
|
||||
],
|
||||
"width": 720
|
||||
},
|
||||
"share_title": "",
|
||||
"share_title_myself": "",
|
||||
"share_title_other": "",
|
||||
"share_url": "",
|
||||
"share_weibo_desc": ""
|
||||
},
|
||||
"short_id": "2830954084",
|
||||
"signature": "遇见都是缘分\n🧣&🍠:半夜去杀猪x\n🛰️:JRCM0018888\n日常不定揪🎁@久然文化",
|
||||
"signature_extra": null,
|
||||
"special_follow_status": 0,
|
||||
"special_people_labels": null,
|
||||
"status": 1,
|
||||
"text_extra": null,
|
||||
"total_favorited": 43831234,
|
||||
"uid": "3689586767443357",
|
||||
"unique_id": "bailitufu8",
|
||||
"user_age": -1,
|
||||
"user_canceled": false,
|
||||
"user_permissions": null,
|
||||
"verification_type": 1
|
||||
},
|
||||
"author_mask_tag": 0,
|
||||
"author_user_id": 3689586767443357,
|
||||
"aweme_control": {
|
||||
"can_comment": true,
|
||||
"can_forward": true,
|
||||
"can_share": true,
|
||||
"can_show_comment": true
|
||||
},
|
||||
"aweme_id": "7071967230287744267",
|
||||
"aweme_type": 0,
|
||||
"book_bar": {},
|
||||
"boost_status": 0,
|
||||
"challenge_position": null,
|
||||
"chapter_list": null,
|
||||
"collect_stat": 0,
|
||||
"collection_corner_mark": 0,
|
||||
"comment_gid": 7071967230287744267,
|
||||
"comment_list": null,
|
||||
"comment_permission_info": {
|
||||
"can_comment": true,
|
||||
"comment_permission_status": 0,
|
||||
"item_detail_entry": true,
|
||||
"press_entry": true,
|
||||
"toast_guide": false
|
||||
},
|
||||
"comment_words_recommend": {
|
||||
"zero_comment": null
|
||||
},
|
||||
"commerce_config_data": null,
|
||||
"common_bar_info": "[]",
|
||||
"component_info_v2": "{\"desc_lines_limit\":0,\"hide_marquee\":false}",
|
||||
"cover_labels": null,
|
||||
"create_scale_type": null,
|
||||
"create_time": 1646570683,
|
||||
"desc": "其实早就和你表白过了 在看你的每个眼神里",
|
||||
"digg_lottie": {
|
||||
"can_bomb": 0,
|
||||
"lottie_id": ""
|
||||
},
|
||||
"disable_relation_bar": 0,
|
||||
"dislike_dimension_list": null,
|
||||
"dislike_dimension_list_v2": null,
|
||||
"distribute_circle": {
|
||||
"campus_block_interaction": false,
|
||||
"distribute_type": 0,
|
||||
"is_campus": false
|
||||
},
|
||||
"duet_aggregate_in_music_tab": false,
|
||||
"duration": 9611,
|
||||
"feed_comment_config": {
|
||||
"input_config_text": "善语结善缘,恶言伤人心"
|
||||
},
|
||||
"geofencing": [],
|
||||
"geofencing_regions": null,
|
||||
"group_id": "7071967230287744267",
|
||||
"guide_scene_info": {
|
||||
"diamond_expose_info_str": "",
|
||||
"feed_origin_gid_info_str": "",
|
||||
"guide_scene_type": 0
|
||||
},
|
||||
"hybrid_label": null,
|
||||
"image_album_music_info": {
|
||||
"begin_time": -1,
|
||||
"end_time": -1,
|
||||
"volume": -1
|
||||
},
|
||||
"image_comment": {},
|
||||
"image_crop_ctrl": 0,
|
||||
"image_infos": null,
|
||||
"image_list": null,
|
||||
"images": null,
|
||||
"img_bitrate": null,
|
||||
"impression_data": {
|
||||
"group_id_list_a": [],
|
||||
"group_id_list_b": [],
|
||||
"group_id_list_c": [],
|
||||
"similar_id_list_a": null,
|
||||
"similar_id_list_b": null
|
||||
},
|
||||
"interaction_stickers": null,
|
||||
"is_ads": false,
|
||||
"is_collects_selected": 0,
|
||||
"is_duet_sing": false,
|
||||
"is_image_beat": false,
|
||||
"is_life_item": false,
|
||||
"is_share_post": false,
|
||||
"is_story": 0,
|
||||
"is_top": 0,
|
||||
"item_warn_notification": {
|
||||
"content": "",
|
||||
"show": false,
|
||||
"type": 0
|
||||
},
|
||||
"jump_tab_info_list": null,
|
||||
"label_top_text": null,
|
||||
"long_video": null,
|
||||
"media_type": 4,
|
||||
"music": {
|
||||
"album": "",
|
||||
"artist_user_infos": null,
|
||||
"artists": [],
|
||||
"audition_duration": 22,
|
||||
"author": "碑海北",
|
||||
"author_deleted": false,
|
||||
"author_position": null,
|
||||
"author_status": 1,
|
||||
"avatar_large": {
|
||||
"height": 720,
|
||||
"uri": "1080x1080/aweme-avatar/tos-cn-avt-0015_cfdff2854a9af33f6cbeb44b2f57ebe6",
|
||||
"url_list": [
|
||||
"https://p3.douyinpic.com/aweme/1080x1080/aweme-avatar/tos-cn-avt-0015_cfdff2854a9af33f6cbeb44b2f57ebe6.webp?from=116350172",
|
||||
"https://p5.douyinpic.com/aweme/1080x1080/aweme-avatar/tos-cn-avt-0015_cfdff2854a9af33f6cbeb44b2f57ebe6.webp?from=116350172",
|
||||
"https://p11.douyinpic.com/aweme/1080x1080/aweme-avatar/tos-cn-avt-0015_cfdff2854a9af33f6cbeb44b2f57ebe6.webp?from=116350172",
|
||||
"https://p3.douyinpic.com/aweme/1080x1080/aweme-avatar/tos-cn-avt-0015_cfdff2854a9af33f6cbeb44b2f57ebe6.jpeg?from=116350172"
|
||||
],
|
||||
"width": 720
|
||||
},
|
||||
"avatar_medium": {
|
||||
"height": 720,
|
||||
"uri": "720x720/aweme-avatar/tos-cn-avt-0015_cfdff2854a9af33f6cbeb44b2f57ebe6",
|
||||
"url_list": [
|
||||
"https://p11.douyinpic.com/aweme/720x720/aweme-avatar/tos-cn-avt-0015_cfdff2854a9af33f6cbeb44b2f57ebe6.webp?from=116350172",
|
||||
"https://p5.douyinpic.com/aweme/720x720/aweme-avatar/tos-cn-avt-0015_cfdff2854a9af33f6cbeb44b2f57ebe6.webp?from=116350172",
|
||||
"https://p3.douyinpic.com/aweme/720x720/aweme-avatar/tos-cn-avt-0015_cfdff2854a9af33f6cbeb44b2f57ebe6.webp?from=116350172",
|
||||
"https://p11.douyinpic.com/aweme/720x720/aweme-avatar/tos-cn-avt-0015_cfdff2854a9af33f6cbeb44b2f57ebe6.jpeg?from=116350172"
|
||||
],
|
||||
"width": 720
|
||||
},
|
||||
"avatar_thumb": {
|
||||
"height": 720,
|
||||
"uri": "100x100/aweme-avatar/tos-cn-avt-0015_cfdff2854a9af33f6cbeb44b2f57ebe6",
|
||||
"url_list": [
|
||||
"https://p26.douyinpic.com/aweme/100x100/aweme-avatar/tos-cn-avt-0015_cfdff2854a9af33f6cbeb44b2f57ebe6.webp?from=116350172",
|
||||
"https://p6.douyinpic.com/aweme/100x100/aweme-avatar/tos-cn-avt-0015_cfdff2854a9af33f6cbeb44b2f57ebe6.webp?from=116350172",
|
||||
"https://p3.douyinpic.com/aweme/100x100/aweme-avatar/tos-cn-avt-0015_cfdff2854a9af33f6cbeb44b2f57ebe6.webp?from=116350172",
|
||||
"https://p26.douyinpic.com/aweme/100x100/aweme-avatar/tos-cn-avt-0015_cfdff2854a9af33f6cbeb44b2f57ebe6.jpeg?from=116350172"
|
||||
],
|
||||
"width": 720
|
||||
},
|
||||
"binded_challenge_id": 0,
|
||||
"can_background_play": true,
|
||||
"collect_stat": 0,
|
||||
"cover_hd": {
|
||||
"height": 720,
|
||||
"uri": "1080x1080/aweme-avatar/tos-cn-avt-0015_cfdff2854a9af33f6cbeb44b2f57ebe6",
|
||||
"url_list": [
|
||||
"https://p3.douyinpic.com/aweme/1080x1080/aweme-avatar/tos-cn-avt-0015_cfdff2854a9af33f6cbeb44b2f57ebe6.webp?from=116350172",
|
||||
"https://p5.douyinpic.com/aweme/1080x1080/aweme-avatar/tos-cn-avt-0015_cfdff2854a9af33f6cbeb44b2f57ebe6.webp?from=116350172",
|
||||
"https://p11.douyinpic.com/aweme/1080x1080/aweme-avatar/tos-cn-avt-0015_cfdff2854a9af33f6cbeb44b2f57ebe6.webp?from=116350172",
|
||||
"https://p3.douyinpic.com/aweme/1080x1080/aweme-avatar/tos-cn-avt-0015_cfdff2854a9af33f6cbeb44b2f57ebe6.jpeg?from=116350172"
|
||||
],
|
||||
"width": 720
|
||||
},
|
||||
"cover_large": {
|
||||
"height": 720,
|
||||
"uri": "1080x1080/aweme-avatar/tos-cn-avt-0015_cfdff2854a9af33f6cbeb44b2f57ebe6",
|
||||
"url_list": [
|
||||
"https://p3.douyinpic.com/aweme/1080x1080/aweme-avatar/tos-cn-avt-0015_cfdff2854a9af33f6cbeb44b2f57ebe6.webp?from=116350172",
|
||||
"https://p5.douyinpic.com/aweme/1080x1080/aweme-avatar/tos-cn-avt-0015_cfdff2854a9af33f6cbeb44b2f57ebe6.webp?from=116350172",
|
||||
"https://p11.douyinpic.com/aweme/1080x1080/aweme-avatar/tos-cn-avt-0015_cfdff2854a9af33f6cbeb44b2f57ebe6.webp?from=116350172",
|
||||
"https://p3.douyinpic.com/aweme/1080x1080/aweme-avatar/tos-cn-avt-0015_cfdff2854a9af33f6cbeb44b2f57ebe6.jpeg?from=116350172"
|
||||
],
|
||||
"width": 720
|
||||
},
|
||||
"cover_medium": {
|
||||
"height": 720,
|
||||
"uri": "720x720/aweme-avatar/tos-cn-avt-0015_cfdff2854a9af33f6cbeb44b2f57ebe6",
|
||||
"url_list": [
|
||||
"https://p11.douyinpic.com/aweme/720x720/aweme-avatar/tos-cn-avt-0015_cfdff2854a9af33f6cbeb44b2f57ebe6.webp?from=116350172",
|
||||
"https://p5.douyinpic.com/aweme/720x720/aweme-avatar/tos-cn-avt-0015_cfdff2854a9af33f6cbeb44b2f57ebe6.webp?from=116350172",
|
||||
"https://p3.douyinpic.com/aweme/720x720/aweme-avatar/tos-cn-avt-0015_cfdff2854a9af33f6cbeb44b2f57ebe6.webp?from=116350172",
|
||||
"https://p11.douyinpic.com/aweme/720x720/aweme-avatar/tos-cn-avt-0015_cfdff2854a9af33f6cbeb44b2f57ebe6.jpeg?from=116350172"
|
||||
],
|
||||
"width": 720
|
||||
},
|
||||
"cover_thumb": {
|
||||
"height": 720,
|
||||
"uri": "100x100/aweme-avatar/tos-cn-avt-0015_cfdff2854a9af33f6cbeb44b2f57ebe6",
|
||||
"url_list": [
|
||||
"https://p26.douyinpic.com/aweme/100x100/aweme-avatar/tos-cn-avt-0015_cfdff2854a9af33f6cbeb44b2f57ebe6.webp?from=116350172",
|
||||
"https://p6.douyinpic.com/aweme/100x100/aweme-avatar/tos-cn-avt-0015_cfdff2854a9af33f6cbeb44b2f57ebe6.webp?from=116350172",
|
||||
"https://p3.douyinpic.com/aweme/100x100/aweme-avatar/tos-cn-avt-0015_cfdff2854a9af33f6cbeb44b2f57ebe6.webp?from=116350172",
|
||||
"https://p26.douyinpic.com/aweme/100x100/aweme-avatar/tos-cn-avt-0015_cfdff2854a9af33f6cbeb44b2f57ebe6.jpeg?from=116350172"
|
||||
],
|
||||
"width": 720
|
||||
},
|
||||
"dmv_auto_show": false,
|
||||
"dsp_status": 10,
|
||||
"duration": 22,
|
||||
"end_time": 0,
|
||||
"external_song_info": [],
|
||||
"extra": "{\"is_subsidy_exp\":false,\"hotsoon_review_time\":-1,\"music_label_id\":null,\"review_unshelve_reason\":0,\"has_edited\":1,\"reviewed\":1,\"image_beats_url\":\"https://sf86-cdn-tos.douyinstatic.com/obj/ies-music/strong_beat/v3/1721154897643527\",\"douyin_beats_info\":{},\"cover_colors\":null,\"extract_item_id\":7049808778732129543,\"is_aed_music\":1,\"dsp_switch\":0,\"activities\":[10006],\"with_aed_model\":1,\"schedule_search_time\":0,\"music_tagging\":{\"Languages\":[\"Chinese\"],\"Moods\":[\"Miss\",\"Sorrow\"],\"Genres\":[\"Chinese Pop\",\"Pop\"],\"Themes\":[\"Autumn\",\"Love\"],\"AEDs\":[\"Male\",\"Vocal\"],\"SingingVersions\":[\"Same Auditory\"],\"Instruments\":null},\"is_red\":0,\"aggregate_exempt_conf\":[],\"beats\":{\"audio_effect_onset\":\"https://sf86-cdn-tos.douyinstatic.com/obj/ies-music/strong_beat/v3/1721154896522248\",\"beats_tracker\":\"https://sf86-cdn-tos.douyinstatic.com/obj/ies-music/strong_beat/v3/1721154897643527\",\"energy_trace\":\"https://sf6-cdn-tos.douyinstatic.com/obj/ies-music/strong_beat/v3/1721154896490510\",\"merged_beats\":\"https://sf86-cdn-tos.douyinstatic.com/obj/ies-music/strong_beat/v3/1721154897675278\"}}",
|
||||
"id": 7049808807056149285,
|
||||
"id_str": "7049808807056149285",
|
||||
"is_audio_url_with_cookie": false,
|
||||
"is_commerce_music": false,
|
||||
"is_del_video": false,
|
||||
"is_matched_metadata": false,
|
||||
"is_original": false,
|
||||
"is_original_sound": true,
|
||||
"is_pgc": false,
|
||||
"is_restricted": false,
|
||||
"is_video_self_see": false,
|
||||
"luna_info": {
|
||||
"has_copyright": false,
|
||||
"is_luna_user": false
|
||||
},
|
||||
"lyric_short_position": null,
|
||||
"matched_pgc_sound": {
|
||||
"author": "五月天",
|
||||
"cover_medium": {
|
||||
"height": 720,
|
||||
"uri": "tos-cn-v-2774c002/6d05de31bee64419adcf53c39ab433d5",
|
||||
"url_list": [
|
||||
"https://p11.douyinpic.com/aweme/200x200/tos-cn-v-2774c002/6d05de31bee64419adcf53c39ab433d5.jpeg",
|
||||
"https://p26.douyinpic.com/aweme/200x200/tos-cn-v-2774c002/6d05de31bee64419adcf53c39ab433d5.jpeg",
|
||||
"https://p3.douyinpic.com/aweme/200x200/tos-cn-v-2774c002/6d05de31bee64419adcf53c39ab433d5.jpeg"
|
||||
],
|
||||
"width": 720
|
||||
},
|
||||
"mixed_author": "",
|
||||
"mixed_title": "",
|
||||
"title": "突然好想你"
|
||||
},
|
||||
"mid": "7049808807056149285",
|
||||
"music_chart_ranks": null,
|
||||
"music_collect_count": 0,
|
||||
"music_cover_atmosphere_color_value": "",
|
||||
"music_image_beats": {
|
||||
"music_image_beats_url": {
|
||||
"height": 720,
|
||||
"uri": "ies-music/strong_beat/v3/1721154897643527",
|
||||
"url_list": [
|
||||
"https://sf86-cdn-tos.douyinstatic.com/obj/ies-music/strong_beat/v3/1721154897643527"
|
||||
],
|
||||
"width": 720
|
||||
}
|
||||
},
|
||||
"music_status": 1,
|
||||
"musician_user_infos": null,
|
||||
"mute_share": false,
|
||||
"offline_desc": "",
|
||||
"owner_handle": "z810807031",
|
||||
"owner_id": "72609174662",
|
||||
"owner_nickname": "碑海北",
|
||||
"pgc_music_type": 2,
|
||||
"play_url": {
|
||||
"height": 720,
|
||||
"uri": "https://sf86-cdn-tos.douyinstatic.com/obj/ies-music/7049808808016759589.mp3",
|
||||
"url_key": "7049808807056149285",
|
||||
"url_list": [
|
||||
"https://sf86-cdn-tos.douyinstatic.com/obj/ies-music/7049808808016759589.mp3",
|
||||
"https://sf6-cdn-tos.douyinstatic.com/obj/ies-music/7049808808016759589.mp3"
|
||||
],
|
||||
"width": 720
|
||||
},
|
||||
"position": null,
|
||||
"prevent_download": false,
|
||||
"prevent_item_download_status": 0,
|
||||
"preview_end_time": 0,
|
||||
"preview_start_time": 0,
|
||||
"reason_type": 0,
|
||||
"redirect": false,
|
||||
"schema_url": "",
|
||||
"search_impr": {
|
||||
"entity_id": "7049808807056149285"
|
||||
},
|
||||
"sec_uid": "MS4wLjABAAAArB7A1MV09AIHOoj2P42i1n-fC7WW4MCxoMZ6W2hlD_I",
|
||||
"shoot_duration": 22,
|
||||
"song": {
|
||||
"artists": null,
|
||||
"chorus_v3_infos": null,
|
||||
"id": 6984445252358637598,
|
||||
"id_str": "6984445252358637598"
|
||||
},
|
||||
"source_platform": 23,
|
||||
"start_time": 0,
|
||||
"status": 1,
|
||||
"strong_beat_url": {
|
||||
"height": 720,
|
||||
"uri": "https://sf6-cdn-tos.douyinstatic.com/obj/ies-music/pattern/c9dd478c4ddb9634f49bc58396388af8.json",
|
||||
"url_list": [
|
||||
"https://sf6-cdn-tos.douyinstatic.com/obj/ies-music/pattern/c9dd478c4ddb9634f49bc58396388af8.json",
|
||||
"https://sf86-cdn-tos.douyinstatic.com/obj/ies-music/pattern/c9dd478c4ddb9634f49bc58396388af8.json"
|
||||
],
|
||||
"width": 720
|
||||
},
|
||||
"tag_list": null,
|
||||
"title": "碑海北的浪漫bgm",
|
||||
"unshelve_countries": null,
|
||||
"user_count": 0,
|
||||
"video_duration": 22
|
||||
},
|
||||
"nickname_position": null,
|
||||
"origin_comment_ids": null,
|
||||
"origin_text_extra": [],
|
||||
"original_images": null,
|
||||
"packed_clips": null,
|
||||
"photo_search_entrance": {
|
||||
"ecom_type": 0
|
||||
},
|
||||
"position": null,
|
||||
"press_panel_info": "[{\"interactive\":[\"2_story\",\"2_friend\"]},{\"feedback\":[\"rr_feedback\",\"dislike\",\"ignore\",\"block\",\"unfollow\",\"sever\",\"dislike_collect\"]},{\"control\":[\"speed\",\"auth\",\"delete\",\"save\",\"collect\",\"reward\",\"bg_play\",\"duet\",\"together\"]}]",
|
||||
"preview_title": "其实早就和你表白过了 在看你的每个眼神里",
|
||||
"preview_video_status": 1,
|
||||
"promotions": [],
|
||||
"rate": 12,
|
||||
"ref_tts_id_list": null,
|
||||
"ref_voice_modify_id_list": null,
|
||||
"region": "CN",
|
||||
"relation_labels": null,
|
||||
"reply_smart_emojis": null,
|
||||
"search_impr": {
|
||||
"entity_id": "7071967230287744267",
|
||||
"entity_type": "GENERAL"
|
||||
},
|
||||
"series_paid_info": {
|
||||
"item_price": 0,
|
||||
"series_paid_status": 0
|
||||
},
|
||||
"share_info": {
|
||||
"share_desc": "在抖音,记录美好生活",
|
||||
"share_desc_info": "#在抖音,记录美好生活#其实早就和你表白过了 在看你的每个眼神里",
|
||||
"share_link_desc": "0.76 hBG:/ 复制打开抖音,看看【百里TUFU的作品】其实早就和你表白过了 在看你的每个眼神里 %s",
|
||||
"share_url": "https://www.iesdouyin.com/share/video/7071967230287744267/?region=CN&mid=7049808807056149285&u_code=-1&did=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&iid=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&with_sec_did=1&titleType=title&share_sign=rIGgopv3C3PqJPWCzqgLdCK.iBOhqGn52yFcsT9.TYA-&share_version=230500&ts=1689935825&from_ssr=1"
|
||||
},
|
||||
"share_url": "https://www.iesdouyin.com/share/video/7071967230287744267/?region=CN&mid=7049808807056149285&u_code=-1&did=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&iid=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&with_sec_did=1&titleType=title&share_sign=rIGgopv3C3PqJPWCzqgLdCK.iBOhqGn52yFcsT9.TYA-&share_version=230500&ts=1689935825&from_ssr=1",
|
||||
"should_open_ad_report": false,
|
||||
"show_follow_button": {},
|
||||
"slides_music_beats": null,
|
||||
"social_tag_list": null,
|
||||
"standard_bar_info_list": null,
|
||||
"statistics": {
|
||||
"admire_count": 0,
|
||||
"aweme_id": "7071967230287744267",
|
||||
"collect_count": 3799,
|
||||
"comment_count": 7343,
|
||||
"digg_count": 165539,
|
||||
"play_count": 0,
|
||||
"share_count": 23537
|
||||
},
|
||||
"status": {
|
||||
"allow_share": true,
|
||||
"aweme_id": "7071967230287744267",
|
||||
"in_reviewing": false,
|
||||
"is_delete": false,
|
||||
"is_prohibited": false,
|
||||
"listen_video_status": 2,
|
||||
"part_see": 0,
|
||||
"private_status": 0,
|
||||
"review_result": {
|
||||
"review_status": 0
|
||||
}
|
||||
},
|
||||
"suggest_words": {
|
||||
"suggest_words": [
|
||||
{
|
||||
"extra_info": "{}",
|
||||
"hint_text": "气泡框词",
|
||||
"icon_url": "",
|
||||
"scene": "search_icon_rec",
|
||||
"words": [
|
||||
{
|
||||
"info": "{\"qrec_for_search\":\"{}\"}",
|
||||
"word": "蛇姐",
|
||||
"word_id": "6580341104468563207"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"extra_info": "{}",
|
||||
"hint_text": "大家都在搜:",
|
||||
"icon_url": "",
|
||||
"scene": "comment_top_rec",
|
||||
"words": [
|
||||
{
|
||||
"info": "{\"qrec_for_search\":\"{}\"}",
|
||||
"word": "百里tufu穿泳衣",
|
||||
"word_id": "7255870910253667638"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"super_like_status": 0,
|
||||
"text_extra": [],
|
||||
"tts_id_list": null,
|
||||
"uniqid_position": null,
|
||||
"user_digged": 0,
|
||||
"user_recommend_status": 0,
|
||||
"video": {
|
||||
"big_thumbs": null,
|
||||
"bit_rate": [
|
||||
{
|
||||
"FPS": 30,
|
||||
"HDR_bit": "",
|
||||
"HDR_type": "",
|
||||
"bit_rate": 498449,
|
||||
"gear_name": "adapt_lowest_720_1",
|
||||
"is_bytevc1": 1,
|
||||
"is_h265": 1,
|
||||
"play_addr": {
|
||||
"data_size": 598825,
|
||||
"file_cs": "c:0-9241-3a2a|d:0-299411-e1d8,299412-598824-0fc9|a:v0300fg10000c8iaoerc77u635eat4q0",
|
||||
"file_hash": "0bbfd6701150a78f9255971284413697",
|
||||
"height": 1280,
|
||||
"uri": "v0300fg10000c8iaoerc77u635eat4q0",
|
||||
"url_key": "v0300fg10000c8iaoerc77u635eat4q0_bytevc1_720p_498449",
|
||||
"url_list": [
|
||||
"https://v5-coldi.douyinvod.com/fb233b897397b568a466a9aebe834d76/64ba6dea/video/tos/cn/tos-cn-ve-15-alinc2/765ec3b0e54f4da7ab73889be9103fee/?a=1128&ch=26&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=486&bt=486&cs=2&ds=3&ft=bvjWJkQQqUWXf_40mo0OW_EklpPiXYhEiMVJEAmEA.CPD-I&mime_type=video_mp4&qs=15&rc=OTY0M2U6Nmg8OzM2NThmOUBpMzdkODk6ZmhkOzMzNGkzM0A0MzYvXzE2NTQxLzY2NDQ0YSNucWIwcjRvbGZgLS1kLTBzcw%3D%3D&l=20230721183704115C8631EBB6BF156092&btag=e00088000&dy_q=1689935825",
|
||||
"https://v3-cold3.douyinvod.com/7252d5e0367080dd07125dd3390a1f92/64ba6dea/video/tos/cn/tos-cn-ve-15-alinc2/765ec3b0e54f4da7ab73889be9103fee/?a=1128&ch=26&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=486&bt=486&cs=2&ds=3&ft=bvjWJkQQqUWXf_40mo0OW_EklpPiXYhEiMVJEAmEA.CPD-I&mime_type=video_mp4&qs=15&rc=OTY0M2U6Nmg8OzM2NThmOUBpMzdkODk6ZmhkOzMzNGkzM0A0MzYvXzE2NTQxLzY2NDQ0YSNucWIwcjRvbGZgLS1kLTBzcw%3D%3D&l=20230721183704115C8631EBB6BF156092&btag=e00088000&dy_q=1689935825",
|
||||
"https://api-play-hl.amemv.com/aweme/v1/play/?video_id=v0300fg10000c8iaoerc77u635eat4q0&line=0&file_id=767c7592932048798e9347bb20916376&sign=0bbfd6701150a78f9255971284413697&is_play_url=1&source=PackSourceEnum_AWEME_DETAIL",
|
||||
"https://api-hl.amemv.com/aweme/v1/play/?video_id=v0300fg10000c8iaoerc77u635eat4q0&line=1&file_id=767c7592932048798e9347bb20916376&sign=0bbfd6701150a78f9255971284413697&is_play_url=1&source=PackSourceEnum_AWEME_DETAIL"
|
||||
],
|
||||
"width": 720
|
||||
},
|
||||
"quality_type": 15,
|
||||
"video_extra": "{\"PktOffsetMap\":\"\"}"
|
||||
},
|
||||
{
|
||||
"FPS": 30,
|
||||
"HDR_bit": "",
|
||||
"HDR_type": "",
|
||||
"bit_rate": 448582,
|
||||
"gear_name": "adapt_540_1",
|
||||
"is_bytevc1": 1,
|
||||
"is_h265": 1,
|
||||
"play_addr": {
|
||||
"data_size": 538916,
|
||||
"file_cs": "c:0-9241-0267|d:0-269457-bb18,269458-538915-29ea|a:v0300fg10000c8iaoerc77u635eat4q0",
|
||||
"file_hash": "307d4827f5cf050b2a2f38ed5aadcd57",
|
||||
"height": 1024,
|
||||
"uri": "v0300fg10000c8iaoerc77u635eat4q0",
|
||||
"url_key": "v0300fg10000c8iaoerc77u635eat4q0_bytevc1_540p_448582",
|
||||
"url_list": [
|
||||
"https://v5-colds.douyinvod.com/28a6b1468b7062629565a3b77b1a09af/64ba6dea/video/tos/cn/tos-cn-ve-15c001-alinc2/bddc8027b0b843148d370243ed831297/?a=1128&ch=26&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=438&bt=438&cs=2&ds=6&ft=bvjWJkQQqUWXf_40mo0OW_EklpPiXYhEiMVJEAmEA.CPD-I&mime_type=video_mp4&qs=11&rc=OztnZzk1Z2Q6OmVpZjg3NUBpMzdkODk6ZmhkOzMzNGkzM0AxM2E0Li4yXzYxMjYtNC81YSNucWIwcjRvbGZgLS1kLTBzcw%3D%3D&l=20230721183704115C8631EBB6BF156092&btag=e00088000&dy_q=1689935825",
|
||||
"https://v3-cold.douyinvod.com/9bf8871d05c84b2429675ed91dde9895/64ba6dea/video/tos/cn/tos-cn-ve-15c001-alinc2/bddc8027b0b843148d370243ed831297/?a=1128&ch=26&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=438&bt=438&cs=2&ds=6&ft=bvjWJkQQqUWXf_40mo0OW_EklpPiXYhEiMVJEAmEA.CPD-I&mime_type=video_mp4&qs=11&rc=OztnZzk1Z2Q6OmVpZjg3NUBpMzdkODk6ZmhkOzMzNGkzM0AxM2E0Li4yXzYxMjYtNC81YSNucWIwcjRvbGZgLS1kLTBzcw%3D%3D&l=20230721183704115C8631EBB6BF156092&btag=e00088000&dy_q=1689935825",
|
||||
"https://api-play-hl.amemv.com/aweme/v1/play/?video_id=v0300fg10000c8iaoerc77u635eat4q0&line=0&file_id=8224750c9f5b4797ba5d12167ddd6848&sign=307d4827f5cf050b2a2f38ed5aadcd57&is_play_url=1&source=PackSourceEnum_AWEME_DETAIL",
|
||||
"https://api-hl.amemv.com/aweme/v1/play/?video_id=v0300fg10000c8iaoerc77u635eat4q0&line=1&file_id=8224750c9f5b4797ba5d12167ddd6848&sign=307d4827f5cf050b2a2f38ed5aadcd57&is_play_url=1&source=PackSourceEnum_AWEME_DETAIL"
|
||||
],
|
||||
"width": 576
|
||||
},
|
||||
"quality_type": 28,
|
||||
"video_extra": "{\"PktOffsetMap\":\"\"}"
|
||||
}
|
||||
],
|
||||
"bit_rate_audio": null,
|
||||
"cover": {
|
||||
"height": 1920,
|
||||
"uri": "tos-cn-p-0015/67d4a42fb52b4b4fbbc1ba2b745e1304",
|
||||
"url_list": [
|
||||
"https://p26-sign.douyinpic.com/tos-cn-p-0015/67d4a42fb52b4b4fbbc1ba2b745e1304~c5_300x400.webp?x-expires=1691143200&x-signature=7o0V2AbVB5QFa12OyQUGJlzWqoI%3D&from=3213915784_large&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=cover&biz_tag=aweme_video&l=20230721183704115C8631EBB6BF156092",
|
||||
"https://p3-sign.douyinpic.com/tos-cn-p-0015/67d4a42fb52b4b4fbbc1ba2b745e1304~c5_300x400.webp?x-expires=1691143200&x-signature=6u3r1ow7cImkzX8ifi4cLU1t53c%3D&from=3213915784_large&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=cover&biz_tag=aweme_video&l=20230721183704115C8631EBB6BF156092",
|
||||
"https://p6-sign.douyinpic.com/tos-cn-p-0015/67d4a42fb52b4b4fbbc1ba2b745e1304~c5_300x400.webp?x-expires=1691143200&x-signature=ivW%2BfxIM6MHfeDnmvQ8XuPJsnZs%3D&from=3213915784_large&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=cover&biz_tag=aweme_video&l=20230721183704115C8631EBB6BF156092",
|
||||
"https://p26-sign.douyinpic.com/tos-cn-p-0015/67d4a42fb52b4b4fbbc1ba2b745e1304~c5_300x400.jpeg?x-expires=1691143200&x-signature=G993HujxbzwCu22sSgJo%2B34EzgE%3D&from=3213915784_large&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=cover&biz_tag=aweme_video&l=20230721183704115C8631EBB6BF156092"
|
||||
],
|
||||
"width": 1080
|
||||
},
|
||||
"cover_original_scale": {
|
||||
"height": 720,
|
||||
"uri": "tos-cn-p-0015/67d4a42fb52b4b4fbbc1ba2b745e1304",
|
||||
"url_list": [
|
||||
"https://p26-sign.douyinpic.com/tos-cn-p-0015/67d4a42fb52b4b4fbbc1ba2b745e1304~tplv-dy-360p.webp?x-expires=1691143200&x-signature=MC%2Bjtc5Z8SvQRlufZ9m0lFD0fU8%3D&from=3213915784&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=origin_cover&biz_tag=aweme_video&l=20230721183704115C8631EBB6BF156092",
|
||||
"https://p3-sign.douyinpic.com/tos-cn-p-0015/67d4a42fb52b4b4fbbc1ba2b745e1304~tplv-dy-360p.webp?x-expires=1691143200&x-signature=ymMiCyTDsnJuIZTbanOfSA247c4%3D&from=3213915784&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=origin_cover&biz_tag=aweme_video&l=20230721183704115C8631EBB6BF156092",
|
||||
"https://p6-sign.douyinpic.com/tos-cn-p-0015/67d4a42fb52b4b4fbbc1ba2b745e1304~tplv-dy-360p.webp?x-expires=1691143200&x-signature=EtUMFwu6kmGz9Gy4oVDLRBEUrDU%3D&from=3213915784&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=origin_cover&biz_tag=aweme_video&l=20230721183704115C8631EBB6BF156092",
|
||||
"https://p26-sign.douyinpic.com/tos-cn-p-0015/67d4a42fb52b4b4fbbc1ba2b745e1304~tplv-dy-360p.jpeg?x-expires=1691143200&x-signature=WxqKhfIz7cNnN3WNIL9UOinw68M%3D&from=3213915784&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=origin_cover&biz_tag=aweme_video&l=20230721183704115C8631EBB6BF156092"
|
||||
],
|
||||
"width": 720
|
||||
},
|
||||
"duration": 9611,
|
||||
"dynamic_cover": {
|
||||
"height": 720,
|
||||
"uri": "tos-cn-p-0015/15eb938bb2ed458aa976844714ba245b_1646570722",
|
||||
"url_list": [
|
||||
"https://p3-sign.douyinpic.com/obj/tos-cn-p-0015/15eb938bb2ed458aa976844714ba245b_1646570722?x-expires=1691143200&x-signature=iPItBkfCWAq4ON3kHHJ4ycjGRpE%3D&from=3213915784_large&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=cover&biz_tag=aweme_video&l=20230721183704115C8631EBB6BF156092",
|
||||
"https://p6-sign.douyinpic.com/obj/tos-cn-p-0015/15eb938bb2ed458aa976844714ba245b_1646570722?x-expires=1691143200&x-signature=o8kcZ933iRpQMK8wv9sC7zWn5lI%3D&from=3213915784_large&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=cover&biz_tag=aweme_video&l=20230721183704115C8631EBB6BF156092",
|
||||
"https://p26-sign.douyinpic.com/obj/tos-cn-p-0015/15eb938bb2ed458aa976844714ba245b_1646570722?x-expires=1691143200&x-signature=mMOHMK3of5%2F25TRXX%2BZbfVB3oh4%3D&from=3213915784_large&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=cover&biz_tag=aweme_video&l=20230721183704115C8631EBB6BF156092"
|
||||
],
|
||||
"width": 720
|
||||
},
|
||||
"height": 1920,
|
||||
"is_h265": 0,
|
||||
"is_source_HDR": 0,
|
||||
"meta": "{\"loudness\":\"-15.5\",\"peak\":\"0.59566\",\"qprf\":\"0.9426440000534058\",\"sr_score\":\"0.000\"}",
|
||||
"origin_cover": {
|
||||
"height": 720,
|
||||
"uri": "tos-cn-p-0015/e66ef5f61b074c189520944e8d1f1b1a_1646570719",
|
||||
"url_list": [
|
||||
"https://p6-sign.douyinpic.com/tos-cn-p-0015/e66ef5f61b074c189520944e8d1f1b1a_1646570719~tplv-dy-360p.webp?x-expires=1691143200&x-signature=5Iigv0RKTMVUo5Sm69ZPG2AdRiM%3D&from=3213915784&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=origin_cover&biz_tag=aweme_video&l=20230721183704115C8631EBB6BF156092",
|
||||
"https://p26-sign.douyinpic.com/tos-cn-p-0015/e66ef5f61b074c189520944e8d1f1b1a_1646570719~tplv-dy-360p.webp?x-expires=1691143200&x-signature=fg5wq2cNDLNmTdpQXf2ZLG4XHHw%3D&from=3213915784&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=origin_cover&biz_tag=aweme_video&l=20230721183704115C8631EBB6BF156092",
|
||||
"https://p3-sign.douyinpic.com/tos-cn-p-0015/e66ef5f61b074c189520944e8d1f1b1a_1646570719~tplv-dy-360p.webp?x-expires=1691143200&x-signature=leuu809HLsQ79gSuO3ZKtkQd5a8%3D&from=3213915784&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=origin_cover&biz_tag=aweme_video&l=20230721183704115C8631EBB6BF156092",
|
||||
"https://p6-sign.douyinpic.com/tos-cn-p-0015/e66ef5f61b074c189520944e8d1f1b1a_1646570719~tplv-dy-360p.jpeg?x-expires=1691143200&x-signature=2kCQtNCAX%2FySYoffMlvmN9qFRH4%3D&from=3213915784&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=origin_cover&biz_tag=aweme_video&l=20230721183704115C8631EBB6BF156092"
|
||||
],
|
||||
"width": 720
|
||||
},
|
||||
"play_addr": {
|
||||
"data_size": 976507,
|
||||
"file_cs": "c:0-11579-de64|d:0-488252-0229,488253-976506-b071|a:v0300fg10000c8iaoerc77u635eat4q0",
|
||||
"file_hash": "4cdff545e40298edf7cee120a9c7c6c0",
|
||||
"height": 1024,
|
||||
"uri": "v0300fg10000c8iaoerc77u635eat4q0",
|
||||
"url_key": "v0300fg10000c8iaoerc77u635eat4q0_h264_540p_822668",
|
||||
"url_list": [
|
||||
"https://v11-coldf.douyinvod.com/b455c35a2591845b90973bb72b6db4c9/64ba6dea/video/tos/cn/tos-cn-ve-15-alinc2/87d10056420d499686ecbd9305594bb9/?a=1128&ch=26&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=803&bt=803&cs=0&ds=6&ft=bvjWJkQQqUWXf_40mo0OW_EklpPiXYhEiMVJEAmEA.CPD-I&mime_type=video_mp4&qs=0&rc=Nmk6Ojo3ZTQzZzQ0OTlnZUBpMzdkODk6ZmhkOzMzNGkzM0AtNTRhLi1fNjUxYDU0NV9hYSNucWIwcjRvbGZgLS1kLTBzcw%3D%3D&l=20230721183704115C8631EBB6BF156092&btag=e00088000&dy_q=1689935825",
|
||||
"https://v3-cold.douyinvod.com/98ce912805e8cccd7f4f160e4e7a509e/64ba6dea/video/tos/cn/tos-cn-ve-15-alinc2/87d10056420d499686ecbd9305594bb9/?a=1128&ch=26&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=803&bt=803&cs=0&ds=6&ft=bvjWJkQQqUWXf_40mo0OW_EklpPiXYhEiMVJEAmEA.CPD-I&mime_type=video_mp4&qs=0&rc=Nmk6Ojo3ZTQzZzQ0OTlnZUBpMzdkODk6ZmhkOzMzNGkzM0AtNTRhLi1fNjUxYDU0NV9hYSNucWIwcjRvbGZgLS1kLTBzcw%3D%3D&l=20230721183704115C8631EBB6BF156092&btag=e00088000&dy_q=1689935825",
|
||||
"https://api-play-hl.amemv.com/aweme/v1/play/?video_id=v0300fg10000c8iaoerc77u635eat4q0&line=0&file_id=dbbd867681c14d8091bb0417d7778f03&sign=4cdff545e40298edf7cee120a9c7c6c0&is_play_url=1&source=PackSourceEnum_AWEME_DETAIL",
|
||||
"https://api-hl.amemv.com/aweme/v1/play/?video_id=v0300fg10000c8iaoerc77u635eat4q0&line=1&file_id=dbbd867681c14d8091bb0417d7778f03&sign=4cdff545e40298edf7cee120a9c7c6c0&is_play_url=1&source=PackSourceEnum_AWEME_DETAIL"
|
||||
],
|
||||
"width": 576
|
||||
},
|
||||
"play_addr_265": {
|
||||
"data_size": 538916,
|
||||
"file_cs": "c:0-9241-0267|d:0-269457-bb18,269458-538915-29ea|a:v0300fg10000c8iaoerc77u635eat4q0",
|
||||
"file_hash": "307d4827f5cf050b2a2f38ed5aadcd57",
|
||||
"height": 1024,
|
||||
"uri": "v0300fg10000c8iaoerc77u635eat4q0",
|
||||
"url_key": "v0300fg10000c8iaoerc77u635eat4q0_bytevc1_540p_448582",
|
||||
"url_list": [
|
||||
"https://v5-colds.douyinvod.com/28a6b1468b7062629565a3b77b1a09af/64ba6dea/video/tos/cn/tos-cn-ve-15c001-alinc2/bddc8027b0b843148d370243ed831297/?a=1128&ch=26&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=438&bt=438&cs=2&ds=6&ft=bvjWJkQQqUWXf_40mo0OW_EklpPiXYhEiMVJEAmEA.CPD-I&mime_type=video_mp4&qs=11&rc=OztnZzk1Z2Q6OmVpZjg3NUBpMzdkODk6ZmhkOzMzNGkzM0AxM2E0Li4yXzYxMjYtNC81YSNucWIwcjRvbGZgLS1kLTBzcw%3D%3D&l=20230721183704115C8631EBB6BF156092&btag=e00088000&dy_q=1689935825",
|
||||
"https://v3-cold.douyinvod.com/9bf8871d05c84b2429675ed91dde9895/64ba6dea/video/tos/cn/tos-cn-ve-15c001-alinc2/bddc8027b0b843148d370243ed831297/?a=1128&ch=26&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=438&bt=438&cs=2&ds=6&ft=bvjWJkQQqUWXf_40mo0OW_EklpPiXYhEiMVJEAmEA.CPD-I&mime_type=video_mp4&qs=11&rc=OztnZzk1Z2Q6OmVpZjg3NUBpMzdkODk6ZmhkOzMzNGkzM0AxM2E0Li4yXzYxMjYtNC81YSNucWIwcjRvbGZgLS1kLTBzcw%3D%3D&l=20230721183704115C8631EBB6BF156092&btag=e00088000&dy_q=1689935825",
|
||||
"https://api-play-hl.amemv.com/aweme/v1/play/?video_id=v0300fg10000c8iaoerc77u635eat4q0&line=0&file_id=8224750c9f5b4797ba5d12167ddd6848&sign=307d4827f5cf050b2a2f38ed5aadcd57&is_play_url=1&source=PackSourceEnum_AWEME_DETAIL",
|
||||
"https://api-hl.amemv.com/aweme/v1/play/?video_id=v0300fg10000c8iaoerc77u635eat4q0&line=1&file_id=8224750c9f5b4797ba5d12167ddd6848&sign=307d4827f5cf050b2a2f38ed5aadcd57&is_play_url=1&source=PackSourceEnum_AWEME_DETAIL"
|
||||
],
|
||||
"width": 576
|
||||
},
|
||||
"play_addr_h264": {
|
||||
"data_size": 976507,
|
||||
"file_cs": "c:0-11579-de64|d:0-488252-0229,488253-976506-b071|a:v0300fg10000c8iaoerc77u635eat4q0",
|
||||
"file_hash": "4cdff545e40298edf7cee120a9c7c6c0",
|
||||
"height": 1024,
|
||||
"uri": "v0300fg10000c8iaoerc77u635eat4q0",
|
||||
"url_key": "v0300fg10000c8iaoerc77u635eat4q0_h264_540p_822668",
|
||||
"url_list": [
|
||||
"https://v11-coldf.douyinvod.com/b455c35a2591845b90973bb72b6db4c9/64ba6dea/video/tos/cn/tos-cn-ve-15-alinc2/87d10056420d499686ecbd9305594bb9/?a=1128&ch=26&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=803&bt=803&cs=0&ds=6&ft=bvjWJkQQqUWXf_40mo0OW_EklpPiXYhEiMVJEAmEA.CPD-I&mime_type=video_mp4&qs=0&rc=Nmk6Ojo3ZTQzZzQ0OTlnZUBpMzdkODk6ZmhkOzMzNGkzM0AtNTRhLi1fNjUxYDU0NV9hYSNucWIwcjRvbGZgLS1kLTBzcw%3D%3D&l=20230721183704115C8631EBB6BF156092&btag=e00088000&dy_q=1689935825",
|
||||
"https://v3-cold.douyinvod.com/98ce912805e8cccd7f4f160e4e7a509e/64ba6dea/video/tos/cn/tos-cn-ve-15-alinc2/87d10056420d499686ecbd9305594bb9/?a=1128&ch=26&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=803&bt=803&cs=0&ds=6&ft=bvjWJkQQqUWXf_40mo0OW_EklpPiXYhEiMVJEAmEA.CPD-I&mime_type=video_mp4&qs=0&rc=Nmk6Ojo3ZTQzZzQ0OTlnZUBpMzdkODk6ZmhkOzMzNGkzM0AtNTRhLi1fNjUxYDU0NV9hYSNucWIwcjRvbGZgLS1kLTBzcw%3D%3D&l=20230721183704115C8631EBB6BF156092&btag=e00088000&dy_q=1689935825",
|
||||
"https://api-play-hl.amemv.com/aweme/v1/play/?video_id=v0300fg10000c8iaoerc77u635eat4q0&line=0&file_id=dbbd867681c14d8091bb0417d7778f03&sign=4cdff545e40298edf7cee120a9c7c6c0&is_play_url=1&source=PackSourceEnum_AWEME_DETAIL",
|
||||
"https://api-hl.amemv.com/aweme/v1/play/?video_id=v0300fg10000c8iaoerc77u635eat4q0&line=1&file_id=dbbd867681c14d8091bb0417d7778f03&sign=4cdff545e40298edf7cee120a9c7c6c0&is_play_url=1&source=PackSourceEnum_AWEME_DETAIL"
|
||||
],
|
||||
"width": 576
|
||||
},
|
||||
"ratio": "540p",
|
||||
"width": 1080
|
||||
},
|
||||
"video_game_data_channel_config": {},
|
||||
"video_labels": null,
|
||||
"video_tag": [
|
||||
{
|
||||
"level": 1,
|
||||
"tag_id": 2006,
|
||||
"tag_name": "颜值"
|
||||
},
|
||||
{
|
||||
"level": 2,
|
||||
"tag_id": 2006002,
|
||||
"tag_name": "美女"
|
||||
},
|
||||
{
|
||||
"level": 0,
|
||||
"tag_id": 0,
|
||||
"tag_name": ""
|
||||
}
|
||||
],
|
||||
"video_text": [],
|
||||
"voice_modify_id_list": null,
|
||||
"yumme_recreason": null
|
||||
},
|
||||
"log_pb": {
|
||||
"impr_id": "20230721183704115C8631EBB6BF156092"
|
||||
},
|
||||
"status_code": 0
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,716 @@
|
||||
{
|
||||
"status_code": 0,
|
||||
"min_cursor": 1689909551000,
|
||||
"max_cursor": 1689909551000,
|
||||
"has_more": 1,
|
||||
"aweme_list": [
|
||||
{
|
||||
"aweme_id": "7253290037918354691",
|
||||
"desc": "飞行员跳伞进山寨,哪知道白捡了个寨主当 #电影冰雪狙击2 #冰雪狙击2老戏骨飙戏",
|
||||
"create_time": 1688788818,
|
||||
"author": {
|
||||
"uid": "96719499963",
|
||||
"ky_only_predict": 0,
|
||||
"nickname": "燃剪Kevin",
|
||||
"data_label_list": null,
|
||||
"user_not_show": 1,
|
||||
"aweme_hotsoon_auth": 1,
|
||||
"avatar_thumb": {
|
||||
"uri": "100x100/aweme-avatar/tos-cn-avt-0015_1fb72c76792162a10da69dcb1f0bedda",
|
||||
"url_list": [
|
||||
"https://p3-pc.douyinpic.com/aweme/100x100/aweme-avatar/tos-cn-avt-0015_1fb72c76792162a10da69dcb1f0bedda.jpeg?from=116350172"
|
||||
],
|
||||
"width": 720,
|
||||
"height": 720
|
||||
},
|
||||
"cf_list": null,
|
||||
"is_ban": false,
|
||||
"show_nearby_active": false,
|
||||
"follow_status": 0,
|
||||
"aweme_count": 292,
|
||||
"following_count": 99,
|
||||
"follower_count": 2259367,
|
||||
"favoriting_count": 30283,
|
||||
"total_favorited": 77462280,
|
||||
"link_item_list": null,
|
||||
"hide_search": false,
|
||||
"constellation": 3,
|
||||
"not_seen_item_id_list_v2": null,
|
||||
"offline_info_list": null,
|
||||
"weibo_verify": "",
|
||||
"custom_verify": "影视自媒体",
|
||||
"need_points": null,
|
||||
"familiar_visitor_user": null,
|
||||
"special_lock": 1,
|
||||
"need_recommend": 0,
|
||||
"is_binded_weibo": false,
|
||||
"weibo_name": "",
|
||||
"weibo_schema": "",
|
||||
"weibo_url": "",
|
||||
"story_open": false,
|
||||
"ban_user_functions": [],
|
||||
"has_facebook_token": false,
|
||||
"has_twitter_token": false,
|
||||
"fb_expire_time": 0,
|
||||
"tw_expire_time": 0,
|
||||
"has_youtube_token": false,
|
||||
"youtube_expire_time": 0,
|
||||
"card_entries": null,
|
||||
"live_verify": 0,
|
||||
"not_seen_item_id_list": null,
|
||||
"white_cover_url": null,
|
||||
"shield_follow_notice": 0,
|
||||
"shield_digg_notice": 0,
|
||||
"shield_comment_notice": 0,
|
||||
"contrail_list": null,
|
||||
"text_extra": null,
|
||||
"endorsement_info_list": null,
|
||||
"share_info": {
|
||||
"share_url": "",
|
||||
"share_weibo_desc": "",
|
||||
"share_desc": "",
|
||||
"share_title": "",
|
||||
"share_qrcode_url": {
|
||||
"uri": "75be001898e7b6d5a31c",
|
||||
"url_list": [
|
||||
"https://p6-pc-sign.douyinpic.com/obj/75be001898e7b6d5a31c?x-expires=1689955200&x-signature=7ED%2BlhVW7DAI1u9zaZTPsZoxbJs%3D&from=116350172",
|
||||
"https://p9-pc-sign.douyinpic.com/obj/75be001898e7b6d5a31c?x-expires=1689955200&x-signature=7e3%2BvHAbgIi3lrkCXwmJqE9WEc0%3D&from=116350172",
|
||||
"https://p3-pc-sign.douyinpic.com/obj/75be001898e7b6d5a31c?x-expires=1689955200&x-signature=05z6geg1%2Ftu7SrKLAh52WXlBZ%2Fg%3D&from=116350172"
|
||||
],
|
||||
"width": 720,
|
||||
"height": 720
|
||||
},
|
||||
"share_title_myself": "",
|
||||
"share_title_other": "",
|
||||
"share_desc_info": ""
|
||||
},
|
||||
"aweme_hotsoon_auth_relation": 1,
|
||||
"user_tags": null,
|
||||
"homepage_bottom_toast": null,
|
||||
"enterprise_verify_reason": "",
|
||||
"user_permissions": null,
|
||||
"follower_list_secondary_information_struct": null,
|
||||
"display_info": null,
|
||||
"account_region": "",
|
||||
"enable_nearby_visible": true,
|
||||
"im_role_ids": null,
|
||||
"live_agreement": 0,
|
||||
"follower_request_status": 0,
|
||||
"with_shop_entry": false,
|
||||
"search_impr": {
|
||||
"entity_id": "96719499963"
|
||||
},
|
||||
"user_not_see": 0,
|
||||
"has_orders": false,
|
||||
"prevent_download": false,
|
||||
"show_image_bubble": false,
|
||||
"is_blocking_v2": false,
|
||||
"unique_id_modify_time": 1689935156,
|
||||
"can_set_geofencing": null,
|
||||
"ins_id": "",
|
||||
"google_account": "",
|
||||
"youtube_channel_id": "",
|
||||
"youtube_channel_title": "",
|
||||
"apple_account": 0,
|
||||
"with_dou_entry": false,
|
||||
"with_fusion_shop_entry": false,
|
||||
"is_phone_binded": false,
|
||||
"accept_private_policy": false,
|
||||
"twitter_id": "",
|
||||
"twitter_name": "",
|
||||
"user_canceled": false,
|
||||
"has_email": false,
|
||||
"special_people_labels": null,
|
||||
"live_agreement_time": 0,
|
||||
"status": 1,
|
||||
"create_time": 0,
|
||||
"avatar_uri": "aweme-avatar/tos-cn-avt-0015_1fb72c76792162a10da69dcb1f0bedda",
|
||||
"follower_status": 0,
|
||||
"neiguang_shield": 0,
|
||||
"signature_extra": null,
|
||||
"is_blocked_v2": false,
|
||||
"reflow_page_gid": 0,
|
||||
"reflow_page_uid": 0,
|
||||
"user_rate": 1,
|
||||
"close_friend_type": 0,
|
||||
"download_prompt_ts": 0,
|
||||
"react_setting": 0,
|
||||
"live_commerce": false,
|
||||
"cover_url": [
|
||||
{
|
||||
"uri": "c8510002be9a3a61aad2",
|
||||
"url_list": [
|
||||
"https://p6-pc-sign.douyinpic.com/obj/c8510002be9a3a61aad2?x-expires=1691143200&x-signature=cP8m4aUIjlcHRoii9OGFPHSZLws%3D&from=116350172",
|
||||
"https://p3-pc-sign.douyinpic.com/obj/c8510002be9a3a61aad2?x-expires=1691143200&x-signature=9Nth8pMmx2fD2Ox4171nc9rD4qI%3D&from=116350172",
|
||||
"https://p9-pc-sign.douyinpic.com/obj/c8510002be9a3a61aad2?x-expires=1691143200&x-signature=78Kd86oUQQvlENM266gxx%2FZCsak%3D&from=116350172"
|
||||
],
|
||||
"width": 720,
|
||||
"height": 720
|
||||
}
|
||||
],
|
||||
"card_entries_not_display": null,
|
||||
"has_insights": false,
|
||||
"share_qrcode_uri": "75be001898e7b6d5a31c",
|
||||
"card_sort_priority": null,
|
||||
"user_mode": 0,
|
||||
"user_period": 0,
|
||||
"is_cf": 0,
|
||||
"is_not_show": false,
|
||||
"interest_tags": null,
|
||||
"cv_level": "",
|
||||
"special_follow_status": 0,
|
||||
"risk_notice_text": "",
|
||||
"max_follower_count": 0,
|
||||
"contacts_status": 2,
|
||||
"live_high_value": 0,
|
||||
"aweme_control": {
|
||||
"can_forward": true,
|
||||
"can_share": true,
|
||||
"can_comment": true,
|
||||
"can_show_comment": true
|
||||
},
|
||||
"personal_tag_list": null,
|
||||
"sec_uid": "MS4wLjABAAAAdBrGekUlNXGPsc8rNnv_jDhN8koyuWDyrU3CrcvzmcQ"
|
||||
},
|
||||
"music": {
|
||||
"id": 7253290130763467557,
|
||||
"id_str": "7253290130763467557",
|
||||
"title": "@燃剪Kevin创作的原声",
|
||||
"author": "燃剪Kevin",
|
||||
"album": "",
|
||||
"cover_hd": {
|
||||
"uri": "1080x1080/aweme-avatar/tos-cn-avt-0015_1fb72c76792162a10da69dcb1f0bedda",
|
||||
"url_list": [
|
||||
"https://p3-pc.douyinpic.com/aweme/1080x1080/aweme-avatar/tos-cn-avt-0015_1fb72c76792162a10da69dcb1f0bedda.jpeg?from=116350172"
|
||||
],
|
||||
"width": 720,
|
||||
"height": 720
|
||||
},
|
||||
"cover_large": {
|
||||
"uri": "1080x1080/aweme-avatar/tos-cn-avt-0015_1fb72c76792162a10da69dcb1f0bedda",
|
||||
"url_list": [
|
||||
"https://p3-pc.douyinpic.com/aweme/1080x1080/aweme-avatar/tos-cn-avt-0015_1fb72c76792162a10da69dcb1f0bedda.jpeg?from=116350172"
|
||||
],
|
||||
"width": 720,
|
||||
"height": 720
|
||||
},
|
||||
"cover_medium": {
|
||||
"uri": "720x720/aweme-avatar/tos-cn-avt-0015_1fb72c76792162a10da69dcb1f0bedda",
|
||||
"url_list": [
|
||||
"https://p3-pc.douyinpic.com/aweme/720x720/aweme-avatar/tos-cn-avt-0015_1fb72c76792162a10da69dcb1f0bedda.jpeg?from=116350172"
|
||||
],
|
||||
"width": 720,
|
||||
"height": 720
|
||||
},
|
||||
"cover_thumb": {
|
||||
"uri": "100x100/aweme-avatar/tos-cn-avt-0015_1fb72c76792162a10da69dcb1f0bedda",
|
||||
"url_list": [
|
||||
"https://p3-pc.douyinpic.com/aweme/100x100/aweme-avatar/tos-cn-avt-0015_1fb72c76792162a10da69dcb1f0bedda.jpeg?from=116350172"
|
||||
],
|
||||
"width": 720,
|
||||
"height": 720
|
||||
},
|
||||
"play_url": {
|
||||
"uri": "https://sf86-cdn-tos.douyinstatic.com/obj/ies-music/7253290131958942522.mp3",
|
||||
"url_list": [
|
||||
"https://sf86-cdn-tos.douyinstatic.com/obj/ies-music/7253290131958942522.mp3",
|
||||
"https://sf3-cdn-tos.douyinstatic.com/obj/ies-music/7253290131958942522.mp3"
|
||||
],
|
||||
"width": 720,
|
||||
"height": 720,
|
||||
"url_key": "7253290130763467557"
|
||||
},
|
||||
"schema_url": "",
|
||||
"source_platform": 23,
|
||||
"start_time": 0,
|
||||
"end_time": 0,
|
||||
"duration": 64,
|
||||
"extra": "{\"cover_colors\":null,\"extract_item_id\":7253290037918354691,\"dsp_switch\":0,\"review_unshelve_reason\":0,\"beats\":{},\"hotsoon_review_time\":-1,\"music_tagging\":{\"Languages\":null,\"Moods\":null,\"Genres\":null,\"Themes\":null,\"AEDs\":null,\"SingingVersions\":null,\"Instruments\":null},\"is_subsidy_exp\":false,\"music_label_id\":null,\"is_aed_music\":0,\"reviewed\":0,\"douyin_beats_info\":{},\"schedule_search_time\":0,\"is_red\":0,\"aggregate_exempt_conf\":[],\"with_aed_model\":1,\"has_edited\":0}",
|
||||
"user_count": 0,
|
||||
"position": null,
|
||||
"collect_stat": 0,
|
||||
"status": 1,
|
||||
"offline_desc": "",
|
||||
"owner_id": "96719499963",
|
||||
"owner_nickname": "燃剪Kevin",
|
||||
"is_original": false,
|
||||
"mid": "7253290130763467557",
|
||||
"binded_challenge_id": 0,
|
||||
"redirect": false,
|
||||
"is_restricted": false,
|
||||
"author_deleted": false,
|
||||
"is_del_video": false,
|
||||
"is_video_self_see": false,
|
||||
"owner_handle": "W75888",
|
||||
"author_position": null,
|
||||
"prevent_download": false,
|
||||
"unshelve_countries": null,
|
||||
"prevent_item_download_status": 0,
|
||||
"external_song_info": [],
|
||||
"sec_uid": "MS4wLjABAAAAdBrGekUlNXGPsc8rNnv_jDhN8koyuWDyrU3CrcvzmcQ",
|
||||
"avatar_thumb": {
|
||||
"uri": "100x100/aweme-avatar/tos-cn-avt-0015_1fb72c76792162a10da69dcb1f0bedda",
|
||||
"url_list": [
|
||||
"https://p3-pc.douyinpic.com/aweme/100x100/aweme-avatar/tos-cn-avt-0015_1fb72c76792162a10da69dcb1f0bedda.jpeg?from=116350172"
|
||||
],
|
||||
"width": 720,
|
||||
"height": 720
|
||||
},
|
||||
"avatar_medium": {
|
||||
"uri": "720x720/aweme-avatar/tos-cn-avt-0015_1fb72c76792162a10da69dcb1f0bedda",
|
||||
"url_list": [
|
||||
"https://p3-pc.douyinpic.com/aweme/720x720/aweme-avatar/tos-cn-avt-0015_1fb72c76792162a10da69dcb1f0bedda.jpeg?from=116350172"
|
||||
],
|
||||
"width": 720,
|
||||
"height": 720
|
||||
},
|
||||
"avatar_large": {
|
||||
"uri": "1080x1080/aweme-avatar/tos-cn-avt-0015_1fb72c76792162a10da69dcb1f0bedda",
|
||||
"url_list": [
|
||||
"https://p3-pc.douyinpic.com/aweme/1080x1080/aweme-avatar/tos-cn-avt-0015_1fb72c76792162a10da69dcb1f0bedda.jpeg?from=116350172"
|
||||
],
|
||||
"width": 720,
|
||||
"height": 720
|
||||
},
|
||||
"preview_start_time": 0,
|
||||
"preview_end_time": 0,
|
||||
"is_commerce_music": false,
|
||||
"is_original_sound": true,
|
||||
"audition_duration": 64,
|
||||
"shoot_duration": 64,
|
||||
"reason_type": 0,
|
||||
"artists": [],
|
||||
"lyric_short_position": null,
|
||||
"mute_share": false,
|
||||
"tag_list": null,
|
||||
"dmv_auto_show": false,
|
||||
"is_pgc": false,
|
||||
"is_matched_metadata": false,
|
||||
"is_audio_url_with_cookie": false,
|
||||
"music_chart_ranks": null,
|
||||
"can_background_play": true,
|
||||
"music_status": 1,
|
||||
"video_duration": 64,
|
||||
"pgc_music_type": 2,
|
||||
"author_status": 1,
|
||||
"search_impr": {
|
||||
"entity_id": "7253290130763467557"
|
||||
},
|
||||
"artist_user_infos": null,
|
||||
"dsp_status": 10,
|
||||
"musician_user_infos": null,
|
||||
"luna_info": {
|
||||
"is_luna_user": false
|
||||
},
|
||||
"music_collect_count": 0,
|
||||
"music_cover_atmosphere_color_value": ""
|
||||
},
|
||||
"jump_tab_info_list": null,
|
||||
"video": {
|
||||
"play_addr": {
|
||||
"uri": "v0200fg10000cikdoqjc77u487ia3t1g",
|
||||
"url_list": [
|
||||
"http://v26-web.douyinvod.com/f09adc21743f08884ebfd18bee2c7757/64ba6b84/video/tos/cn/tos-cn-ve-15c001-alinc2/oMSoq9gqbAIgtxOKQn9keEBD4DACeAMhgNREnI/?a=6383&ch=10010&cr=0&dr=0&lr=all&cd=0%7C0%7C0%7C0&cv=1&br=2198&bt=2198&cs=0&ds=4&ft=bvTKJbQQqUWXf_40mo0OW_EklpPiXwUEiMVJEAmEA.CPD-I&mime_type=video_mp4&qs=0&rc=NzhnOmg5ODc7O2U5ZTVmZ0BpandkOjc6ZnRnbDMzNGkzM0AtX2NeXmJjNl4xLTRfL141YSMuMGY1cjRnbGhgLS1kLS9zcw%3D%3D&l=202307211825566527AF3C1671F5138610&btag=e00028000&dy_q=1689935156",
|
||||
"http://v3-web.douyinvod.com/a5e31e04504bc6463031a9d4036d643d/64ba6b84/video/tos/cn/tos-cn-ve-15c001-alinc2/oMSoq9gqbAIgtxOKQn9keEBD4DACeAMhgNREnI/?a=6383&ch=10010&cr=0&dr=0&lr=all&cd=0%7C0%7C0%7C0&cv=1&br=2198&bt=2198&cs=0&ds=4&ft=bvTKJbQQqUWXf_40mo0OW_EklpPiXwUEiMVJEAmEA.CPD-I&mime_type=video_mp4&qs=0&rc=NzhnOmg5ODc7O2U5ZTVmZ0BpandkOjc6ZnRnbDMzNGkzM0AtX2NeXmJjNl4xLTRfL141YSMuMGY1cjRnbGhgLS1kLS9zcw%3D%3D&l=202307211825566527AF3C1671F5138610&btag=e00028000&dy_q=1689935156",
|
||||
"https://www.douyin.com/aweme/v1/play/?video_id=v0200fg10000cikdoqjc77u487ia3t1g&line=0&file_id=8dac22bb760b48a894f5e6aea7fdb504&sign=283df9ddd7ac9739e9bcfbd3f7c9ec59&is_play_url=1&source=PackSourceEnum_PUBLISH"
|
||||
],
|
||||
"width": 1728,
|
||||
"height": 1080,
|
||||
"url_key": "v0200fg10000cikdoqjc77u487ia3t1g_h264_1080p_2251713",
|
||||
"data_size": 18025814,
|
||||
"file_hash": "283df9ddd7ac9739e9bcfbd3f7c9ec59",
|
||||
"file_cs": "c:0-53558-2651"
|
||||
},
|
||||
"cover": {
|
||||
"uri": "tos-cn-i-dy/bc4a6c96faea452e983b1371561e853d",
|
||||
"url_list": [
|
||||
"https://p3-pc-sign.douyinpic.com/tos-cn-i-dy/bc4a6c96faea452e983b1371561e853d~tplv-dy-cropcenter:323:430.jpeg?x-expires=1691143200&x-signature=M%2FmIef2TBxaBIg5VGxQtKuAK%2F5U%3D&from=3213915784&s=PackSourceEnum_PUBLISH&se=true&sh=323_430&sc=cover&biz_tag=pcweb_cover&l=202307211825566527AF3C1671F5138610",
|
||||
"https://p6-pc-sign.douyinpic.com/obj/tos-cn-i-dy/bc4a6c96faea452e983b1371561e853d?x-expires=1691143200&x-signature=L2cNq8h3oKZfMpL1WEIxZu0s5dY%3D&from=3213915784&s=PackSourceEnum_PUBLISH&se=false&sc=cover&biz_tag=pcweb_cover&l=202307211825566527AF3C1671F5138610",
|
||||
"https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/bc4a6c96faea452e983b1371561e853d?x-expires=1691143200&x-signature=eV3D8Q1M6ico%2FIaHMCzI9YAu0p4%3D&from=3213915784&s=PackSourceEnum_PUBLISH&se=false&sc=cover&biz_tag=pcweb_cover&l=202307211825566527AF3C1671F5138610",
|
||||
"https://p9-pc-sign.douyinpic.com/obj/tos-cn-i-dy/bc4a6c96faea452e983b1371561e853d?x-expires=1691143200&x-signature=ee2B9Qhql0XamOJ8zHdU8w6tNHY%3D&from=3213915784&s=PackSourceEnum_PUBLISH&se=false&sc=cover&biz_tag=pcweb_cover&l=202307211825566527AF3C1671F5138610"
|
||||
],
|
||||
"width": 720,
|
||||
"height": 720
|
||||
},
|
||||
"height": 1200,
|
||||
"width": 1920,
|
||||
"dynamic_cover": {
|
||||
"uri": "tos-cn-i-dy/bc4a6c96faea452e983b1371561e853d",
|
||||
"url_list": [
|
||||
"https://p9-pc-sign.douyinpic.com/obj/tos-cn-i-dy/bc4a6c96faea452e983b1371561e853d?x-expires=1691143200&x-signature=ee2B9Qhql0XamOJ8zHdU8w6tNHY%3D&from=3213915784_large&s=PackSourceEnum_PUBLISH&se=false&sc=origin_cover&biz_tag=pcweb_cover&l=202307211825566527AF3C1671F5138610",
|
||||
"https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/bc4a6c96faea452e983b1371561e853d?x-expires=1691143200&x-signature=eV3D8Q1M6ico%2FIaHMCzI9YAu0p4%3D&from=3213915784_large&s=PackSourceEnum_PUBLISH&se=false&sc=origin_cover&biz_tag=pcweb_cover&l=202307211825566527AF3C1671F5138610",
|
||||
"https://p6-pc-sign.douyinpic.com/obj/tos-cn-i-dy/bc4a6c96faea452e983b1371561e853d?x-expires=1691143200&x-signature=L2cNq8h3oKZfMpL1WEIxZu0s5dY%3D&from=3213915784_large&s=PackSourceEnum_PUBLISH&se=false&sc=origin_cover&biz_tag=pcweb_cover&l=202307211825566527AF3C1671F5138610"
|
||||
],
|
||||
"width": 720,
|
||||
"height": 720
|
||||
},
|
||||
"origin_cover": {
|
||||
"uri": "tos-cn-p-0015/a3635a2cf1264a14af11d2ca2a9a62d2_1688788214",
|
||||
"url_list": [
|
||||
"https://p3-pc-sign.douyinpic.com/tos-cn-p-0015/a3635a2cf1264a14af11d2ca2a9a62d2_1688788214~tplv-dy-360p.jpeg?x-expires=1691143200&x-signature=MCSrDq4d%2BC1r3x187Qdt6lemtn0%3D&from=3213915784&s=PackSourceEnum_PUBLISH&se=false&sc=origin_cover&biz_tag=pcweb_cover&l=202307211825566527AF3C1671F5138610",
|
||||
"https://p9-pc-sign.douyinpic.com/tos-cn-p-0015/a3635a2cf1264a14af11d2ca2a9a62d2_1688788214~tplv-dy-360p.jpeg?x-expires=1691143200&x-signature=F%2B5DrjJGhLaZj5VSv281CktNbL0%3D&from=3213915784&s=PackSourceEnum_PUBLISH&se=false&sc=origin_cover&biz_tag=pcweb_cover&l=202307211825566527AF3C1671F5138610",
|
||||
"https://p6-pc-sign.douyinpic.com/tos-cn-p-0015/a3635a2cf1264a14af11d2ca2a9a62d2_1688788214~tplv-dy-360p.jpeg?x-expires=1691143200&x-signature=1Ral%2BJKLKU%2B2B9gGjt9Okgmf6rA%3D&from=3213915784&s=PackSourceEnum_PUBLISH&se=false&sc=origin_cover&biz_tag=pcweb_cover&l=202307211825566527AF3C1671F5138610"
|
||||
],
|
||||
"width": 720,
|
||||
"height": 720
|
||||
},
|
||||
"ratio": "1080p",
|
||||
"gaussian_cover": {
|
||||
"uri": "tos-cn-p-0015/a3635a2cf1264a14af11d2ca2a9a62d2_1688788214",
|
||||
"url_list": [
|
||||
"https://p6-pc-sign.douyinpic.com/tos-cn-p-0015/a3635a2cf1264a14af11d2ca2a9a62d2_1688788214~tplv-tsj2vxp0zn-gaosi:40.jpeg?x-expires=1721469600&x-signature=0tFxlPcaCQkTcvCXkAFVahob2X8%3D&from=3213915784",
|
||||
"https://p3-pc-sign.douyinpic.com/tos-cn-p-0015/a3635a2cf1264a14af11d2ca2a9a62d2_1688788214~tplv-tsj2vxp0zn-gaosi:40.jpeg?x-expires=1721469600&x-signature=47RZudxN3Is0KIVkoQAQtirvjas%3D&from=3213915784",
|
||||
"https://p9-pc-sign.douyinpic.com/tos-cn-p-0015/a3635a2cf1264a14af11d2ca2a9a62d2_1688788214~tplv-tsj2vxp0zn-gaosi:40.jpeg?x-expires=1721469600&x-signature=7dul7w7kV9OXoQdy8e4Le1GSF9w%3D&from=3213915784"
|
||||
],
|
||||
"width": 720,
|
||||
"height": 720
|
||||
},
|
||||
"use_static_cover": true,
|
||||
"big_thumbs": [
|
||||
{
|
||||
"img_num": 64,
|
||||
"uri": "tos-cn-p-0015/33257fb02b7a4ea0ad745ff1df9abfb5_1688788223",
|
||||
"img_url": "http://p9-sign.douyinpic.com/tos-cn-p-0015/33257fb02b7a4ea0ad745ff1df9abfb5_1688788223~tplv-noop.image?dy_q=1689935156&x-expires=1689938820&x-signature=xbb7wogKFsI1qlMYC5ERjsFWdEY%3D",
|
||||
"img_x_size": 218,
|
||||
"img_y_size": 136,
|
||||
"img_x_len": 10,
|
||||
"img_y_len": 7,
|
||||
"duration": 64.04,
|
||||
"interval": 1,
|
||||
"fext": "jpg"
|
||||
}
|
||||
],
|
||||
"bit_rate": [
|
||||
{
|
||||
"gear_name": "normal_1080_0",
|
||||
"quality_type": 1,
|
||||
"bit_rate": 2251713,
|
||||
"play_addr": {
|
||||
"uri": "v0200fg10000cikdoqjc77u487ia3t1g",
|
||||
"url_list": [
|
||||
"http://v26-web.douyinvod.com/f09adc21743f08884ebfd18bee2c7757/64ba6b84/video/tos/cn/tos-cn-ve-15c001-alinc2/oMSoq9gqbAIgtxOKQn9keEBD4DACeAMhgNREnI/?a=6383&ch=10010&cr=0&dr=0&lr=all&cd=0%7C0%7C0%7C0&cv=1&br=2198&bt=2198&cs=0&ds=4&ft=bvTKJbQQqUWXf_40mo0OW_EklpPiXwUEiMVJEAmEA.CPD-I&mime_type=video_mp4&qs=0&rc=NzhnOmg5ODc7O2U5ZTVmZ0BpandkOjc6ZnRnbDMzNGkzM0AtX2NeXmJjNl4xLTRfL141YSMuMGY1cjRnbGhgLS1kLS9zcw%3D%3D&l=202307211825566527AF3C1671F5138610&btag=e00028000&dy_q=1689935156",
|
||||
"http://v3-web.douyinvod.com/a5e31e04504bc6463031a9d4036d643d/64ba6b84/video/tos/cn/tos-cn-ve-15c001-alinc2/oMSoq9gqbAIgtxOKQn9keEBD4DACeAMhgNREnI/?a=6383&ch=10010&cr=0&dr=0&lr=all&cd=0%7C0%7C0%7C0&cv=1&br=2198&bt=2198&cs=0&ds=4&ft=bvTKJbQQqUWXf_40mo0OW_EklpPiXwUEiMVJEAmEA.CPD-I&mime_type=video_mp4&qs=0&rc=NzhnOmg5ODc7O2U5ZTVmZ0BpandkOjc6ZnRnbDMzNGkzM0AtX2NeXmJjNl4xLTRfL141YSMuMGY1cjRnbGhgLS1kLS9zcw%3D%3D&l=202307211825566527AF3C1671F5138610&btag=e00028000&dy_q=1689935156",
|
||||
"https://www.douyin.com/aweme/v1/play/?video_id=v0200fg10000cikdoqjc77u487ia3t1g&line=0&file_id=8dac22bb760b48a894f5e6aea7fdb504&sign=283df9ddd7ac9739e9bcfbd3f7c9ec59&is_play_url=1&source=PackSourceEnum_PUBLISH"
|
||||
],
|
||||
"width": 1728,
|
||||
"height": 1080,
|
||||
"url_key": "v0200fg10000cikdoqjc77u487ia3t1g_h264_1080p_2251713",
|
||||
"data_size": 18025814,
|
||||
"file_hash": "283df9ddd7ac9739e9bcfbd3f7c9ec59",
|
||||
"file_cs": "c:0-53558-2651"
|
||||
},
|
||||
"is_h265": 0,
|
||||
"is_bytevc1": 0,
|
||||
"HDR_type": "",
|
||||
"HDR_bit": "",
|
||||
"FPS": 25,
|
||||
"video_extra": "{\"PktOffsetMap\":\"\"}"
|
||||
},
|
||||
{
|
||||
"gear_name": "normal_720_0",
|
||||
"quality_type": 10,
|
||||
"bit_rate": 1444459,
|
||||
"play_addr": {
|
||||
"uri": "v0200fg10000cikdoqjc77u487ia3t1g",
|
||||
"url_list": [
|
||||
"http://v26-web.douyinvod.com/3197a68facb88af40b8827b7c6d7e0ba/64ba6b84/video/tos/cn/tos-cn-ve-15c001-alinc2/oMbkQh9yAInqSozDh3exqIBSADLeEgBIN9QCgA/?a=6383&ch=10010&cr=0&dr=0&lr=all&cd=0%7C0%7C0%7C0&cv=1&br=1410&bt=1410&cs=0&ds=3&ft=bvTKJbQQqUWXf_40mo0OW_EklpPiXwUEiMVJEAmEA.CPD-I&mime_type=video_mp4&qs=0&rc=ZDNmOjg8OTdpZmU5Z2U1aUBpandkOjc6ZnRnbDMzNGkzM0A1Xy80Li81Ni4xLl8uNjJeYSMuMGY1cjRnbGhgLS1kLS9zcw%3D%3D&l=202307211825566527AF3C1671F5138610&btag=e00028000&dy_q=1689935156",
|
||||
"http://v3-web.douyinvod.com/b234128cb6026e44fba840cd36cdae9d/64ba6b84/video/tos/cn/tos-cn-ve-15c001-alinc2/oMbkQh9yAInqSozDh3exqIBSADLeEgBIN9QCgA/?a=6383&ch=10010&cr=0&dr=0&lr=all&cd=0%7C0%7C0%7C0&cv=1&br=1410&bt=1410&cs=0&ds=3&ft=bvTKJbQQqUWXf_40mo0OW_EklpPiXwUEiMVJEAmEA.CPD-I&mime_type=video_mp4&qs=0&rc=ZDNmOjg8OTdpZmU5Z2U1aUBpandkOjc6ZnRnbDMzNGkzM0A1Xy80Li81Ni4xLl8uNjJeYSMuMGY1cjRnbGhgLS1kLS9zcw%3D%3D&l=202307211825566527AF3C1671F5138610&btag=e00028000&dy_q=1689935156",
|
||||
"https://www.douyin.com/aweme/v1/play/?video_id=v0200fg10000cikdoqjc77u487ia3t1g&line=0&file_id=af529b1db61b4c1f94862915772cb08a&sign=26824f525594324205c189e7cc2ff87b&is_play_url=1&source=PackSourceEnum_PUBLISH"
|
||||
],
|
||||
"width": 1152,
|
||||
"height": 720,
|
||||
"url_key": "v0200fg10000cikdoqjc77u487ia3t1g_h264_720p_1444459",
|
||||
"data_size": 11563436,
|
||||
"file_hash": "26824f525594324205c189e7cc2ff87b",
|
||||
"file_cs": "c:0-54056-7b3e"
|
||||
},
|
||||
"is_h265": 0,
|
||||
"is_bytevc1": 0,
|
||||
"HDR_type": "",
|
||||
"HDR_bit": "",
|
||||
"FPS": 25,
|
||||
"video_extra": "{\"PktOffsetMap\":\"\"}"
|
||||
},
|
||||
{
|
||||
"gear_name": "normal_540_0",
|
||||
"quality_type": 20,
|
||||
"bit_rate": 1305609,
|
||||
"play_addr": {
|
||||
"uri": "v0200fg10000cikdoqjc77u487ia3t1g",
|
||||
"url_list": [
|
||||
"http://v26-web.douyinvod.com/555d787c81cad3e971a841eba72d67a3/64ba6b84/video/tos/cn/tos-cn-ve-15c001-alinc2/owqNBhgbSD9rgJekADQXE4IobxA6yBAC9nI9qe/?a=6383&ch=10010&cr=0&dr=0&lr=all&cd=0%7C0%7C0%7C0&cv=1&br=1275&bt=1275&cs=0&ds=6&ft=bvTKJbQQqUWXf_40mo0OW_EklpPiXwUEiMVJEAmEA.CPD-I&mime_type=video_mp4&qs=0&rc=NmQ7OjU5NTU7aDc4NzlpZkBpandkOjc6ZnRnbDMzNGkzM0AyNTZjYy9fNV4xYi0wNDExYSMuMGY1cjRnbGhgLS1kLS9zcw%3D%3D&l=202307211825566527AF3C1671F5138610&btag=e00028000&dy_q=1689935156",
|
||||
"http://v3-web.douyinvod.com/450a6e0bda57eceec7b94d7259802a86/64ba6b84/video/tos/cn/tos-cn-ve-15c001-alinc2/owqNBhgbSD9rgJekADQXE4IobxA6yBAC9nI9qe/?a=6383&ch=10010&cr=0&dr=0&lr=all&cd=0%7C0%7C0%7C0&cv=1&br=1275&bt=1275&cs=0&ds=6&ft=bvTKJbQQqUWXf_40mo0OW_EklpPiXwUEiMVJEAmEA.CPD-I&mime_type=video_mp4&qs=0&rc=NmQ7OjU5NTU7aDc4NzlpZkBpandkOjc6ZnRnbDMzNGkzM0AyNTZjYy9fNV4xYi0wNDExYSMuMGY1cjRnbGhgLS1kLS9zcw%3D%3D&l=202307211825566527AF3C1671F5138610&btag=e00028000&dy_q=1689935156",
|
||||
"https://www.douyin.com/aweme/v1/play/?video_id=v0200fg10000cikdoqjc77u487ia3t1g&line=0&file_id=4c4f763405e44ea882b226f2f7988a53&sign=f4a596a72da5dedfd950e81a5604f345&is_play_url=1&source=PackSourceEnum_PUBLISH"
|
||||
],
|
||||
"width": 922,
|
||||
"height": 576,
|
||||
"url_key": "v0200fg10000cikdoqjc77u487ia3t1g_h264_540p_1305609",
|
||||
"data_size": 10451893,
|
||||
"file_hash": "f4a596a72da5dedfd950e81a5604f345",
|
||||
"file_cs": "c:0-54161-5a7b"
|
||||
},
|
||||
"is_h265": 0,
|
||||
"is_bytevc1": 0,
|
||||
"HDR_type": "",
|
||||
"HDR_bit": "",
|
||||
"FPS": 25,
|
||||
"video_extra": "{\"PktOffsetMap\":\"\"}"
|
||||
},
|
||||
{
|
||||
"gear_name": "lower_540_0",
|
||||
"quality_type": 24,
|
||||
"bit_rate": 872751,
|
||||
"play_addr": {
|
||||
"uri": "v0200fg10000cikdoqjc77u487ia3t1g",
|
||||
"url_list": [
|
||||
"http://v26-web.douyinvod.com/9b23489021428ab7e105003b4dd46e02/64ba6b84/video/tos/cn/tos-cn-ve-15c001-alinc2/oQb9IAxgDIqBaGeo9UBWETS4gQeNAkANqhnCqD/?a=6383&ch=10010&cr=0&dr=0&lr=all&cd=0%7C0%7C0%7C0&cv=1&br=852&bt=852&cs=0&ds=6&ft=bvTKJbQQqUWXf_40mo0OW_EklpPiXwUEiMVJEAmEA.CPD-I&mime_type=video_mp4&qs=4&rc=NWg7MzlkZGVoOmU6Omk6ZkBpandkOjc6ZnRnbDMzNGkzM0BiL2EzYV5fNV4xLjNfNDBfYSMuMGY1cjRnbGhgLS1kLS9zcw%3D%3D&l=202307211825566527AF3C1671F5138610&btag=e00028000&dy_q=1689935156",
|
||||
"http://v3-web.douyinvod.com/aadc7bde526062ea8a529a995d42bfd4/64ba6b84/video/tos/cn/tos-cn-ve-15c001-alinc2/oQb9IAxgDIqBaGeo9UBWETS4gQeNAkANqhnCqD/?a=6383&ch=10010&cr=0&dr=0&lr=all&cd=0%7C0%7C0%7C0&cv=1&br=852&bt=852&cs=0&ds=6&ft=bvTKJbQQqUWXf_40mo0OW_EklpPiXwUEiMVJEAmEA.CPD-I&mime_type=video_mp4&qs=4&rc=NWg7MzlkZGVoOmU6Omk6ZkBpandkOjc6ZnRnbDMzNGkzM0BiL2EzYV5fNV4xLjNfNDBfYSMuMGY1cjRnbGhgLS1kLS9zcw%3D%3D&l=202307211825566527AF3C1671F5138610&btag=e00028000&dy_q=1689935156",
|
||||
"https://www.douyin.com/aweme/v1/play/?video_id=v0200fg10000cikdoqjc77u487ia3t1g&line=0&file_id=bc377fb7671b47ae8bbaaad660d82ee2&sign=31811725e19ff1df3baf348bb53358e8&is_play_url=1&source=PackSourceEnum_PUBLISH"
|
||||
],
|
||||
"width": 922,
|
||||
"height": 576,
|
||||
"url_key": "v0200fg10000cikdoqjc77u487ia3t1g_h264_540p_872751",
|
||||
"data_size": 6986705,
|
||||
"file_hash": "31811725e19ff1df3baf348bb53358e8",
|
||||
"file_cs": "c:0-41551-d7b4"
|
||||
},
|
||||
"is_h265": 0,
|
||||
"is_bytevc1": 0,
|
||||
"HDR_type": "",
|
||||
"HDR_bit": "",
|
||||
"FPS": 25,
|
||||
"video_extra": "{\"PktOffsetMap\":\"\"}"
|
||||
}
|
||||
],
|
||||
"duration": 64043,
|
||||
"horizontal_type": 1,
|
||||
"is_source_HDR": 0,
|
||||
"meta": "{\"bright_ratio_mean\":\"0.0382\",\"brightness_mean\":\"84.3949\",\"diff_overexposure_ratio\":\"0.0696\",\"loudness\":\"-9.1\",\"overexposure_ratio_mean\":\"0.0363\",\"peak\":\"1\",\"qprf\":\"1.000\",\"sr_score\":\"1.000\",\"std_brightness\":\"36.3712\",\"title_info\":\"{\\\"ratio_br_l\\\": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0], \\\"ratio_edge_l\\\": [0.0, 0.0, 0.0, 0.0, 0.0, 0.05], \\\"progress_bar\\\": [0.0, 0.0, 0.0], \\\"bullet_zone\\\": 0.0, \\\"top_res_add\\\": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], \\\"bottom_res_add\\\": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], \\\"version\\\": \\\"v1.0\\\"}\"}",
|
||||
"bit_rate_audio": null,
|
||||
"is_long_video": 1,
|
||||
"video_model": ""
|
||||
},
|
||||
"share_url": "https://www.iesdouyin.com/share/video/7253290037918354691/?region=CN&mid=7253290130763467557&u_code=l1j9bkbd&did=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&iid=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&with_sec_did=1&titleType=title&share_sign=Q.hVKKsEpG9WNP716jVs.najPoQyEKRTS3pfzao02lc-&share_version=0&ts=1689935156&from_ssr=1",
|
||||
"user_digged": 0,
|
||||
"statistics": {
|
||||
"admire_count": 0,
|
||||
"comment_count": 48,
|
||||
"digg_count": 21705,
|
||||
"collect_count": 330,
|
||||
"play_count": 0,
|
||||
"share_count": 63
|
||||
},
|
||||
"status": {
|
||||
"listen_video_status": 0,
|
||||
"is_delete": false,
|
||||
"allow_share": true,
|
||||
"is_prohibited": false,
|
||||
"in_reviewing": false,
|
||||
"part_see": 0,
|
||||
"private_status": 0,
|
||||
"review_result": {
|
||||
"review_status": 0
|
||||
}
|
||||
},
|
||||
"image_list": null,
|
||||
"text_extra": [
|
||||
{
|
||||
"start": 20,
|
||||
"end": 28,
|
||||
"type": 1,
|
||||
"hashtag_name": "电影冰雪狙击2",
|
||||
"hashtag_id": "1770183396544590",
|
||||
"is_commerce": false
|
||||
},
|
||||
{
|
||||
"start": 30,
|
||||
"end": 41,
|
||||
"type": 1,
|
||||
"hashtag_name": "冰雪狙击2老戏骨飙戏",
|
||||
"hashtag_id": "1770821731138571",
|
||||
"is_commerce": false
|
||||
}
|
||||
],
|
||||
"is_top": 1,
|
||||
"preview_video_status": 1,
|
||||
"share_info": {
|
||||
"share_url": "https://www.iesdouyin.com/share/video/7253290037918354691/?region=CN&mid=7253290130763467557&u_code=l1j9bkbd&did=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&iid=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&with_sec_did=1&titleType=title&share_sign=Q.hVKKsEpG9WNP716jVs.najPoQyEKRTS3pfzao02lc-&share_version=0&ts=1689935156&from_ssr=1",
|
||||
"share_link_desc": "4.69 qeb:/ 飞行员跳伞进山寨,哪知道白捡了个寨主当 # 电影冰雪狙击2 # 冰雪狙击2老戏骨飙戏 %s 复制此链接,打开Dou音搜索,直接观看视频!"
|
||||
},
|
||||
"super_like_status": 0,
|
||||
"video_labels": [],
|
||||
"collection_corner_mark": 0,
|
||||
"duration": 64043,
|
||||
"aweme_type": 0,
|
||||
"authentication_token": "MS4wLjAAAAAAiH5xanOMcn_wrYeq6V8Wv0lbjnlML3eNxCcqlfPqgSMgoQnYpV-9fBKIlgnYVMauD4yVxbfRfwAaRT1GCMu_6ptC-JSgsn-8Gy_9NZXGatOT8MhZMoEvMRlJY--5OmqgCkLZ2JzFrPrg0C9JrqH1tB_c2SuebwEejpOYtBASKQ81WbAuZwZ1SKwdkJGCK_u4AVB5HpmzOgtNwLFkWurMOg",
|
||||
"yumme_recreason": null,
|
||||
"image_infos": null,
|
||||
"seo_info": {},
|
||||
"is_share_post": false,
|
||||
"is_life_item": false,
|
||||
"position": null,
|
||||
"uniqid_position": null,
|
||||
"comment_list": null,
|
||||
"author_user_id": 96719499963,
|
||||
"media_type": 4,
|
||||
"geofencing": [],
|
||||
"ref_voice_modify_id_list": null,
|
||||
"tts_id_list": null,
|
||||
"region": "",
|
||||
"video_text": [],
|
||||
"dislike_dimension_list": null,
|
||||
"collect_stat": 0,
|
||||
"label_top_text": null,
|
||||
"promotions": [],
|
||||
"group_id": "7253008209626156349",
|
||||
"prevent_download": false,
|
||||
"nickname_position": null,
|
||||
"challenge_position": null,
|
||||
"user_recommend_status": 0,
|
||||
"is_image_beat": false,
|
||||
"chapter_list": null,
|
||||
"long_video": null,
|
||||
"author_mask_tag": 0,
|
||||
"packed_clips": null,
|
||||
"should_open_ad_report": false,
|
||||
"comment_words_recommend": {
|
||||
"zero_comment": null
|
||||
},
|
||||
"interaction_stickers": null,
|
||||
"preview_title": "飞行员跳伞进山寨,哪知道白捡了个寨主当 #电影冰雪狙击2 #冰雪狙击2老戏骨飙戏",
|
||||
"origin_comment_ids": null,
|
||||
"commerce_config_data": null,
|
||||
"distribute_circle": {
|
||||
"distribute_type": 0,
|
||||
"campus_block_interaction": false,
|
||||
"is_campus": false
|
||||
},
|
||||
"standard_bar_info_list": null,
|
||||
"aweme_control": {
|
||||
"can_forward": true,
|
||||
"can_share": true,
|
||||
"can_comment": true,
|
||||
"can_show_comment": true
|
||||
},
|
||||
"dislike_dimension_list_v2": null,
|
||||
"image_crop_ctrl": 0,
|
||||
"item_warn_notification": {
|
||||
"type": 0,
|
||||
"show": false,
|
||||
"content": ""
|
||||
},
|
||||
"image_comment": {},
|
||||
"anchors": null,
|
||||
"hybrid_label": null,
|
||||
"geofencing_regions": null,
|
||||
"video_game_data_channel_config": {},
|
||||
"component_info_v2": "{\"desc_lines_limit\":0,\"hide_marquee\":false}",
|
||||
"is_story": 0,
|
||||
"report_action": false,
|
||||
"guide_scene_info": {
|
||||
"guide_scene_type": 0,
|
||||
"feed_origin_gid_info_str": "",
|
||||
"diamond_expose_info_str": ""
|
||||
},
|
||||
"danmaku_control": {
|
||||
"enable_danmaku": true,
|
||||
"post_privilege_level": 0,
|
||||
"is_post_denied": false,
|
||||
"post_denied_reason": "",
|
||||
"skip_danmaku": true,
|
||||
"danmaku_cnt": 0
|
||||
},
|
||||
"slides_music_beats": null,
|
||||
"cover_labels": null,
|
||||
"book_bar": {},
|
||||
"origin_text_extra": [],
|
||||
"guide_btn_type": 0,
|
||||
"voice_modify_id_list": null,
|
||||
"common_bar_info": "[]",
|
||||
"images": null,
|
||||
"relation_labels": null,
|
||||
"horizontal_type": 1,
|
||||
"ref_tts_id_list": null,
|
||||
"impression_data": {
|
||||
"group_id_list_a": [],
|
||||
"group_id_list_b": [],
|
||||
"similar_id_list_a": [
|
||||
7253007583462608140,
|
||||
7253008209626156349,
|
||||
7253265685516700980
|
||||
],
|
||||
"similar_id_list_b": [
|
||||
7253007583462608140,
|
||||
7253008209626156349,
|
||||
7253265685516700980
|
||||
],
|
||||
"group_id_list_c": [
|
||||
7253108840202308879,
|
||||
7253114311474777347,
|
||||
7253109870549945658,
|
||||
7253287939206024451
|
||||
]
|
||||
},
|
||||
"disable_relation_bar": 0,
|
||||
"photo_search_entrance": {
|
||||
"ecom_type": 0
|
||||
},
|
||||
"social_tag_list": null,
|
||||
"show_follow_button": {},
|
||||
"duet_aggregate_in_music_tab": false,
|
||||
"is_duet_sing": false,
|
||||
"search_impr": {
|
||||
"entity_id": "7253290037918354691",
|
||||
"entity_type": "GENERAL"
|
||||
},
|
||||
"comment_permission_info": {
|
||||
"comment_permission_status": 0,
|
||||
"can_comment": true,
|
||||
"item_detail_entry": false,
|
||||
"press_entry": false,
|
||||
"toast_guide": false
|
||||
},
|
||||
"original_images": null,
|
||||
"series_paid_info": {
|
||||
"series_paid_status": 0,
|
||||
"item_price": 0
|
||||
},
|
||||
"img_bitrate": null,
|
||||
"comment_gid": 7253290037918354691,
|
||||
"digg_lottie": {
|
||||
"lottie_id": "",
|
||||
"can_bomb": 0
|
||||
},
|
||||
"image_album_music_info": {
|
||||
"begin_time": -1,
|
||||
"end_time": -1,
|
||||
"volume": -1
|
||||
},
|
||||
"video_tag": [
|
||||
{
|
||||
"tag_id": 2019,
|
||||
"tag_name": "影视",
|
||||
"level": 1
|
||||
},
|
||||
{
|
||||
"tag_id": 2019001,
|
||||
"tag_name": "影视剪辑",
|
||||
"level": 2
|
||||
},
|
||||
{
|
||||
"tag_id": 2019001001,
|
||||
"tag_name": "电视剧剪辑",
|
||||
"level": 3
|
||||
}
|
||||
],
|
||||
"is_collects_selected": 0
|
||||
}
|
||||
],
|
||||
"time_list": null,
|
||||
"log_pb": {
|
||||
"impr_id": "202307211825566527AF3C1671F5138610"
|
||||
},
|
||||
"request_item_cursor": 0,
|
||||
"post_serial": 2,
|
||||
"replace_series_cover": 1
|
||||
}
|
||||
@@ -0,0 +1,366 @@
|
||||
{
|
||||
"extra": {
|
||||
"fatal_item_ids": [],
|
||||
"logid": "20230721155923E11B5C46A431FA038B62",
|
||||
"now": 1689926363000
|
||||
},
|
||||
"log_pb": {
|
||||
"impr_id": "20230721155923E11B5C46A431FA038B62"
|
||||
},
|
||||
"status_code": 0,
|
||||
"status_msg": null,
|
||||
"user": {
|
||||
"apple_account": 0,
|
||||
"avatar_168x168": {
|
||||
"height": 720,
|
||||
"uri": "aweme-avatar/tos-cn-i-0813_d1dc48cd00f54143999a07a9ef5b83d6",
|
||||
"url_list": [
|
||||
"https://p3-pc.douyinpic.com/img/aweme-avatar/tos-cn-i-0813_d1dc48cd00f54143999a07a9ef5b83d6~c5_168x168.jpeg?from=2956013662"
|
||||
],
|
||||
"width": 720
|
||||
},
|
||||
"avatar_300x300": {
|
||||
"height": 720,
|
||||
"uri": "aweme-avatar/tos-cn-i-0813_d1dc48cd00f54143999a07a9ef5b83d6",
|
||||
"url_list": [
|
||||
"https://p3-pc.douyinpic.com/img/aweme-avatar/tos-cn-i-0813_d1dc48cd00f54143999a07a9ef5b83d6~c5_300x300.jpeg?from=2956013662"
|
||||
],
|
||||
"width": 720
|
||||
},
|
||||
"avatar_larger": {
|
||||
"height": 720,
|
||||
"uri": "aweme-avatar/tos-cn-i-0813_d1dc48cd00f54143999a07a9ef5b83d6",
|
||||
"url_list": [
|
||||
"https://p3-pc.douyinpic.com/aweme/1080x1080/aweme-avatar/tos-cn-i-0813_d1dc48cd00f54143999a07a9ef5b83d6.jpeg?from=2956013662"
|
||||
],
|
||||
"width": 720
|
||||
},
|
||||
"avatar_medium": {
|
||||
"height": 720,
|
||||
"uri": "aweme-avatar/tos-cn-i-0813_d1dc48cd00f54143999a07a9ef5b83d6",
|
||||
"url_list": [
|
||||
"https://p3-pc.douyinpic.com/aweme/720x720/aweme-avatar/tos-cn-i-0813_d1dc48cd00f54143999a07a9ef5b83d6.jpeg?from=2956013662"
|
||||
],
|
||||
"width": 720
|
||||
},
|
||||
"avatar_thumb": {
|
||||
"height": 720,
|
||||
"uri": "aweme-avatar/tos-cn-i-0813_d1dc48cd00f54143999a07a9ef5b83d6",
|
||||
"url_list": [
|
||||
"https://p3-pc.douyinpic.com/aweme/100x100/aweme-avatar/tos-cn-i-0813_d1dc48cd00f54143999a07a9ef5b83d6.jpeg?from=2956013662"
|
||||
],
|
||||
"width": 720
|
||||
},
|
||||
"aweme_count": 509,
|
||||
"aweme_count_correction_threshold": -1,
|
||||
"birthday_hide_level": 0,
|
||||
"can_set_item_cover": false,
|
||||
"can_show_group_card": 1,
|
||||
"card_entries": [
|
||||
{
|
||||
"card_data": "{\"is_order_card\":false,\"has_new\":false,\"is_store\":false,\"shop_id\":\"\",\"product_count\":45,\"store_type\":\"window\",\"icon_is_repeat\":false,\"icon_type\":\"png\",\"is_promotion_icon\":false,\"subtitle_resource_list\":\"\"}",
|
||||
"event_params": "",
|
||||
"goto_url": "sslocal://goods/shop?uid=101881718376&sec_uid=MS4wLjABAAAA85mPkf3FPVNmf_XTn4xpYrqB7kwPf7N7haPEJrRW8CQ",
|
||||
"icon_dark": {
|
||||
"url_list": [
|
||||
"https://lf3-static.bytednsdoc.com/obj/eden-cn/fylmmlqeh7nupanuhog/ic_light-2x.png",
|
||||
"https://lf9-static.bytednsdoc.com/obj/eden-cn/fylmmlqeh7nupanuhog/ic_light-2x.png",
|
||||
"https://lf26-static.bytednsdoc.com/obj/eden-cn/fylmmlqeh7nupanuhog/ic_light-2x.png",
|
||||
"https://lf3-static.bytednsdoc.com/obj/eden-cn/fylmmlqeh7nupanuhog/ic_light-3x.png",
|
||||
"https://lf9-static.bytednsdoc.com/obj/eden-cn/fylmmlqeh7nupanuhog/ic_light-3x.png",
|
||||
"https://lf26-static.bytednsdoc.com/obj/eden-cn/fylmmlqeh7nupanuhog/ic_light-3x.png"
|
||||
]
|
||||
},
|
||||
"icon_light": {
|
||||
"url_list": [
|
||||
"https://lf3-static.bytednsdoc.com/obj/eden-cn/fylmmlqeh7nupanuhog/ic_dark-2x.png",
|
||||
"https://lf9-static.bytednsdoc.com/obj/eden-cn/fylmmlqeh7nupanuhog/ic_dark-2x.png",
|
||||
"https://lf26-static.bytednsdoc.com/obj/eden-cn/fylmmlqeh7nupanuhog/ic_dark-2x.png",
|
||||
"https://lf3-static.bytednsdoc.com/obj/eden-cn/fylmmlqeh7nupanuhog/ic_dark-3x.png",
|
||||
"https://lf9-static.bytednsdoc.com/obj/eden-cn/fylmmlqeh7nupanuhog/ic_dark-3x.png",
|
||||
"https://lf26-static.bytednsdoc.com/obj/eden-cn/fylmmlqeh7nupanuhog/ic_dark-3x.png"
|
||||
]
|
||||
},
|
||||
"sub_title": "45件好物",
|
||||
"title": "进入橱窗",
|
||||
"type": 1
|
||||
},
|
||||
{
|
||||
"goto_url": "aweme://im/FansGroup/GuestState",
|
||||
"icon_dark": {
|
||||
"uri": "https://p3.douyinpic.com/obj/im-resource/old_fans_group_manage_dark.png",
|
||||
"url_list": [
|
||||
"https://p3.douyinpic.com/obj/im-resource/old_fans_group_manage_dark.png",
|
||||
"https://p6.douyinpic.com/obj/im-resource/old_fans_group_manage_dark.png",
|
||||
"https://p9.douyinpic.com/obj/im-resource/old_fans_group_manage_dark.png"
|
||||
]
|
||||
},
|
||||
"icon_light": {
|
||||
"uri": "https://p3.douyinpic.com/obj/im-resource/old_fans_group_manage_light.png",
|
||||
"url_list": [
|
||||
"https://p3.douyinpic.com/obj/im-resource/old_fans_group_manage_light.png",
|
||||
"https://p6.douyinpic.com/obj/im-resource/old_fans_group_manage_light.png",
|
||||
"https://p9.douyinpic.com/obj/im-resource/old_fans_group_manage_light.png"
|
||||
]
|
||||
},
|
||||
"sub_title": "5个群聊",
|
||||
"title": "粉丝群",
|
||||
"type": 2
|
||||
},
|
||||
{
|
||||
"card_data": "{\"has_yellow_point\":false,\"announcement_release_time\":0,\"preview_video_release_time\":0,\"precipitation_video_release_time\":0,\"style\":0,\"appointment_id\":0,\"typ\":0,\"subscribe_cnt\":0,\"subscribe_status\":0,\"top_title\":\"\",\"top_subtitle\":\"\",\"cycle\":0}",
|
||||
"goto_url": "sslocal://webcast_lynxview?url=https%3A%2F%2Flf-webcast-gr-sourcecdn.bytegecko.com%2Fobj%2Fbyte-gurd-source-gr%2Fwebcast%2Fmono%2Flynx%2Fcommunity_live_dynamic_douyin%2Ftemplate%2Fpages%2Flive_dynamic%2Ftemplate.js%3Fanchor_id%3D101881718376%26sec_anchor_id%3DMS4wLjABAAAA85mPkf3FPVNmf_XTn4xpYrqB7kwPf7N7haPEJrRW8CQ&web_bg_color=%23161823&status_bar_color=white&type=fullscreen&hide_nav_bar=1&trans_status_bar=1&enable_preload=main&fallback_url=sslocal%3A%2F%2Fwebcast_webview%3Furl%3Dhttps%253A%252F%252Flf-webcast-gr-sourcecdn.bytegecko.com%252Fobj%252Fbyte-gurd-source-gr%252Fwebcast%252Fmono%252Flynx%252Fcommunity_live_dynamic_douyin%252Fweb%252Ftemplate%252Fpages%252Flive_dynamic%252Findex.html%253Fanchor_id%253D101881718376%2526sec_anchor_id%253DMS4wLjABAAAA85mPkf3FPVNmf_XTn4xpYrqB7kwPf7N7haPEJrRW8CQ%26web_bg_color%3D%2523161823%26status_bar_color%3Dwhite%26type%3Dfullscreen%26hide_nav_bar%3D1%26trans_status_bar%3D1",
|
||||
"icon_dark": {
|
||||
"uri": "obj/eden-cn/91eh7uhfnult/all_cards_old_version/type6_live_dynamic_dark.png",
|
||||
"url_list": [
|
||||
"https://p6-dy-ipv6.byteimg.com/obj/eden-cn/91eh7uhfnult/all_cards_old_version/type6_live_dynamic_dark.png",
|
||||
"https://p3-dy-ipv6.byteimg.com/obj/eden-cn/91eh7uhfnult/all_cards_old_version/type6_live_dynamic_dark.png",
|
||||
"https://p9-dy.byteimg.com/obj/eden-cn/91eh7uhfnult/all_cards_old_version/type6_live_dynamic_dark.png"
|
||||
]
|
||||
},
|
||||
"icon_light": {
|
||||
"uri": "obj/eden-cn/91eh7uhfnult/all_cards_old_version/type6_live_dynamic_light.png",
|
||||
"url_list": [
|
||||
"https://p6-dy-ipv6.byteimg.com/obj/eden-cn/91eh7uhfnult/all_cards_old_version/type6_live_dynamic_light.png",
|
||||
"https://p3-dy-ipv6.byteimg.com/obj/eden-cn/91eh7uhfnult/all_cards_old_version/type6_live_dynamic_light.png",
|
||||
"https://p9-dy.byteimg.com/obj/eden-cn/91eh7uhfnult/all_cards_old_version/type6_live_dynamic_light.png"
|
||||
]
|
||||
},
|
||||
"sub_title": "查看历史记录",
|
||||
"title": "直播动态",
|
||||
"type": 6
|
||||
}
|
||||
],
|
||||
"city": "",
|
||||
"close_friend_type": 0,
|
||||
"commerce_info": {
|
||||
"challenge_list": [],
|
||||
"head_image_list": null,
|
||||
"offline_info_list": [
|
||||
{
|
||||
"conf_type": 12,
|
||||
"content": "{\"content\":\"周一至周日 12:00-19:00\",\"title\":\"营业中\"}",
|
||||
"link_type": "business_hours",
|
||||
"offline_info_type": 10,
|
||||
"text": "营业时间"
|
||||
}
|
||||
],
|
||||
"smart_phone_list": null,
|
||||
"task_list": null
|
||||
},
|
||||
"commerce_permissions": {
|
||||
"enterprise": 1
|
||||
},
|
||||
"commerce_user_info": {
|
||||
"ad_revenue_rits": null,
|
||||
"has_ads_entry": true,
|
||||
"show_star_atlas_cooperation": false,
|
||||
"star_atlas": 1
|
||||
},
|
||||
"commerce_user_level": 0,
|
||||
"country": "",
|
||||
"cover_and_head_image_info": {
|
||||
"cover_list": null,
|
||||
"profile_cover_list": [
|
||||
{
|
||||
"cover_url": {
|
||||
"uri": "tos-cn-i-0813/oYCAEmz7fAE3VIuEAeICACYAWFhEICANgyxpXh",
|
||||
"url_list": [
|
||||
"https://p9-pc-sign.douyinpic.com/obj/tos-cn-i-0813/oYCAEmz7fAE3VIuEAeICACYAWFhEICANgyxpXh?x-expires=1690095600&x-signature=NAJ%2FjJEHPlY7HxKa0kE5fk7Cz1Y%3D&from=2480802190",
|
||||
"https://p6-pc-sign.douyinpic.com/obj/tos-cn-i-0813/oYCAEmz7fAE3VIuEAeICACYAWFhEICANgyxpXh?x-expires=1690095600&x-signature=DiKX1ZdzN73ZC4yOaHDeGVVobwg%3D&from=2480802190",
|
||||
"https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-0813/oYCAEmz7fAE3VIuEAeICACYAWFhEICANgyxpXh?x-expires=1690095600&x-signature=L6vVRkoeX3t05kYybFKuh8J67mY%3D&from=2480802190"
|
||||
]
|
||||
},
|
||||
"dark_cover_color": "#FF1c2320",
|
||||
"light_cover_color": "#FF1c2320"
|
||||
}
|
||||
]
|
||||
},
|
||||
"cover_colour": "#03373EE5",
|
||||
"cover_url": [
|
||||
{
|
||||
"uri": "tos-cn-i-0813/oYCAEmz7fAE3VIuEAeICACYAWFhEICANgyxpXh",
|
||||
"url_list": [
|
||||
"https://p9-pc-sign.douyinpic.com/obj/tos-cn-i-0813/oYCAEmz7fAE3VIuEAeICACYAWFhEICANgyxpXh?x-expires=1690095600&x-signature=NAJ%2FjJEHPlY7HxKa0kE5fk7Cz1Y%3D&from=2480802190",
|
||||
"https://p6-pc-sign.douyinpic.com/obj/tos-cn-i-0813/oYCAEmz7fAE3VIuEAeICACYAWFhEICANgyxpXh?x-expires=1690095600&x-signature=DiKX1ZdzN73ZC4yOaHDeGVVobwg%3D&from=2480802190",
|
||||
"https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-0813/oYCAEmz7fAE3VIuEAeICACYAWFhEICANgyxpXh?x-expires=1690095600&x-signature=L6vVRkoeX3t05kYybFKuh8J67mY%3D&from=2480802190"
|
||||
]
|
||||
},
|
||||
{
|
||||
"uri": "c8510002be9a3a61aad2",
|
||||
"url_list": [
|
||||
"https://p3-pc-sign.douyinpic.com/obj/c8510002be9a3a61aad2?x-expires=1690095600&x-signature=bi35K0GxzoTCJXQTxuuHrK5jtbU%3D&from=2480802190",
|
||||
"https://p9-pc-sign.douyinpic.com/obj/c8510002be9a3a61aad2?x-expires=1690095600&x-signature=KVQFnvZbyx4npP5TVeBAyJV81yQ%3D&from=2480802190",
|
||||
"https://p6-pc-sign.douyinpic.com/obj/c8510002be9a3a61aad2?x-expires=1690095600&x-signature=oSqLoYWpVlzBQHgYoui1Gxn79Ng%3D&from=2480802190"
|
||||
]
|
||||
}
|
||||
],
|
||||
"custom_verify": "",
|
||||
"district": "",
|
||||
"dongtai_count": 0,
|
||||
"dynamic_cover": {},
|
||||
"enable_wish": false,
|
||||
"enterprise_user_info": "{\"commerce_info\":{\"offline_info_list\":[{\"offline_info_type\":10,\"text\":\"营业时间\",\"link_type\":\"business_hours\",\"content\":\"{\\\"content\\\":\\\"周一至周日 12:00-19:00\\\",\\\"title\\\":\\\"营业中\\\"}\",\"conf_type\":12}],\"challenge_list\":[],\"task_list\":null,\"head_image_list\":null,\"smart_phone_list\":null},\"homepage_bottom_toast\":null,\"tab_settings\":{\"enterprise_tab\":{\"title\":\"商家\",\"tab_type\":0,\"show_tab_settings\":true,\"tab_link\":\"aweme://lynxview/?enter_from=profile&channel=mp_lynx_tab&bundle=template.js&hide_nav_bar=1&dynamic=1&surl=https%3A%2F%2Flf-dy-sourcecdn-tos.bytegecko.com%2Fobj%2Fbyte-gurd-source%2Faweme%2Fplatform%2Flynx%2Fmp_lynx_tab%2Ftemplate.js&is_editor=0&is_checking=0&loading_bgcolor=00000000&needReloadWithTheme=1&use_bdx=1&trans_status_bar=1&use_gecko_first=1&container_bgcolor=00000000&page_enabled=1&page_priority=1&template_id=0&record_id=0&is_owner=0&sec_to_user_id=MS4wLjABAAAA85mPkf3FPVNmf_XTn4xpYrqB7kwPf7N7haPEJrRW8CQ&to_user_id=101881718376&business_type=0&offline_info_count=1&show_loading=1\",\"show_tab_style\":0}},\"profile_tab_type\":5,\"permissions\":[{\"Id\":3,\"Key\":\"ItemShop\",\"Name\":\"视频电商\",\"AppId\":1128,\"Status\":1,\"Extra\":null,\"Customization\":null,\"Parent\":0,\"Actions\":null},{\"Id\":4,\"Key\":\"LiveShop\",\"Name\":\"直播电商\",\"AppId\":1128,\"Status\":1,\"Extra\":null,\"Customization\":null,\"Parent\":0,\"Actions\":null},{\"Id\":5,\"Key\":\"UserShop\",\"Name\":\"个人橱窗\",\"AppId\":1128,\"Status\":1,\"Extra\":null,\"Customization\":null,\"Parent\":1,\"Actions\":null},{\"Id\":54,\"Key\":\"EIMCustomizeMenus\",\"Name\":\"自定义私信菜单\",\"AppId\":1575,\"Status\":1,\"Extra\":null,\"Customization\":null,\"Parent\":12,\"Actions\":null},{\"Id\":76,\"Key\":\"EHomepageTabManagement\",\"Name\":\"商家页面\",\"AppId\":1575,\"Status\":1,\"Extra\":null,\"Customization\":null,\"Parent\":17,\"Actions\":null},{\"Id\":81,\"Key\":\"Enterprise\",\"Name\":\"企业权限标识\",\"AppId\":1128,\"Status\":1,\"Extra\":null,\"Customization\":null,\"Parent\":0,\"Actions\":null},{\"Id\":120,\"Key\":\"IMMonitor\",\"Name\":\"私信监管\",\"AppId\":1128,\"Status\":1,\"Extra\":null,\"Customization\":null,\"Parent\":0,\"Actions\":null},{\"Id\":443,\"Key\":\"EIMCommand\",\"Name\":\"私信指令消息\",\"AppId\":1128,\"Status\":1,\"Extra\":null,\"Customization\":null,\"Parent\":12,\"Actions\":null}],\"e_role_key\":\"EAccountMPlus\",\"tab_ceiling_toast\":null,\"limiters\":null,\"attic_info\":null,\"profile_edit_button\":null,\"elite_center\":{\"recommend_target\":\"GeneralESC\",\"candidates\":[{\"key\":\"GeneralESC\",\"biz\":1,\"title\":\"企业服务中心\",\"schema\":\"aweme://webview?url=https%3A%2F%2Fapi.amemv.com%2Finsights%2Felite%2Fmp_business_elite%2Fpages%2Fenterprise-service-center%2Findex.html%3Fhide_nav_bar%3D1%26allow_lmb%3D1%26container_bgcolor%3Dffffff%26status_font_dark%3D1%26enter_from%3DhomeSidebar&awe_falcon=sh\"}]},\"enterprise_card_visibility\":true,\"blue_label_edit_jump_url\":\"aweme://webview/?url=https%3A%2F%2Fapi.amemv.com%2Finsights%2Flite%2FcontactSetting%3Fhide_nav_bar%3D1%26title%3D%25E8%2581%2594%25E7%25B3%25BB%25E6%2596%25B9%25E5%25BC%258F%26enter_from%3Dcustomized_tab&hide_nav_bar=1&title=%E8%81%94%E7%B3%BB%E6%96%B9%E5%BC%8F&rn_schema=aweme%3A%2F%2Freactnative%2F%3Fchannel_name%3Drn_patch%26bundle_name%3Dbusiness%26module_name%3Dpage_e_lite_contactSetting%26force_h5%3D1%26hide_nav_bar%3D1%26bundle_url%3D%26title%3D%25E8%2581%2594%25E7%25B3%25BB%25E6%2596%25B9%25E5%25BC%258F%26enter_from%3Dcustomized_tab\"}",
|
||||
"enterprise_verify_reason": "",
|
||||
"favorite_permission": 0,
|
||||
"favoriting_count": 0,
|
||||
"follow_status": 1,
|
||||
"follower_count": 298468,
|
||||
"follower_request_status": 0,
|
||||
"follower_status": 0,
|
||||
"following_count": 45,
|
||||
"forward_count": 0,
|
||||
"gender": 1,
|
||||
"general_permission": {
|
||||
"following_follower_list_toast": 1
|
||||
},
|
||||
"has_e_account_role": true,
|
||||
"has_subscription": true,
|
||||
"im_primary_role_id": 1001,
|
||||
"im_role_ids": [
|
||||
1001,
|
||||
1003,
|
||||
17,
|
||||
8,
|
||||
19,
|
||||
9,
|
||||
1100
|
||||
],
|
||||
"image_send_exempt": false,
|
||||
"ins_id": "",
|
||||
"ip_location": "IP属地:广东",
|
||||
"is_activity_user": false,
|
||||
"is_ban": false,
|
||||
"is_block": false,
|
||||
"is_blocked": false,
|
||||
"is_effect_artist": false,
|
||||
"is_gov_media_vip": false,
|
||||
"is_mix_user": true,
|
||||
"is_not_show": false,
|
||||
"is_series_user": false,
|
||||
"is_sharing_profile_user": 0,
|
||||
"is_star": false,
|
||||
"iso_country_code": "",
|
||||
"life_story_block": {
|
||||
"life_story_block": false
|
||||
},
|
||||
"live_commerce": true,
|
||||
"live_status": 0,
|
||||
"max_follower_count": 299824,
|
||||
"message_chat_entry": true,
|
||||
"mix_count": 5,
|
||||
"mplatform_followers_count": 304548,
|
||||
"new_friend_type": 0,
|
||||
"nickname": "老司机摄影器材",
|
||||
"no_recommend_user": true,
|
||||
"original_musician": {
|
||||
"digg_count": 0,
|
||||
"music_count": 0,
|
||||
"music_used_count": 0
|
||||
},
|
||||
"pigeon_daren_status": "",
|
||||
"pigeon_daren_warn_tag": "",
|
||||
"profile_tab_type": 5,
|
||||
"province": "",
|
||||
"public_collects_count": 0,
|
||||
"publish_landing_tab": 3,
|
||||
"r_fans_group_info": {},
|
||||
"recommend_reason_relation": "",
|
||||
"recommend_user_reason_source": 0,
|
||||
"risk_notice_text": "",
|
||||
"room_id": 0,
|
||||
"school_name": "",
|
||||
"sec_uid": "MS4wLjABAAAA85mPkf3FPVNmf_XTn4xpYrqB7kwPf7N7haPEJrRW8CQ",
|
||||
"secret": 0,
|
||||
"series_count": 0,
|
||||
"share_info": {
|
||||
"bool_persist": 1,
|
||||
"share_desc": "长按复制此条消息,打开抖音搜索,查看TA的更多作品。",
|
||||
"share_image_url": {
|
||||
"uri": "tos-cn-p-0015/cf422487c0a841f2aecbfa8baacc154c_1689845400",
|
||||
"url_list": [
|
||||
"https://p6-pc-sign.douyinpic.com/obj/tos-cn-p-0015/cf422487c0a841f2aecbfa8baacc154c_1689845400?x-expires=1690095600&x-signature=LtFiYu1jClndNFonNKdSblz0ewc%3D&from=2480802190",
|
||||
"https://p3-pc-sign.douyinpic.com/obj/tos-cn-p-0015/cf422487c0a841f2aecbfa8baacc154c_1689845400?x-expires=1690095600&x-signature=Rh9XdYMU6cyp4me2FRcoofjHOCs%3D&from=2480802190",
|
||||
"https://p9-pc-sign.douyinpic.com/obj/tos-cn-p-0015/cf422487c0a841f2aecbfa8baacc154c_1689845400?x-expires=1690095600&x-signature=gkR5JLKNVrGNn3FkLpdt%2FSfsLRY%3D&from=2480802190"
|
||||
]
|
||||
},
|
||||
"share_qrcode_url": {
|
||||
"uri": "9ba90004c7f4cd555885",
|
||||
"url_list": [
|
||||
"https://p11.douyinpic.com/obj/9ba90004c7f4cd555885",
|
||||
"https://p3.douyinpic.com/obj/9ba90004c7f4cd555885",
|
||||
"https://p26.douyinpic.com/obj/9ba90004c7f4cd555885"
|
||||
]
|
||||
},
|
||||
"share_title": "快来加入抖音,让你发现最有趣的我!",
|
||||
"share_url": "www.iesdouyin.com/share/user/MS4wLjABAAAA85mPkf3FPVNmf_XTn4xpYrqB7kwPf7N7haPEJrRW8CQ?sec_uid=MS4wLjABAAAA85mPkf3FPVNmf_XTn4xpYrqB7kwPf7N7haPEJrRW8CQ&from_ssr=1&u_code=l1j9bkbd&did=MS4wLjABAAAAtqpCx0hpOERbdSzQdjRZw-wFPxaqdbAzsKDmbJMUI3KWlMGQHC-n6dXAqa-dM2EP&iid=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&with_sec_did=1",
|
||||
"share_weibo_desc": "长按复制此条消息,打开抖音搜索,查看TA的更多作品。"
|
||||
},
|
||||
"short_id": "0",
|
||||
"show_favorite_list": false,
|
||||
"show_subscription": true,
|
||||
"signature": "📷【老司机摄影器材】老司机,不翻车\n📷 深圳二手相机、镜头\n📷 danfanlaosiji03\n📷 二手相机销售、回收、置换、估价\n📷 保修两年\n\n💰支持实体店自提,平台下单",
|
||||
"signature_display_lines": 0,
|
||||
"signature_language": "zh",
|
||||
"special_follow_status": 0,
|
||||
"sync_to_toutiao": 0,
|
||||
"tab_settings": {
|
||||
"enterprise_tab": {
|
||||
"show_tab_settings": true,
|
||||
"show_tab_style": 0,
|
||||
"tab_link": "aweme://lynxview/?enter_from=profile&channel=mp_lynx_tab&bundle=template.js&hide_nav_bar=1&dynamic=1&surl=https%3A%2F%2Flf-dy-sourcecdn-tos.bytegecko.com%2Fobj%2Fbyte-gurd-source%2Faweme%2Fplatform%2Flynx%2Fmp_lynx_tab%2Ftemplate.js&is_editor=0&is_checking=0&loading_bgcolor=00000000&needReloadWithTheme=1&use_bdx=1&trans_status_bar=1&use_gecko_first=1&container_bgcolor=00000000&page_enabled=1&page_priority=1&template_id=0&record_id=0&is_owner=0&sec_to_user_id=MS4wLjABAAAA85mPkf3FPVNmf_XTn4xpYrqB7kwPf7N7haPEJrRW8CQ&to_user_id=101881718376&business_type=0&offline_info_count=1&show_loading=1",
|
||||
"tab_type": 0,
|
||||
"title": "商家"
|
||||
},
|
||||
"private_tab": {
|
||||
"private_tab_style": 1,
|
||||
"show_private_tab": false
|
||||
}
|
||||
},
|
||||
"total_favorited": 2305265,
|
||||
"total_favorited_correction_threshold": -1,
|
||||
"twitter_id": "",
|
||||
"twitter_name": "",
|
||||
"uid": "101881718376",
|
||||
"unique_id": "danfanlaosiji",
|
||||
"urge_detail": {
|
||||
"user_urged": 0
|
||||
},
|
||||
"user_age": -1,
|
||||
"user_not_see": 0,
|
||||
"user_not_show": 1,
|
||||
"verification_type": 0,
|
||||
"video_cover": {},
|
||||
"video_icon": {
|
||||
"height": 720,
|
||||
"uri": "",
|
||||
"url_list": [],
|
||||
"width": 720
|
||||
},
|
||||
"watch_status": false,
|
||||
"white_cover_url": [
|
||||
{
|
||||
"uri": "tos-cn-i-0813/oYCAEmz7fAE3VIuEAeICACYAWFhEICANgyxpXh",
|
||||
"url_list": [
|
||||
"https://p9-pc-sign.douyinpic.com/obj/tos-cn-i-0813/oYCAEmz7fAE3VIuEAeICACYAWFhEICANgyxpXh?x-expires=1690095600&x-signature=NAJ%2FjJEHPlY7HxKa0kE5fk7Cz1Y%3D&from=2480802190",
|
||||
"https://p6-pc-sign.douyinpic.com/obj/tos-cn-i-0813/oYCAEmz7fAE3VIuEAeICACYAWFhEICANgyxpXh?x-expires=1690095600&x-signature=DiKX1ZdzN73ZC4yOaHDeGVVobwg%3D&from=2480802190",
|
||||
"https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-0813/oYCAEmz7fAE3VIuEAeICACYAWFhEICANgyxpXh?x-expires=1690095600&x-signature=L6vVRkoeX3t05kYybFKuh8J67mY%3D&from=2480802190"
|
||||
]
|
||||
},
|
||||
{
|
||||
"uri": "318f1000413827e122102",
|
||||
"url_list": [
|
||||
"https://p9-pc-sign.douyinpic.com/obj/318f1000413827e122102?x-expires=1690095600&x-signature=WtW5ogqxmw4rkpIFT2RZuMnLG18%3D&from=2480802190",
|
||||
"https://p3-pc-sign.douyinpic.com/obj/318f1000413827e122102?x-expires=1690095600&x-signature=2nskyBWTs94oR7UUnPMq4GVSiIc%3D&from=2480802190",
|
||||
"https://p6-pc-sign.douyinpic.com/obj/318f1000413827e122102?x-expires=1690095600&x-signature=WTu2Oj8KsYTPAjDh2GqPTryUF2Y%3D&from=2480802190"
|
||||
]
|
||||
}
|
||||
],
|
||||
"with_commerce_enterprise_tab_entry": false,
|
||||
"with_commerce_entry": true,
|
||||
"with_fusion_shop_entry": true,
|
||||
"with_new_goods": false,
|
||||
"youtube_channel_id": "",
|
||||
"youtube_channel_title": ""
|
||||
}
|
||||
}
|
||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 30 KiB |
@@ -0,0 +1,49 @@
|
||||
# 贡献者守则
|
||||
|
||||
本项目欢迎所有人的贡献。为了保证这个社区的友好和专业的环境,我们制定了以下守则,所有的贡献者和维护者都应当遵守。
|
||||
|
||||
## 我们的承诺
|
||||
|
||||
为了促进一个开放和欢迎的环境,我们承诺让参与这个项目的每个人无论年龄、体型、身体健康状况、种族、性别认同与表达、经验水平、教育程度、社会经济地位、国籍、个人外貌、种族、宗教信仰或者性取向等,都不会感到被歧视。
|
||||
|
||||
## 我们的标准
|
||||
|
||||
以下行为可以帮助我们构建一个友好的环境:
|
||||
|
||||
* 使用友好和包容的语言
|
||||
* 尊重不同的观点和经验
|
||||
* 接纳建设性的批评
|
||||
* 关注对社区最有利的事情
|
||||
* 对其他社区成员表现出同情和善意
|
||||
|
||||
以下行为是不被接受的:
|
||||
|
||||
* 使用侮辱性/贬低性的语言或图像,以及人身攻击
|
||||
* 喷子行为或恶意批评
|
||||
* 公开或私下骚扰他人
|
||||
* 发布他人的私人信息,例如实际地址或电子邮件,未经其明确许可
|
||||
* 其他可能被认为不合适或不专业的行为
|
||||
|
||||
## 我们的责任
|
||||
|
||||
项目维护者有责任解释行为标准,并且应当采取适当和公正的纠正措施回应任何违反这些标准的行为。
|
||||
|
||||
项目维护者有权利和责任删除、修改或拒绝不符合本守则的评论(comments)、提交(commits)、代码、wiki 编辑、问题(issues)和其他贡献,他们也可以因为以下行为封禁一个人的参与,包括但不限于:
|
||||
|
||||
* 有骚扰行为
|
||||
* 发表侮辱性或贬损性的评论
|
||||
* 人身攻击
|
||||
* 发布他人的私人信息
|
||||
* 其他不道德的行为
|
||||
|
||||
## 适用范围
|
||||
|
||||
此行为守则适用于项目空间和公共空间,当个体代表项目或其社区时也同样适用。例如,使用官方电子邮件地址、在官方的社交媒体账号发表的,或在公开的在线或离线事件中担任的代表角色等。项目维护者也可能进一步定义和澄清代表项目行为的规范。
|
||||
|
||||
## 执行
|
||||
|
||||
无论是恶劣的行为公开或私下发生,项目维护者都有权进行调查并采取适当的行动,这可能包括警告、暂时禁止或永久禁止对项目的贡献等。
|
||||
|
||||
## 版本历史
|
||||
|
||||
此行为准则版本基于 [Contributor Covenant](https://www.contributor-covenant.org) 版本 2.1。欢迎在此基础上进行修改和适应。
|
||||
@@ -0,0 +1,5 @@
|
||||
FROM python:3.7-slim-bullseye
|
||||
WORKDIR /app
|
||||
COPY . .
|
||||
RUN pip3 install -r requirements.txt
|
||||
CMD ["python3", "TikTokMulti.py"]
|
||||
+346
@@ -0,0 +1,346 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>Dialog</class>
|
||||
<widget class="QDialog" name="Dialog">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>1111</width>
|
||||
<height>711</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Dialog</string>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true"/>
|
||||
</property>
|
||||
<widget class="QLabel" name="Label_Left">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>230</width>
|
||||
<height>600</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">background-color: #060716;
|
||||
border-bottom-left-radius: 25px;
|
||||
border-top-left-radius: 25px;
|
||||
font: 10pt "微软雅黑";
|
||||
color: #FFFFFF;</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="Label_Right">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>230</x>
|
||||
<y>0</y>
|
||||
<width>851</width>
|
||||
<height>600</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">background-color: rgb(255, 255, 255);
|
||||
border-top-right-radius: 25px;
|
||||
border-bottom-right-radius: 25px;</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="Label_Logo">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>30</x>
|
||||
<y>50</y>
|
||||
<width>161</width>
|
||||
<height>41</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">background: url(:/img/logo-horizontal.svg) no-repeat;</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="Label_Version">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>180</x>
|
||||
<y>90</y>
|
||||
<width>54</width>
|
||||
<height>12</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">color: rgb(255, 255, 255);
|
||||
font: 9pt "華康布丁體";</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>v2.1.1</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="Button_Close">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>1030</x>
|
||||
<y>20</y>
|
||||
<width>21</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">border-radius: 10px;
|
||||
background-color: rgb(255, 81, 53);</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="Button_Max">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>1000</x>
|
||||
<y>20</y>
|
||||
<width>21</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">border-radius: 10px;
|
||||
background-color: #FFC32D;</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="Button_Min">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>970</x>
|
||||
<y>20</y>
|
||||
<width>21</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">border-radius: 10px;
|
||||
background-color: #37C847;</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPlainTextEdit" name="plainTextEdit">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>260</x>
|
||||
<y>90</y>
|
||||
<width>651</width>
|
||||
<height>41</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="autoFillBackground">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">background-color: #292B35;
|
||||
border-radius: 10px;
|
||||
font: 12pt "華康布丁體";
|
||||
color: rgb(255, 255, 255);
|
||||
qproperty-alignment:AlignHCenter;</string>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::StyledPanel</enum>
|
||||
</property>
|
||||
<property name="verticalScrollBarPolicy">
|
||||
<enum>Qt::ScrollBarAsNeeded</enum>
|
||||
</property>
|
||||
<property name="sizeAdjustPolicy">
|
||||
<enum>QAbstractScrollArea::AdjustIgnored</enum>
|
||||
</property>
|
||||
<property name="lineWrapMode">
|
||||
<enum>QPlainTextEdit::WidgetWidth</enum>
|
||||
</property>
|
||||
<property name="plainText">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="backgroundVisible">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="centerOnScroll">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="Button_Go">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>930</x>
|
||||
<y>90</y>
|
||||
<width>121</width>
|
||||
<height>41</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">#Button_Go {
|
||||
border-radius: 10px;
|
||||
font: 19pt "華康布丁體";
|
||||
color: rgb(0, 0, 0);
|
||||
background-color: #B9BAC7;
|
||||
}
|
||||
|
||||
#Button_Go:hover {
|
||||
color:#F72C51;
|
||||
}
|
||||
|
||||
#Button_Go:pressed, QPushButton:checked {
|
||||
background-color: #9d9d9d;
|
||||
}
|
||||
</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>咻咻</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QCheckBox" name="Check_All">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>260</x>
|
||||
<y>140</y>
|
||||
<width>71</width>
|
||||
<height>16</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>全部下载</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="pushButton">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>50</x>
|
||||
<y>390</y>
|
||||
<width>131</width>
|
||||
<height>61</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">border-radius: 25px;
|
||||
font: 16pt "華康布丁體";
|
||||
color: rgb(255, 255, 255);
|
||||
background-color: rgb(22, 23, 34);</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>设置</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="pushButton_2">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>50</x>
|
||||
<y>490</y>
|
||||
<width>131</width>
|
||||
<height>61</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">border-radius: 25px;
|
||||
font: 16pt "華康布丁體";
|
||||
color: rgb(255, 255, 255);
|
||||
background-color: rgb(22, 23, 34);</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>关于</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QCheckBox" name="Check_Cover">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>350</x>
|
||||
<y>140</y>
|
||||
<width>101</width>
|
||||
<height>16</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>全部封面下载</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QCheckBox" name="Check_Music">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>460</x>
|
||||
<y>140</y>
|
||||
<width>101</width>
|
||||
<height>16</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>全部配乐下载</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="Label_Background">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>230</x>
|
||||
<y>0</y>
|
||||
<width>851</width>
|
||||
<height>60</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">background-color: rgb(199, 199, 199);
|
||||
border-top-right-radius: 25px;</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QTextBrowser" name="textBrowser">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>260</x>
|
||||
<y>170</y>
|
||||
<width>791</width>
|
||||
<height>401</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="verticalScrollBarPolicy">
|
||||
<enum>Qt::ScrollBarAlwaysOff</enum>
|
||||
</property>
|
||||
<property name="horizontalScrollBarPolicy">
|
||||
<enum>Qt::ScrollBarAlwaysOff</enum>
|
||||
</property>
|
||||
<property name="lineWrapMode">
|
||||
<enum>QTextEdit::NoWrap</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<zorder>Label_Right</zorder>
|
||||
<zorder>Label_Background</zorder>
|
||||
<zorder>Label_Left</zorder>
|
||||
<zorder>Label_Logo</zorder>
|
||||
<zorder>Label_Version</zorder>
|
||||
<zorder>Button_Close</zorder>
|
||||
<zorder>Button_Max</zorder>
|
||||
<zorder>Button_Min</zorder>
|
||||
<zorder>plainTextEdit</zorder>
|
||||
<zorder>Button_Go</zorder>
|
||||
<zorder>Check_All</zorder>
|
||||
<zorder>pushButton</zorder>
|
||||
<zorder>pushButton_2</zorder>
|
||||
<zorder>Check_Cover</zorder>
|
||||
<zorder>Check_Music</zorder>
|
||||
<zorder>textBrowser</zorder>
|
||||
</widget>
|
||||
<resources>
|
||||
<include location="Resource.qrc"/>
|
||||
</resources>
|
||||
<connections/>
|
||||
</ui>
|
||||
@@ -0,0 +1,9 @@
|
||||
# TKMGUI V2.1.1
|
||||
**Currently, only for the development of the preview version**
|
||||
|
||||
<a target="_blank" href="http://mail.qq.com/cgi-bin/qm_share?t=qm_mailme&email=PFZTVFJPWU5aEU9ZWVh8WlNEUV1VUBJfU1E" style="text-decoration:none;"><img src="http://rescdn.qqmail.com/zh_CN/htmledition/images/function/qm_open/ico_mailme_11.png"/></a>
|
||||
|
||||
[English](README-EN.md) [简体中文](README.md)
|
||||
|
||||

|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
# TKMGUI V2.1.1
|
||||
**目前仅为开发预览版**
|
||||
|
||||
<a target="_blank" href="http://mail.qq.com/cgi-bin/qm_share?t=qm_mailme&email=PFZTVFJPWU5aEU9ZWVh8WlNEUV1VUBJfU1E" style="text-decoration:none;"><img src="http://rescdn.qqmail.com/zh_CN/htmledition/images/function/qm_open/ico_mailme_11.png"/></a>
|
||||
|
||||
[English](README-EN.md) [简体中文](README.md)
|
||||
|
||||

|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
<RCC>
|
||||
<qresource prefix="img">
|
||||
<file>背景.svg</file>
|
||||
<file>logo-horizontal.svg</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 22 KiB |
@@ -0,0 +1 @@
|
||||
|
||||
+648
@@ -0,0 +1,648 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Resource object code
|
||||
#
|
||||
# Created by: The Resource Compiler for PyQt5 (Qt v5.15.2)
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
from PyQt5 import QtCore
|
||||
|
||||
qt_resource_data = b"\
|
||||
\x00\x00\x22\x3e\
|
||||
\x3c\
|
||||
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
|
||||
\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
|
||||
\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
|
||||
\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
|
||||
\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x35\x2e\x30\x2e\x30\x2c\
|
||||
\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
|
||||
\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
|
||||
\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
|
||||
\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
|
||||
\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
|
||||
\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
|
||||
\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
|
||||
\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
|
||||
\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
|
||||
\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
|
||||
\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
|
||||
\x3d\x22\xe5\x9b\xbe\xe5\xb1\x82\x5f\x31\x22\x20\x78\x6d\x6c\x6e\
|
||||
\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\
|
||||
\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\
|
||||
\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\
|
||||
\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\
|
||||
\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\
|
||||
\x22\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\
|
||||
\x74\x68\x3d\x22\x31\x35\x38\x70\x78\x22\x20\x68\x65\x69\x67\x68\
|
||||
\x74\x3d\x22\x33\x34\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
|
||||
\x3d\x22\x30\x20\x30\x20\x31\x35\x38\x20\x33\x34\x22\x20\x65\x6e\
|
||||
\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\
|
||||
\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x31\x35\x38\x20\x33\x34\x22\
|
||||
\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\
|
||||
\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x66\x69\
|
||||
\x6c\x6c\x3d\x22\x23\x30\x30\x46\x41\x46\x30\x22\x20\x64\x3d\x22\
|
||||
\x4d\x31\x31\x2e\x36\x34\x2c\x31\x33\x2e\x34\x33\x34\x76\x2d\x31\
|
||||
\x2e\x33\x31\x31\x63\x2d\x30\x2e\x34\x35\x36\x2d\x30\x2e\x30\x35\
|
||||
\x35\x2d\x30\x2e\x39\x31\x31\x2d\x30\x2e\x30\x39\x31\x2d\x31\x2e\
|
||||
\x33\x38\x35\x2d\x30\x2e\x30\x39\x31\x63\x2d\x35\x2e\x36\x34\x37\
|
||||
\x2c\x30\x2d\x31\x30\x2e\x32\x35\x36\x2c\x34\x2e\x35\x38\x38\x2d\
|
||||
\x31\x30\x2e\x32\x35\x36\x2c\x31\x30\x2e\x32\x35\x31\x0d\x0a\x09\
|
||||
\x63\x30\x2c\x33\x2e\x34\x35\x39\x2c\x31\x2e\x37\x33\x31\x2c\x36\
|
||||
\x2e\x35\x33\x35\x2c\x34\x2e\x33\x37\x32\x2c\x38\x2e\x33\x39\x33\
|
||||
\x63\x2d\x31\x2e\x37\x31\x32\x2d\x31\x2e\x38\x33\x39\x2d\x32\x2e\
|
||||
\x37\x35\x2d\x34\x2e\x32\x37\x39\x2d\x32\x2e\x37\x35\x2d\x36\x2e\
|
||||
\x39\x37\x33\x43\x31\x2e\x36\x33\x39\x2c\x31\x38\x2e\x31\x31\x33\
|
||||
\x2c\x36\x2e\x31\x30\x32\x2c\x31\x33\x2e\x35\x36\x32\x2c\x31\x31\
|
||||
\x2e\x36\x34\x2c\x31\x33\x2e\x34\x33\x34\x7a\x22\x2f\x3e\x0d\x0a\
|
||||
\x3c\x70\x61\x74\x68\x20\x66\x69\x6c\x6c\x3d\x22\x23\x30\x30\x46\
|
||||
\x41\x46\x30\x22\x20\x64\x3d\x22\x4d\x31\x31\x2e\x38\x37\x36\x2c\
|
||||
\x32\x38\x2e\x33\x34\x36\x63\x32\x2e\x35\x31\x34\x2c\x30\x2c\x34\
|
||||
\x2e\x35\x37\x32\x2d\x32\x2e\x30\x30\x34\x2c\x34\x2e\x36\x36\x34\
|
||||
\x2d\x34\x2e\x34\x39\x38\x56\x31\x2e\x35\x34\x35\x68\x34\x2e\x30\
|
||||
\x38\x31\x63\x2d\x30\x2e\x30\x39\x31\x2d\x30\x2e\x34\x35\x35\x2d\
|
||||
\x30\x2e\x31\x32\x37\x2d\x30\x2e\x39\x32\x38\x2d\x30\x2e\x31\x32\
|
||||
\x37\x2d\x31\x2e\x34\x32\x48\x31\x34\x2e\x39\x32\x0d\x0a\x09\x76\
|
||||
\x32\x32\x2e\x33\x30\x33\x63\x2d\x30\x2e\x30\x39\x31\x2c\x32\x2e\
|
||||
\x34\x39\x34\x2d\x32\x2e\x31\x35\x2c\x34\x2e\x34\x39\x38\x2d\x34\
|
||||
\x2e\x36\x36\x34\x2c\x34\x2e\x34\x39\x38\x63\x2d\x30\x2e\x37\x38\
|
||||
\x33\x2c\x30\x2d\x31\x2e\x35\x33\x2d\x30\x2e\x32\x30\x31\x2d\x32\
|
||||
\x2e\x31\x36\x37\x2d\x30\x2e\x35\x34\x37\x43\x38\x2e\x39\x34\x34\
|
||||
\x2c\x32\x37\x2e\x35\x38\x2c\x31\x30\x2e\x33\x32\x38\x2c\x32\x38\
|
||||
\x2e\x33\x34\x36\x2c\x31\x31\x2e\x38\x37\x36\x2c\x32\x38\x2e\x33\
|
||||
\x34\x36\x7a\x22\x2f\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x66\x69\
|
||||
\x6c\x6c\x3d\x22\x23\x30\x30\x46\x41\x46\x30\x22\x20\x64\x3d\x22\
|
||||
\x4d\x32\x38\x2e\x32\x35\x31\x2c\x39\x2e\x31\x31\x39\x56\x37\x2e\
|
||||
\x38\x38\x31\x63\x2d\x31\x2e\x35\x34\x38\x2c\x30\x2d\x33\x2e\x30\
|
||||
\x30\x36\x2d\x30\x2e\x34\x35\x35\x2d\x34\x2e\x32\x32\x36\x2d\x31\
|
||||
\x2e\x32\x35\x36\x43\x32\x35\x2e\x31\x31\x38\x2c\x37\x2e\x38\x36\
|
||||
\x33\x2c\x32\x36\x2e\x35\x39\x34\x2c\x38\x2e\x37\x35\x35\x2c\x32\
|
||||
\x38\x2e\x32\x35\x31\x2c\x39\x2e\x31\x31\x39\x7a\x22\x2f\x3e\x0d\
|
||||
\x0a\x3c\x70\x61\x74\x68\x20\x66\x69\x6c\x6c\x3d\x22\x23\x46\x46\
|
||||
\x30\x30\x35\x30\x22\x20\x64\x3d\x22\x4d\x32\x34\x2e\x30\x34\x35\
|
||||
\x2c\x36\x2e\x36\x32\x35\x63\x2d\x31\x2e\x31\x38\x34\x2d\x31\x2e\
|
||||
\x33\x36\x35\x2d\x31\x2e\x39\x31\x33\x2d\x33\x2e\x31\x33\x31\x2d\
|
||||
\x31\x2e\x39\x31\x33\x2d\x35\x2e\x30\x38\x68\x2d\x31\x2e\x34\x39\
|
||||
\x34\x43\x32\x31\x2e\x30\x33\x39\x2c\x33\x2e\x36\x35\x38\x2c\x32\
|
||||
\x32\x2e\x32\x39\x36\x2c\x35\x2e\x34\x37\x39\x2c\x32\x34\x2e\x30\
|
||||
\x34\x35\x2c\x36\x2e\x36\x32\x35\x7a\x22\x2f\x3e\x0d\x0a\x3c\x70\
|
||||
\x61\x74\x68\x20\x66\x69\x6c\x6c\x3d\x22\x23\x46\x46\x30\x30\x35\
|
||||
\x30\x22\x20\x64\x3d\x22\x4d\x31\x30\x2e\x32\x35\x35\x2c\x31\x37\
|
||||
\x2e\x35\x38\x34\x63\x2d\x32\x2e\x35\x38\x36\x2c\x30\x2d\x34\x2e\
|
||||
\x36\x38\x32\x2c\x32\x2e\x30\x39\x34\x2d\x34\x2e\x36\x38\x32\x2c\
|
||||
\x34\x2e\x36\x38\x63\x30\x2c\x31\x2e\x38\x30\x33\x2c\x31\x2e\x30\
|
||||
\x32\x31\x2c\x33\x2e\x33\x35\x2c\x32\x2e\x35\x31\x34\x2c\x34\x2e\
|
||||
\x31\x33\x33\x0d\x0a\x09\x63\x2d\x30\x2e\x35\x34\x36\x2d\x30\x2e\
|
||||
\x37\x36\x35\x2d\x30\x2e\x38\x39\x33\x2d\x31\x2e\x37\x31\x31\x2d\
|
||||
\x30\x2e\x38\x39\x33\x2d\x32\x2e\x37\x32\x39\x63\x30\x2d\x32\x2e\
|
||||
\x35\x38\x36\x2c\x32\x2e\x30\x39\x35\x2d\x34\x2e\x36\x38\x31\x2c\
|
||||
\x34\x2e\x36\x38\x32\x2d\x34\x2e\x36\x38\x31\x63\x30\x2e\x34\x37\
|
||||
\x34\x2c\x30\x2c\x30\x2e\x39\x34\x37\x2c\x30\x2e\x30\x37\x34\x2c\
|
||||
\x31\x2e\x33\x38\x34\x2c\x30\x2e\x32\x32\x76\x2d\x35\x2e\x36\x38\
|
||||
\x0d\x0a\x09\x63\x2d\x30\x2e\x34\x35\x35\x2d\x30\x2e\x30\x35\x35\
|
||||
\x2d\x30\x2e\x39\x31\x31\x2d\x30\x2e\x30\x39\x31\x2d\x31\x2e\x33\
|
||||
\x38\x34\x2d\x30\x2e\x30\x39\x31\x63\x2d\x30\x2e\x30\x37\x33\x2c\
|
||||
\x30\x2d\x30\x2e\x31\x36\x34\x2c\x30\x2d\x30\x2e\x32\x33\x37\x2c\
|
||||
\x30\x76\x34\x2e\x33\x37\x43\x31\x31\x2e\x32\x30\x32\x2c\x31\x37\
|
||||
\x2e\x36\x35\x38\x2c\x31\x30\x2e\x37\x34\x37\x2c\x31\x37\x2e\x35\
|
||||
\x38\x34\x2c\x31\x30\x2e\x32\x35\x35\x2c\x31\x37\x2e\x35\x38\x34\
|
||||
\x7a\x22\x2f\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x66\x69\x6c\x6c\
|
||||
\x3d\x22\x23\x46\x46\x30\x30\x35\x30\x22\x20\x64\x3d\x22\x4d\x32\
|
||||
\x38\x2e\x32\x35\x32\x2c\x39\x2e\x31\x31\x39\x76\x34\x2e\x33\x33\
|
||||
\x33\x63\x2d\x32\x2e\x38\x39\x36\x2c\x30\x2d\x35\x2e\x35\x35\x36\
|
||||
\x2d\x30\x2e\x39\x32\x38\x2d\x37\x2e\x37\x34\x32\x2d\x32\x2e\x34\
|
||||
\x39\x34\x76\x31\x31\x2e\x33\x30\x36\x63\x30\x2c\x35\x2e\x36\x34\
|
||||
\x36\x2d\x34\x2e\x35\x39\x2c\x31\x30\x2e\x32\x35\x2d\x31\x30\x2e\
|
||||
\x32\x35\x35\x2c\x31\x30\x2e\x32\x35\x0d\x0a\x09\x63\x2d\x32\x2e\
|
||||
\x31\x38\x36\x2c\x30\x2d\x34\x2e\x32\x30\x38\x2d\x30\x2e\x36\x39\
|
||||
\x31\x2d\x35\x2e\x38\x36\x36\x2d\x31\x2e\x38\x35\x35\x63\x31\x2e\
|
||||
\x38\x37\x36\x2c\x32\x2e\x30\x30\x33\x2c\x34\x2e\x35\x33\x36\x2c\
|
||||
\x33\x2e\x32\x37\x37\x2c\x37\x2e\x35\x30\x35\x2c\x33\x2e\x32\x37\
|
||||
\x37\x63\x35\x2e\x36\x34\x37\x2c\x30\x2c\x31\x30\x2e\x32\x35\x36\
|
||||
\x2d\x34\x2e\x35\x38\x38\x2c\x31\x30\x2e\x32\x35\x36\x2d\x31\x30\
|
||||
\x2e\x32\x35\x32\x56\x31\x32\x2e\x33\x37\x38\x0d\x0a\x09\x63\x32\
|
||||
\x2e\x31\x38\x36\x2c\x31\x2e\x35\x36\x36\x2c\x34\x2e\x38\x36\x34\
|
||||
\x2c\x32\x2e\x34\x39\x35\x2c\x37\x2e\x37\x34\x32\x2c\x32\x2e\x34\
|
||||
\x39\x35\x56\x39\x2e\x33\x30\x31\x43\x32\x39\x2e\x33\x32\x37\x2c\
|
||||
\x39\x2e\x32\x38\x33\x2c\x32\x38\x2e\x37\x38\x31\x2c\x39\x2e\x32\
|
||||
\x32\x39\x2c\x32\x38\x2e\x32\x35\x32\x2c\x39\x2e\x31\x31\x39\x7a\
|
||||
\x22\x2f\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x66\x69\x6c\x6c\x3d\
|
||||
\x22\x23\x46\x46\x46\x46\x46\x46\x22\x20\x64\x3d\x22\x4d\x32\x30\
|
||||
\x2e\x35\x30\x39\x2c\x32\x32\x2e\x32\x36\x36\x56\x31\x30\x2e\x39\
|
||||
\x35\x38\x63\x32\x2e\x31\x38\x36\x2c\x31\x2e\x35\x36\x36\x2c\x34\
|
||||
\x2e\x38\x36\x34\x2c\x32\x2e\x34\x39\x34\x2c\x37\x2e\x37\x34\x32\
|
||||
\x2c\x32\x2e\x34\x39\x34\x56\x39\x2e\x31\x32\x63\x2d\x31\x2e\x36\
|
||||
\x37\x36\x2d\x30\x2e\x33\x36\x34\x2d\x33\x2e\x31\x33\x33\x2d\x31\
|
||||
\x2e\x32\x35\x36\x2d\x34\x2e\x32\x32\x37\x2d\x32\x2e\x34\x39\x34\
|
||||
\x0d\x0a\x09\x63\x2d\x31\x2e\x37\x34\x39\x2d\x31\x2e\x31\x32\x39\
|
||||
\x2d\x33\x2e\x30\x30\x35\x2d\x32\x2e\x39\x34\x39\x2d\x33\x2e\x33\
|
||||
\x38\x38\x2d\x35\x2e\x30\x38\x68\x2d\x34\x2e\x30\x38\x56\x32\x33\
|
||||
\x2e\x38\x35\x63\x2d\x30\x2e\x30\x39\x31\x2c\x32\x2e\x34\x39\x34\
|
||||
\x2d\x32\x2e\x31\x35\x2c\x34\x2e\x34\x39\x36\x2d\x34\x2e\x36\x36\
|
||||
\x34\x2c\x34\x2e\x34\x39\x36\x63\x2d\x31\x2e\x35\x36\x36\x2c\x30\
|
||||
\x2d\x32\x2e\x39\x35\x31\x2d\x30\x2e\x37\x36\x35\x2d\x33\x2e\x37\
|
||||
\x38\x39\x2d\x31\x2e\x39\x34\x37\x0d\x0a\x09\x63\x2d\x31\x2e\x34\
|
||||
\x39\x34\x2d\x30\x2e\x37\x38\x33\x2d\x32\x2e\x35\x31\x34\x2d\x32\
|
||||
\x2e\x33\x35\x2d\x32\x2e\x35\x31\x34\x2d\x34\x2e\x31\x33\x33\x63\
|
||||
\x30\x2d\x32\x2e\x35\x38\x36\x2c\x32\x2e\x30\x39\x35\x2d\x34\x2e\
|
||||
\x36\x38\x2c\x34\x2e\x36\x38\x32\x2d\x34\x2e\x36\x38\x63\x30\x2e\
|
||||
\x34\x37\x34\x2c\x30\x2c\x30\x2e\x39\x34\x37\x2c\x30\x2e\x30\x37\
|
||||
\x32\x2c\x31\x2e\x33\x38\x34\x2c\x30\x2e\x32\x31\x39\x76\x2d\x34\
|
||||
\x2e\x33\x37\x0d\x0a\x09\x63\x2d\x35\x2e\x35\x33\x36\x2c\x30\x2e\
|
||||
\x31\x32\x37\x2d\x31\x30\x2c\x34\x2e\x36\x37\x38\x2d\x31\x30\x2c\
|
||||
\x31\x30\x2e\x32\x33\x31\x63\x30\x2c\x32\x2e\x36\x39\x35\x2c\x31\
|
||||
\x2e\x30\x33\x39\x2c\x35\x2e\x31\x35\x32\x2c\x32\x2e\x37\x35\x31\
|
||||
\x2c\x36\x2e\x39\x37\x35\x63\x31\x2e\x36\x35\x38\x2c\x31\x2e\x31\
|
||||
\x36\x34\x2c\x33\x2e\x36\x39\x38\x2c\x31\x2e\x38\x35\x36\x2c\x35\
|
||||
\x2e\x38\x36\x36\x2c\x31\x2e\x38\x35\x36\x0d\x0a\x09\x43\x31\x35\
|
||||
\x2e\x39\x2c\x33\x32\x2e\x35\x31\x36\x2c\x32\x30\x2e\x35\x30\x39\
|
||||
\x2c\x32\x37\x2e\x39\x30\x38\x2c\x32\x30\x2e\x35\x30\x39\x2c\x32\
|
||||
\x32\x2e\x32\x36\x36\x7a\x22\x2f\x3e\x0d\x0a\x3c\x67\x3e\x0d\x0a\
|
||||
\x09\x3c\x70\x61\x74\x68\x20\x66\x69\x6c\x6c\x3d\x22\x23\x46\x46\
|
||||
\x46\x46\x46\x46\x22\x20\x64\x3d\x22\x4d\x34\x34\x2e\x35\x37\x36\
|
||||
\x2c\x31\x35\x2e\x38\x37\x36\x63\x30\x2e\x33\x35\x33\x2d\x30\x2e\
|
||||
\x30\x38\x2c\x30\x2e\x35\x32\x32\x2c\x30\x2e\x30\x36\x34\x2c\x30\
|
||||
\x2e\x35\x30\x36\x2c\x30\x2e\x34\x33\x34\x6c\x2d\x30\x2e\x31\x32\
|
||||
\x2c\x32\x2e\x32\x36\x35\x63\x2d\x30\x2e\x30\x31\x37\x2c\x30\x2e\
|
||||
\x33\x37\x2d\x30\x2e\x32\x30\x31\x2c\x30\x2e\x35\x39\x35\x2d\x30\
|
||||
\x2e\x35\x35\x34\x2c\x30\x2e\x36\x37\x35\x0d\x0a\x09\x09\x6c\x2d\
|
||||
\x31\x2e\x36\x31\x34\x2c\x30\x2e\x34\x30\x39\x76\x35\x2e\x32\x30\
|
||||
\x34\x63\x30\x2c\x30\x2e\x38\x32\x2d\x30\x2e\x30\x38\x39\x2c\x31\
|
||||
\x2e\x34\x35\x35\x2d\x30\x2e\x32\x36\x35\x2c\x31\x2e\x39\x30\x34\
|
||||
\x63\x2d\x30\x2e\x31\x36\x31\x2c\x30\x2e\x34\x34\x39\x2d\x30\x2e\
|
||||
\x34\x36\x36\x2c\x30\x2e\x37\x39\x35\x2d\x30\x2e\x39\x31\x36\x2c\
|
||||
\x31\x2e\x30\x33\x35\x63\x2d\x30\x2e\x37\x32\x33\x2c\x30\x2e\x34\
|
||||
\x31\x38\x2d\x31\x2e\x37\x37\x35\x2c\x30\x2e\x36\x31\x39\x2d\x33\
|
||||
\x2e\x31\x35\x37\x2c\x30\x2e\x36\x30\x34\x0d\x0a\x09\x09\x63\x2d\
|
||||
\x30\x2e\x34\x39\x38\x2c\x30\x2e\x30\x31\x36\x2d\x30\x2e\x37\x36\
|
||||
\x33\x2d\x30\x2e\x31\x36\x32\x2d\x30\x2e\x37\x39\x35\x2d\x30\x2e\
|
||||
\x35\x33\x31\x6c\x2d\x30\x2e\x32\x34\x31\x2d\x32\x2e\x30\x34\x37\
|
||||
\x63\x2d\x30\x2e\x30\x33\x32\x2d\x30\x2e\x33\x37\x2c\x30\x2e\x31\
|
||||
\x33\x37\x2d\x30\x2e\x35\x35\x35\x2c\x30\x2e\x35\x30\x36\x2d\x30\
|
||||
\x2e\x35\x35\x35\x68\x30\x2e\x39\x38\x38\x0d\x0a\x09\x09\x63\x30\
|
||||
\x2e\x33\x30\x35\x2c\x30\x2e\x30\x31\x36\x2c\x30\x2e\x34\x35\x38\
|
||||
\x2d\x30\x2e\x31\x32\x39\x2c\x30\x2e\x34\x35\x38\x2d\x30\x2e\x34\
|
||||
\x33\x34\x76\x2d\x34\x2e\x33\x33\x38\x6c\x2d\x31\x2e\x36\x36\x32\
|
||||
\x2c\x30\x2e\x34\x31\x63\x2d\x30\x2e\x33\x35\x34\x2c\x30\x2e\x30\
|
||||
\x38\x2d\x30\x2e\x35\x33\x39\x2d\x30\x2e\x30\x36\x34\x2d\x30\x2e\
|
||||
\x35\x35\x34\x2d\x30\x2e\x34\x33\x34\x6c\x2d\x30\x2e\x32\x34\x31\
|
||||
\x2d\x32\x2e\x33\x33\x37\x0d\x0a\x09\x09\x63\x2d\x30\x2e\x30\x31\
|
||||
\x36\x2d\x30\x2e\x33\x37\x2c\x30\x2e\x31\x36\x31\x2d\x30\x2e\x35\
|
||||
\x39\x35\x2c\x30\x2e\x35\x33\x2d\x30\x2e\x36\x37\x35\x6c\x31\x2e\
|
||||
\x39\x32\x37\x2d\x30\x2e\x33\x38\x36\x76\x2d\x33\x2e\x36\x36\x32\
|
||||
\x68\x2d\x32\x2e\x31\x36\x38\x63\x2d\x30\x2e\x33\x37\x2c\x30\x2d\
|
||||
\x30\x2e\x35\x32\x32\x2d\x30\x2e\x31\x37\x37\x2d\x30\x2e\x34\x35\
|
||||
\x38\x2d\x30\x2e\x35\x33\x6c\x30\x2e\x34\x31\x2d\x32\x2e\x31\x36\
|
||||
\x38\x0d\x0a\x09\x09\x63\x30\x2e\x30\x36\x34\x2d\x30\x2e\x33\x35\
|
||||
\x33\x2c\x30\x2e\x32\x38\x31\x2d\x30\x2e\x35\x33\x2c\x30\x2e\x36\
|
||||
\x35\x2d\x30\x2e\x35\x33\x68\x31\x2e\x35\x36\x36\x56\x36\x2e\x32\
|
||||
\x38\x37\x63\x30\x2d\x30\x2e\x33\x37\x2c\x30\x2e\x31\x37\x37\x2d\
|
||||
\x30\x2e\x35\x33\x2c\x30\x2e\x35\x33\x2d\x30\x2e\x34\x38\x32\x6c\
|
||||
\x32\x2e\x33\x36\x31\x2c\x30\x2e\x34\x35\x38\x63\x30\x2e\x33\x35\
|
||||
\x33\x2c\x30\x2e\x30\x34\x38\x2c\x30\x2e\x35\x33\x2c\x30\x2e\x32\
|
||||
\x35\x37\x2c\x30\x2e\x35\x33\x2c\x30\x2e\x36\x32\x36\x76\x33\x2e\
|
||||
\x33\x30\x31\x0d\x0a\x09\x09\x68\x32\x2e\x30\x39\x36\x63\x30\x2e\
|
||||
\x33\x36\x39\x2c\x30\x2c\x30\x2e\x35\x32\x31\x2c\x30\x2e\x31\x37\
|
||||
\x37\x2c\x30\x2e\x34\x35\x38\x2c\x30\x2e\x35\x33\x6c\x2d\x30\x2e\
|
||||
\x34\x31\x2c\x32\x2e\x31\x36\x38\x63\x2d\x30\x2e\x30\x36\x34\x2c\
|
||||
\x30\x2e\x33\x35\x34\x2d\x30\x2e\x32\x38\x31\x2c\x30\x2e\x35\x33\
|
||||
\x2d\x30\x2e\x36\x35\x2c\x30\x2e\x35\x33\x68\x2d\x31\x2e\x34\x39\
|
||||
\x34\x76\x32\x2e\x38\x39\x31\x4c\x34\x34\x2e\x35\x37\x36\x2c\x31\
|
||||
\x35\x2e\x38\x37\x36\x7a\x20\x4d\x35\x31\x2e\x34\x39\x31\x2c\x31\
|
||||
\x35\x2e\x32\x35\x0d\x0a\x09\x09\x63\x30\x2e\x32\x37\x33\x2c\x30\
|
||||
\x2e\x32\x32\x35\x2c\x30\x2e\x32\x38\x39\x2c\x30\x2e\x34\x36\x36\
|
||||
\x2c\x30\x2e\x30\x34\x38\x2c\x30\x2e\x37\x32\x33\x6c\x2d\x31\x2e\
|
||||
\x35\x36\x35\x2c\x31\x2e\x36\x38\x38\x63\x2d\x30\x2e\x32\x34\x31\
|
||||
\x2c\x30\x2e\x32\x35\x36\x2d\x30\x2e\x34\x37\x35\x2c\x30\x2e\x32\
|
||||
\x38\x31\x2d\x30\x2e\x36\x39\x39\x2c\x30\x2e\x30\x37\x32\x63\x2d\
|
||||
\x30\x2e\x33\x35\x34\x2d\x30\x2e\x34\x31\x38\x2d\x31\x2e\x33\x38\
|
||||
\x32\x2d\x31\x2e\x31\x31\x37\x2d\x33\x2e\x30\x38\x34\x2d\x32\x2e\
|
||||
\x30\x39\x37\x0d\x0a\x09\x09\x63\x2d\x30\x2e\x34\x31\x38\x2d\x30\
|
||||
\x2e\x32\x35\x37\x2d\x30\x2e\x34\x39\x2d\x30\x2e\x34\x39\x38\x2d\
|
||||
\x30\x2e\x32\x31\x37\x2d\x30\x2e\x37\x32\x33\x6c\x31\x2e\x36\x36\
|
||||
\x32\x2d\x31\x2e\x34\x34\x36\x63\x30\x2e\x32\x37\x33\x2d\x30\x2e\
|
||||
\x32\x32\x35\x2c\x30\x2e\x36\x31\x2d\x30\x2e\x32\x33\x32\x2c\x31\
|
||||
\x2e\x30\x31\x33\x2d\x30\x2e\x30\x32\x34\x43\x34\x39\x2e\x38\x38\
|
||||
\x35\x2c\x31\x34\x2e\x30\x35\x34\x2c\x35\x30\x2e\x38\x33\x32\x2c\
|
||||
\x31\x34\x2e\x36\x35\x36\x2c\x35\x31\x2e\x34\x39\x31\x2c\x31\x35\
|
||||
\x2e\x32\x35\x7a\x0d\x0a\x09\x09\x20\x4d\x35\x38\x2e\x39\x31\x32\
|
||||
\x2c\x31\x38\x2e\x39\x36\x31\x76\x32\x2e\x32\x31\x37\x63\x30\x2c\
|
||||
\x30\x2e\x33\x36\x39\x2d\x30\x2e\x31\x38\x35\x2c\x30\x2e\x35\x38\
|
||||
\x36\x2d\x30\x2e\x35\x35\x34\x2c\x30\x2e\x36\x35\x6c\x2d\x31\x2e\
|
||||
\x39\x32\x38\x2c\x30\x2e\x33\x33\x37\x76\x35\x2e\x38\x38\x63\x30\
|
||||
\x2c\x30\x2e\x33\x36\x39\x2d\x30\x2e\x31\x37\x37\x2c\x30\x2e\x35\
|
||||
\x32\x39\x2d\x30\x2e\x35\x33\x2c\x30\x2e\x34\x38\x6c\x2d\x32\x2e\
|
||||
\x34\x30\x39\x2d\x30\x2e\x34\x35\x37\x0d\x0a\x09\x09\x63\x2d\x30\
|
||||
\x2e\x33\x35\x34\x2d\x30\x2e\x30\x34\x39\x2d\x30\x2e\x35\x33\x2d\
|
||||
\x30\x2e\x32\x35\x38\x2d\x30\x2e\x35\x33\x2d\x30\x2e\x36\x32\x37\
|
||||
\x76\x2d\x34\x2e\x36\x39\x37\x6c\x2d\x36\x2e\x35\x30\x36\x2c\x31\
|
||||
\x2e\x31\x33\x32\x63\x2d\x30\x2e\x33\x35\x34\x2c\x30\x2e\x30\x34\
|
||||
\x38\x2d\x30\x2e\x35\x33\x2d\x30\x2e\x31\x31\x32\x2d\x30\x2e\x35\
|
||||
\x33\x2d\x30\x2e\x34\x38\x31\x6c\x2d\x30\x2e\x30\x34\x38\x2d\x32\
|
||||
\x2e\x33\x31\x33\x0d\x0a\x09\x09\x63\x30\x2d\x30\x2e\x33\x37\x2c\
|
||||
\x30\x2e\x31\x38\x35\x2d\x30\x2e\x35\x37\x39\x2c\x30\x2e\x35\x35\
|
||||
\x34\x2d\x30\x2e\x36\x32\x36\x6c\x36\x2e\x35\x32\x39\x2d\x31\x2e\
|
||||
\x30\x38\x35\x56\x36\x2e\x32\x36\x33\x63\x30\x2d\x30\x2e\x33\x36\
|
||||
\x39\x2c\x30\x2e\x31\x37\x37\x2d\x30\x2e\x35\x33\x2c\x30\x2e\x35\
|
||||
\x33\x2d\x30\x2e\x34\x38\x32\x4c\x35\x35\x2e\x39\x2c\x36\x2e\x32\
|
||||
\x33\x39\x63\x30\x2e\x33\x35\x34\x2c\x30\x2e\x30\x34\x38\x2c\x30\
|
||||
\x2e\x35\x33\x2c\x30\x2e\x32\x35\x37\x2c\x30\x2e\x35\x33\x2c\x30\
|
||||
\x2e\x36\x32\x36\x0d\x0a\x09\x09\x76\x31\x31\x2e\x39\x35\x31\x6c\
|
||||
\x31\x2e\x39\x35\x32\x2d\x30\x2e\x33\x33\x38\x43\x35\x38\x2e\x37\
|
||||
\x33\x35\x2c\x31\x38\x2e\x34\x33\x31\x2c\x35\x38\x2e\x39\x31\x32\
|
||||
\x2c\x31\x38\x2e\x35\x39\x32\x2c\x35\x38\x2e\x39\x31\x32\x2c\x31\
|
||||
\x38\x2e\x39\x36\x31\x7a\x20\x4d\x35\x32\x2e\x34\x35\x35\x2c\x39\
|
||||
\x2e\x33\x39\x35\x63\x30\x2e\x32\x35\x37\x2c\x30\x2e\x32\x34\x31\
|
||||
\x2c\x30\x2e\x32\x35\x37\x2c\x30\x2e\x34\x39\x2c\x30\x2c\x30\x2e\
|
||||
\x37\x34\x37\x6c\x2d\x31\x2e\x35\x36\x36\x2c\x31\x2e\x34\x39\x34\
|
||||
\x0d\x0a\x09\x09\x63\x2d\x30\x2e\x32\x35\x37\x2c\x30\x2e\x32\x35\
|
||||
\x37\x2d\x30\x2e\x35\x30\x36\x2c\x30\x2e\x32\x37\x33\x2d\x30\x2e\
|
||||
\x37\x34\x37\x2c\x30\x2e\x30\x34\x38\x63\x2d\x30\x2e\x33\x36\x39\
|
||||
\x2d\x30\x2e\x34\x39\x38\x2d\x31\x2e\x33\x31\x36\x2d\x31\x2e\x32\
|
||||
\x30\x35\x2d\x32\x2e\x38\x34\x33\x2d\x32\x2e\x31\x32\x63\x2d\x30\
|
||||
\x2e\x33\x38\x35\x2d\x30\x2e\x32\x35\x37\x2d\x30\x2e\x34\x33\x34\
|
||||
\x2d\x30\x2e\x34\x39\x38\x2d\x30\x2e\x31\x34\x35\x2d\x30\x2e\x37\
|
||||
\x32\x33\x6c\x31\x2e\x36\x36\x32\x2d\x31\x2e\x33\x30\x31\x0d\x0a\
|
||||
\x09\x09\x63\x30\x2e\x32\x39\x2d\x30\x2e\x32\x32\x35\x2c\x30\x2e\
|
||||
\x36\x32\x37\x2d\x30\x2e\x32\x32\x35\x2c\x31\x2e\x30\x31\x33\x2c\
|
||||
\x30\x43\x35\x31\x2e\x30\x31\x38\x2c\x38\x2e\x31\x36\x36\x2c\x35\
|
||||
\x31\x2e\x38\x39\x33\x2c\x38\x2e\x37\x38\x35\x2c\x35\x32\x2e\x34\
|
||||
\x35\x35\x2c\x39\x2e\x33\x39\x35\x7a\x22\x2f\x3e\x0d\x0a\x09\x3c\
|
||||
\x70\x61\x74\x68\x20\x66\x69\x6c\x6c\x3d\x22\x23\x46\x46\x46\x46\
|
||||
\x46\x46\x22\x20\x64\x3d\x22\x4d\x37\x38\x2e\x34\x37\x37\x2c\x31\
|
||||
\x33\x2e\x32\x35\x68\x34\x2e\x31\x36\x39\x63\x30\x2e\x33\x36\x39\
|
||||
\x2c\x30\x2c\x30\x2e\x35\x32\x31\x2c\x30\x2e\x31\x37\x37\x2c\x30\
|
||||
\x2e\x34\x35\x38\x2c\x30\x2e\x35\x33\x6c\x2d\x30\x2e\x34\x31\x2c\
|
||||
\x32\x2e\x31\x34\x35\x63\x2d\x30\x2e\x30\x36\x34\x2c\x30\x2e\x33\
|
||||
\x35\x34\x2d\x30\x2e\x32\x38\x31\x2c\x30\x2e\x35\x33\x2d\x30\x2e\
|
||||
\x36\x35\x2c\x30\x2e\x35\x33\x48\x36\x31\x2e\x32\x30\x31\x0d\x0a\
|
||||
\x09\x09\x63\x2d\x30\x2e\x33\x37\x2c\x30\x2d\x30\x2e\x35\x32\x32\
|
||||
\x2d\x30\x2e\x31\x37\x36\x2d\x30\x2e\x34\x35\x38\x2d\x30\x2e\x35\
|
||||
\x33\x6c\x30\x2e\x34\x31\x2d\x32\x2e\x31\x34\x35\x63\x30\x2e\x30\
|
||||
\x36\x33\x2d\x30\x2e\x33\x35\x33\x2c\x30\x2e\x32\x38\x2d\x30\x2e\
|
||||
\x35\x33\x2c\x30\x2e\x36\x35\x2d\x30\x2e\x35\x33\x68\x33\x2e\x38\
|
||||
\x37\x39\x6c\x2d\x30\x2e\x32\x31\x37\x2d\x30\x2e\x35\x35\x34\x0d\
|
||||
\x0a\x09\x09\x63\x2d\x30\x2e\x33\x36\x39\x2d\x30\x2e\x39\x37\x39\
|
||||
\x2d\x30\x2e\x30\x34\x2d\x31\x2e\x35\x35\x38\x2c\x30\x2e\x39\x38\
|
||||
\x38\x2d\x31\x2e\x37\x33\x34\x6c\x30\x2e\x37\x32\x33\x2d\x30\x2e\
|
||||
\x31\x34\x35\x68\x2d\x34\x2e\x36\x30\x33\x63\x2d\x30\x2e\x33\x36\
|
||||
\x39\x2c\x30\x2d\x30\x2e\x35\x32\x31\x2d\x30\x2e\x31\x37\x36\x2d\
|
||||
\x30\x2e\x34\x35\x37\x2d\x30\x2e\x35\x33\x6c\x30\x2e\x34\x30\x39\
|
||||
\x2d\x32\x2e\x31\x34\x35\x0d\x0a\x09\x09\x63\x30\x2e\x30\x36\x34\
|
||||
\x2d\x30\x2e\x33\x35\x33\x2c\x30\x2e\x32\x38\x31\x2d\x30\x2e\x35\
|
||||
\x33\x2c\x30\x2e\x36\x35\x2d\x30\x2e\x35\x33\x68\x36\x2e\x39\x33\
|
||||
\x39\x6c\x2d\x30\x2e\x34\x38\x32\x2d\x31\x2e\x31\x33\x33\x63\x2d\
|
||||
\x30\x2e\x31\x32\x38\x2d\x30\x2e\x33\x33\x37\x2d\x30\x2e\x30\x30\
|
||||
\x38\x2d\x30\x2e\x35\x30\x36\x2c\x30\x2e\x33\x36\x32\x2d\x30\x2e\
|
||||
\x35\x30\x36\x6c\x32\x2e\x39\x36\x33\x2d\x30\x2e\x30\x32\x34\x0d\
|
||||
\x0a\x09\x09\x63\x30\x2e\x33\x36\x39\x2c\x30\x2c\x30\x2e\x36\x32\
|
||||
\x37\x2c\x30\x2e\x31\x37\x37\x2c\x30\x2e\x37\x37\x31\x2c\x30\x2e\
|
||||
\x35\x33\x6c\x30\x2e\x35\x30\x36\x2c\x31\x2e\x31\x33\x33\x68\x37\
|
||||
\x2e\x33\x32\x34\x63\x30\x2e\x33\x37\x2c\x30\x2c\x30\x2e\x35\x32\
|
||||
\x32\x2c\x30\x2e\x31\x37\x37\x2c\x30\x2e\x34\x35\x38\x2c\x30\x2e\
|
||||
\x35\x33\x6c\x2d\x30\x2e\x34\x30\x39\x2c\x32\x2e\x31\x34\x35\x63\
|
||||
\x2d\x30\x2e\x30\x36\x34\x2c\x30\x2e\x33\x35\x34\x2d\x30\x2e\x32\
|
||||
\x38\x31\x2c\x30\x2e\x35\x33\x2d\x30\x2e\x36\x35\x2c\x30\x2e\x35\
|
||||
\x33\x0d\x0a\x09\x09\x48\x37\x37\x2e\x32\x6c\x30\x2e\x36\x37\x35\
|
||||
\x2c\x30\x2e\x31\x34\x35\x63\x31\x2e\x30\x32\x37\x2c\x30\x2e\x31\
|
||||
\x39\x32\x2c\x31\x2e\x33\x32\x35\x2c\x30\x2e\x37\x36\x33\x2c\x30\
|
||||
\x2e\x38\x39\x31\x2c\x31\x2e\x37\x31\x4c\x37\x38\x2e\x34\x37\x37\
|
||||
\x2c\x31\x33\x2e\x32\x35\x7a\x20\x4d\x36\x34\x2e\x38\x36\x33\x2c\
|
||||
\x32\x38\x2e\x36\x32\x33\x63\x2d\x30\x2e\x38\x38\x34\x2c\x30\x2d\
|
||||
\x31\x2e\x33\x32\x35\x2d\x30\x2e\x34\x34\x32\x2d\x31\x2e\x33\x32\
|
||||
\x35\x2d\x31\x2e\x33\x32\x36\x76\x2d\x38\x2e\x33\x33\x36\x0d\x0a\
|
||||
\x09\x09\x63\x30\x2d\x30\x2e\x38\x38\x34\x2c\x30\x2e\x34\x34\x31\
|
||||
\x2d\x31\x2e\x33\x32\x36\x2c\x31\x2e\x33\x32\x35\x2d\x31\x2e\x33\
|
||||
\x32\x36\x68\x31\x34\x2e\x34\x30\x39\x63\x30\x2e\x38\x38\x33\x2c\
|
||||
\x30\x2c\x31\x2e\x33\x32\x35\x2c\x30\x2e\x34\x34\x32\x2c\x31\x2e\
|
||||
\x33\x32\x35\x2c\x31\x2e\x33\x32\x36\x76\x38\x2e\x33\x33\x36\x63\
|
||||
\x30\x2c\x30\x2e\x38\x38\x34\x2d\x30\x2e\x34\x34\x32\x2c\x31\x2e\
|
||||
\x33\x32\x36\x2d\x31\x2e\x33\x32\x35\x2c\x31\x2e\x33\x32\x36\x48\
|
||||
\x36\x34\x2e\x38\x36\x33\x7a\x0d\x0a\x09\x09\x20\x4d\x37\x36\x2e\
|
||||
\x37\x36\x37\x2c\x32\x31\x2e\x32\x39\x38\x63\x30\x2d\x30\x2e\x34\
|
||||
\x36\x36\x2d\x30\x2e\x32\x33\x33\x2d\x30\x2e\x36\x39\x38\x2d\x30\
|
||||
\x2e\x36\x39\x39\x2d\x30\x2e\x36\x39\x38\x68\x2d\x38\x2e\x31\x39\
|
||||
\x32\x63\x2d\x30\x2e\x34\x36\x36\x2c\x30\x2d\x30\x2e\x36\x39\x38\
|
||||
\x2c\x30\x2e\x32\x33\x32\x2d\x30\x2e\x36\x39\x38\x2c\x30\x2e\x36\
|
||||
\x39\x38\x76\x30\x2e\x34\x35\x38\x68\x39\x2e\x35\x39\x56\x32\x31\
|
||||
\x2e\x32\x39\x38\x7a\x20\x4d\x36\x37\x2e\x31\x37\x37\x2c\x32\x34\
|
||||
\x2e\x39\x38\x34\x0d\x0a\x09\x09\x63\x30\x2c\x30\x2e\x34\x36\x36\
|
||||
\x2c\x30\x2e\x32\x33\x32\x2c\x30\x2e\x36\x39\x39\x2c\x30\x2e\x36\
|
||||
\x39\x38\x2c\x30\x2e\x36\x39\x39\x68\x38\x2e\x31\x39\x32\x63\x30\
|
||||
\x2e\x34\x36\x36\x2c\x30\x2c\x30\x2e\x36\x39\x39\x2d\x30\x2e\x32\
|
||||
\x33\x33\x2c\x30\x2e\x36\x39\x39\x2d\x30\x2e\x36\x39\x39\x56\x32\
|
||||
\x34\x2e\x34\x33\x68\x2d\x39\x2e\x35\x39\x56\x32\x34\x2e\x39\x38\
|
||||
\x34\x7a\x20\x4d\x37\x35\x2e\x32\x34\x38\x2c\x31\x30\x2e\x38\x31\
|
||||
\x36\x68\x2d\x36\x2e\x35\x37\x37\x6c\x30\x2e\x39\x38\x37\x2c\x32\
|
||||
\x2e\x34\x33\x34\x0d\x0a\x09\x09\x68\x34\x2e\x38\x36\x37\x4c\x37\
|
||||
\x35\x2e\x32\x34\x38\x2c\x31\x30\x2e\x38\x31\x36\x7a\x22\x2f\x3e\
|
||||
\x0d\x0a\x09\x3c\x70\x61\x74\x68\x20\x66\x69\x6c\x6c\x3d\x22\x23\
|
||||
\x46\x46\x46\x46\x46\x46\x22\x20\x64\x3d\x22\x4d\x31\x30\x37\x2e\
|
||||
\x31\x30\x32\x2c\x31\x35\x2e\x36\x33\x36\x6c\x2d\x30\x2e\x34\x35\
|
||||
\x38\x2c\x32\x2e\x34\x38\x31\x63\x2d\x30\x2e\x30\x34\x38\x2c\x30\
|
||||
\x2e\x33\x35\x34\x2d\x30\x2e\x32\x35\x37\x2c\x30\x2e\x35\x33\x2d\
|
||||
\x30\x2e\x36\x32\x36\x2c\x30\x2e\x35\x33\x48\x39\x35\x2e\x37\x35\
|
||||
\x33\x0d\x0a\x09\x09\x63\x2d\x31\x2e\x31\x35\x36\x2c\x31\x2e\x38\
|
||||
\x2d\x32\x2e\x33\x35\x34\x2c\x33\x2e\x33\x37\x33\x2d\x33\x2e\x35\
|
||||
\x39\x2c\x34\x2e\x37\x32\x33\x63\x2d\x30\x2e\x33\x30\x36\x2c\x30\
|
||||
\x2e\x33\x35\x33\x2d\x30\x2e\x32\x33\x33\x2c\x30\x2e\x35\x32\x32\
|
||||
\x2c\x30\x2e\x32\x31\x37\x2c\x30\x2e\x35\x30\x36\x6c\x37\x2e\x38\
|
||||
\x35\x34\x2d\x30\x2e\x34\x33\x34\x6c\x2d\x31\x2e\x38\x37\x39\x2d\
|
||||
\x32\x2e\x36\x32\x36\x0d\x0a\x09\x09\x63\x2d\x30\x2e\x32\x30\x39\
|
||||
\x2d\x30\x2e\x32\x38\x39\x2d\x30\x2e\x31\x33\x37\x2d\x30\x2e\x34\
|
||||
\x37\x35\x2c\x30\x2e\x32\x31\x37\x2d\x30\x2e\x35\x35\x35\x6c\x32\
|
||||
\x2e\x35\x35\x34\x2d\x30\x2e\x37\x32\x33\x63\x30\x2e\x33\x35\x34\
|
||||
\x2d\x30\x2e\x30\x38\x2c\x30\x2e\x36\x34\x33\x2c\x30\x2e\x30\x31\
|
||||
\x36\x2c\x30\x2e\x38\x36\x37\x2c\x30\x2e\x32\x38\x39\x63\x30\x2e\
|
||||
\x35\x36\x33\x2c\x30\x2e\x36\x34\x33\x2c\x31\x2e\x33\x33\x33\x2c\
|
||||
\x31\x2e\x36\x39\x35\x2c\x32\x2e\x33\x31\x33\x2c\x33\x2e\x31\x35\
|
||||
\x36\x0d\x0a\x09\x09\x63\x30\x2e\x39\x37\x39\x2c\x31\x2e\x34\x34\
|
||||
\x35\x2c\x31\x2e\x36\x36\x32\x2c\x32\x2e\x35\x38\x36\x2c\x32\x2e\
|
||||
\x30\x34\x38\x2c\x33\x2e\x34\x32\x32\x63\x30\x2e\x31\x34\x35\x2c\
|
||||
\x30\x2e\x32\x38\x39\x2c\x30\x2e\x30\x34\x38\x2c\x30\x2e\x34\x38\
|
||||
\x39\x2d\x30\x2e\x32\x38\x39\x2c\x30\x2e\x36\x30\x32\x6c\x2d\x32\
|
||||
\x2e\x36\x39\x38\x2c\x30\x2e\x38\x39\x32\x63\x2d\x30\x2e\x33\x33\
|
||||
\x38\x2c\x30\x2e\x31\x31\x32\x2d\x30\x2e\x35\x39\x35\x2c\x30\x2d\
|
||||
\x30\x2e\x37\x37\x31\x2d\x30\x2e\x33\x33\x37\x0d\x0a\x09\x09\x6c\
|
||||
\x2d\x30\x2e\x34\x33\x34\x2d\x30\x2e\x39\x31\x36\x63\x2d\x38\x2e\
|
||||
\x30\x31\x36\x2c\x30\x2e\x36\x31\x2d\x31\x32\x2e\x34\x39\x37\x2c\
|
||||
\x30\x2e\x39\x38\x38\x2d\x31\x33\x2e\x34\x34\x34\x2c\x31\x2e\x31\
|
||||
\x33\x33\x6c\x2d\x30\x2e\x39\x34\x2c\x30\x2e\x32\x34\x63\x2d\x30\
|
||||
\x2e\x33\x35\x34\x2c\x30\x2e\x30\x38\x2d\x30\x2e\x35\x36\x33\x2d\
|
||||
\x30\x2e\x30\x35\x36\x2d\x30\x2e\x36\x32\x36\x2d\x30\x2e\x34\x30\
|
||||
\x39\x6c\x2d\x30\x2e\x35\x37\x38\x2d\x32\x2e\x35\x33\x0d\x0a\x09\
|
||||
\x09\x63\x2d\x30\x2e\x30\x36\x34\x2d\x30\x2e\x33\x35\x33\x2c\x30\
|
||||
\x2e\x30\x34\x2d\x30\x2e\x36\x32\x36\x2c\x30\x2e\x33\x31\x33\x2d\
|
||||
\x30\x2e\x38\x31\x38\x63\x2d\x30\x2e\x30\x34\x38\x2c\x30\x2e\x31\
|
||||
\x36\x2c\x30\x2e\x33\x30\x36\x2d\x30\x2e\x31\x36\x2c\x31\x2e\x30\
|
||||
\x36\x31\x2d\x30\x2e\x39\x36\x35\x63\x30\x2e\x33\x33\x37\x2d\x30\
|
||||
\x2e\x33\x33\x36\x2c\x30\x2e\x38\x33\x35\x2d\x30\x2e\x39\x34\x37\
|
||||
\x2c\x31\x2e\x34\x39\x34\x2d\x31\x2e\x38\x33\x6c\x31\x2e\x38\x33\
|
||||
\x31\x2d\x32\x2e\x38\x31\x39\x68\x2d\x35\x2e\x37\x38\x33\x0d\x0a\
|
||||
\x09\x09\x63\x2d\x30\x2e\x33\x36\x39\x2c\x30\x2d\x30\x2e\x35\x32\
|
||||
\x39\x2d\x30\x2e\x31\x37\x37\x2d\x30\x2e\x34\x38\x31\x2d\x30\x2e\
|
||||
\x35\x33\x6c\x30\x2e\x34\x35\x38\x2d\x32\x2e\x34\x38\x31\x63\x30\
|
||||
\x2e\x30\x34\x38\x2d\x30\x2e\x33\x35\x34\x2c\x30\x2e\x32\x35\x37\
|
||||
\x2d\x30\x2e\x35\x33\x2c\x30\x2e\x36\x32\x36\x2d\x30\x2e\x35\x33\
|
||||
\x68\x38\x2e\x30\x34\x38\x76\x2d\x32\x2e\x37\x39\x35\x68\x2d\x36\
|
||||
\x2e\x37\x39\x35\x0d\x0a\x09\x09\x63\x2d\x30\x2e\x33\x36\x39\x2c\
|
||||
\x30\x2d\x30\x2e\x35\x33\x2d\x30\x2e\x31\x37\x37\x2d\x30\x2e\x34\
|
||||
\x38\x31\x2d\x30\x2e\x35\x33\x6c\x30\x2e\x34\x33\x34\x2d\x32\x2e\
|
||||
\x34\x35\x38\x63\x30\x2e\x30\x34\x38\x2d\x30\x2e\x33\x35\x33\x2c\
|
||||
\x30\x2e\x32\x36\x35\x2d\x30\x2e\x35\x33\x2c\x30\x2e\x36\x35\x2d\
|
||||
\x30\x2e\x35\x33\x68\x36\x2e\x31\x39\x32\x76\x2d\x32\x2e\x35\x33\
|
||||
\x63\x30\x2d\x30\x2e\x33\x36\x39\x2c\x30\x2e\x31\x37\x37\x2d\x30\
|
||||
\x2e\x35\x33\x2c\x30\x2e\x35\x33\x2d\x30\x2e\x34\x38\x32\x0d\x0a\
|
||||
\x09\x09\x6c\x32\x2e\x36\x37\x34\x2c\x30\x2e\x34\x35\x38\x63\x30\
|
||||
\x2e\x33\x35\x34\x2c\x30\x2e\x30\x34\x38\x2c\x30\x2e\x35\x33\x2c\
|
||||
\x30\x2e\x32\x35\x37\x2c\x30\x2e\x35\x33\x2c\x30\x2e\x36\x32\x36\
|
||||
\x76\x31\x2e\x39\x32\x37\x68\x37\x2e\x30\x33\x36\x63\x30\x2e\x33\
|
||||
\x36\x39\x2c\x30\x2c\x30\x2e\x35\x32\x39\x2c\x30\x2e\x31\x37\x37\
|
||||
\x2c\x30\x2e\x34\x38\x31\x2c\x30\x2e\x35\x33\x6c\x2d\x30\x2e\x34\
|
||||
\x35\x38\x2c\x32\x2e\x34\x35\x38\x0d\x0a\x09\x09\x63\x2d\x30\x2e\
|
||||
\x30\x34\x38\x2c\x30\x2e\x33\x35\x34\x2d\x30\x2e\x32\x35\x37\x2c\
|
||||
\x30\x2e\x35\x33\x2d\x30\x2e\x36\x32\x36\x2c\x30\x2e\x35\x33\x68\
|
||||
\x2d\x36\x2e\x34\x33\x34\x76\x32\x2e\x37\x39\x35\x68\x38\x2e\x37\
|
||||
\x34\x36\x43\x31\x30\x36\x2e\x39\x38\x39\x2c\x31\x35\x2e\x31\x30\
|
||||
\x35\x2c\x31\x30\x37\x2e\x31\x34\x39\x2c\x31\x35\x2e\x32\x38\x32\
|
||||
\x2c\x31\x30\x37\x2e\x31\x30\x32\x2c\x31\x35\x2e\x36\x33\x36\x7a\
|
||||
\x22\x2f\x3e\x0d\x0a\x09\x3c\x70\x61\x74\x68\x20\x66\x69\x6c\x6c\
|
||||
\x3d\x22\x23\x46\x46\x46\x46\x46\x46\x22\x20\x64\x3d\x22\x4d\x31\
|
||||
\x31\x35\x2e\x31\x39\x37\x2c\x31\x31\x2e\x33\x37\x31\x63\x30\x2e\
|
||||
\x33\x36\x39\x2c\x30\x2c\x30\x2e\x37\x30\x37\x2c\x30\x2e\x31\x30\
|
||||
\x35\x2c\x31\x2e\x30\x31\x32\x2c\x30\x2e\x33\x31\x33\x6c\x31\x2e\
|
||||
\x33\x30\x32\x2c\x30\x2e\x38\x39\x32\x63\x30\x2e\x33\x30\x35\x2c\
|
||||
\x30\x2e\x32\x30\x39\x2c\x30\x2e\x34\x32\x35\x2c\x30\x2e\x35\x30\
|
||||
\x36\x2c\x30\x2e\x33\x36\x31\x2c\x30\x2e\x38\x39\x31\x0d\x0a\x09\
|
||||
\x09\x63\x2d\x30\x2e\x33\x37\x2c\x32\x2e\x35\x30\x36\x2d\x31\x2e\
|
||||
\x31\x35\x36\x2c\x35\x2e\x30\x30\x34\x2d\x32\x2e\x33\x36\x31\x2c\
|
||||
\x37\x2e\x34\x39\x34\x63\x2d\x31\x2e\x31\x38\x39\x2c\x32\x2e\x34\
|
||||
\x37\x33\x2d\x32\x2e\x34\x39\x38\x2c\x34\x2e\x32\x35\x36\x2d\x33\
|
||||
\x2e\x39\x32\x38\x2c\x35\x2e\x33\x34\x39\x63\x2d\x30\x2e\x32\x35\
|
||||
\x37\x2c\x30\x2e\x32\x30\x38\x2d\x30\x2e\x34\x39\x38\x2c\x30\x2e\
|
||||
\x31\x37\x37\x2d\x30\x2e\x37\x32\x33\x2d\x30\x2e\x30\x39\x37\x6c\
|
||||
\x2d\x31\x2e\x37\x33\x34\x2d\x32\x2e\x31\x39\x32\x0d\x0a\x09\x09\
|
||||
\x63\x2d\x30\x2e\x32\x32\x36\x2d\x30\x2e\x32\x37\x32\x2d\x30\x2e\
|
||||
\x32\x30\x31\x2d\x30\x2e\x35\x32\x32\x2c\x30\x2e\x30\x37\x32\x2d\
|
||||
\x30\x2e\x37\x34\x37\x63\x32\x2e\x30\x38\x38\x2d\x31\x2e\x34\x31\
|
||||
\x33\x2c\x33\x2e\x35\x36\x35\x2d\x33\x2e\x38\x36\x33\x2c\x34\x2e\
|
||||
\x34\x33\x33\x2d\x37\x2e\x33\x34\x39\x63\x30\x2e\x31\x36\x31\x2d\
|
||||
\x30\x2e\x35\x39\x34\x2c\x30\x2e\x30\x30\x39\x2d\x30\x2e\x38\x39\
|
||||
\x32\x2d\x30\x2e\x34\x35\x37\x2d\x30\x2e\x38\x39\x32\x68\x2d\x33\
|
||||
\x2e\x33\x35\x0d\x0a\x09\x09\x63\x2d\x30\x2e\x33\x36\x39\x2c\x30\
|
||||
\x2d\x30\x2e\x35\x33\x2d\x30\x2e\x31\x37\x37\x2d\x30\x2e\x34\x38\
|
||||
\x31\x2d\x30\x2e\x35\x33\x6c\x30\x2e\x34\x35\x37\x2d\x32\x2e\x34\
|
||||
\x38\x31\x63\x30\x2e\x30\x34\x39\x2d\x30\x2e\x33\x35\x33\x2c\x30\
|
||||
\x2e\x32\x35\x37\x2d\x30\x2e\x35\x33\x2c\x30\x2e\x36\x32\x37\x2d\
|
||||
\x30\x2e\x35\x33\x4c\x31\x31\x35\x2e\x31\x39\x37\x2c\x31\x31\x2e\
|
||||
\x33\x37\x31\x7a\x20\x4d\x31\x32\x36\x2e\x38\x31\x31\x2c\x31\x30\
|
||||
\x2e\x31\x39\x0d\x0a\x09\x09\x63\x30\x2e\x32\x30\x39\x2d\x30\x2e\
|
||||
\x32\x37\x33\x2c\x30\x2e\x34\x34\x32\x2d\x30\x2e\x32\x38\x31\x2c\
|
||||
\x30\x2e\x36\x39\x39\x2d\x30\x2e\x30\x32\x34\x6c\x31\x2e\x39\x37\
|
||||
\x36\x2c\x32\x63\x30\x2e\x32\x35\x37\x2c\x30\x2e\x32\x35\x37\x2c\
|
||||
\x30\x2e\x32\x34\x31\x2c\x30\x2e\x35\x33\x2d\x30\x2e\x30\x34\x38\
|
||||
\x2c\x30\x2e\x38\x31\x39\x63\x2d\x31\x2e\x34\x33\x2c\x31\x2e\x33\
|
||||
\x39\x37\x2d\x33\x2e\x30\x32\x31\x2c\x32\x2e\x37\x36\x33\x2d\x34\
|
||||
\x2e\x37\x37\x31\x2c\x34\x2e\x30\x39\x36\x0d\x0a\x09\x09\x63\x31\
|
||||
\x2e\x38\x36\x32\x2c\x32\x2e\x38\x34\x33\x2c\x34\x2e\x30\x38\x37\
|
||||
\x2c\x34\x2e\x38\x32\x37\x2c\x36\x2e\x36\x37\x34\x2c\x35\x2e\x39\
|
||||
\x35\x32\x63\x30\x2e\x33\x35\x33\x2c\x30\x2e\x31\x34\x35\x2c\x30\
|
||||
\x2e\x34\x30\x31\x2c\x30\x2e\x33\x33\x37\x2c\x30\x2e\x31\x34\x35\
|
||||
\x2c\x30\x2e\x35\x37\x38\x4c\x31\x32\x39\x2e\x31\x2c\x32\x35\x2e\
|
||||
\x39\x63\x2d\x30\x2e\x32\x35\x37\x2c\x30\x2e\x32\x34\x2d\x30\x2e\
|
||||
\x35\x33\x38\x2c\x30\x2e\x32\x36\x35\x2d\x30\x2e\x38\x34\x33\x2c\
|
||||
\x30\x2e\x30\x37\x32\x0d\x0a\x09\x09\x63\x2d\x32\x2e\x32\x34\x39\
|
||||
\x2d\x31\x2e\x31\x37\x33\x2d\x34\x2e\x32\x39\x37\x2d\x33\x2e\x34\
|
||||
\x31\x34\x2d\x36\x2e\x31\x34\x35\x2d\x36\x2e\x37\x32\x33\x76\x35\
|
||||
\x2e\x30\x31\x32\x63\x30\x2c\x30\x2e\x39\x39\x36\x2d\x30\x2e\x31\
|
||||
\x30\x34\x2c\x31\x2e\x37\x36\x37\x2d\x30\x2e\x33\x31\x33\x2c\x32\
|
||||
\x2e\x33\x31\x33\x63\x2d\x30\x2e\x32\x30\x38\x2c\x30\x2e\x35\x34\
|
||||
\x36\x2d\x30\x2e\x35\x37\x38\x2c\x30\x2e\x39\x37\x32\x2d\x31\x2e\
|
||||
\x31\x30\x37\x2c\x31\x2e\x32\x37\x37\x0d\x0a\x09\x09\x63\x2d\x30\
|
||||
\x2e\x39\x33\x33\x2c\x30\x2e\x35\x32\x39\x2d\x32\x2e\x32\x35\x38\
|
||||
\x2c\x30\x2e\x37\x38\x37\x2d\x33\x2e\x39\x37\x36\x2c\x30\x2e\x37\
|
||||
\x37\x31\x63\x2d\x30\x2e\x34\x38\x32\x2c\x30\x2e\x30\x31\x36\x2d\
|
||||
\x30\x2e\x37\x35\x36\x2d\x30\x2e\x31\x35\x33\x2d\x30\x2e\x38\x31\
|
||||
\x39\x2d\x30\x2e\x35\x30\x36\x6c\x2d\x30\x2e\x36\x30\x33\x2d\x32\
|
||||
\x2e\x38\x32\x63\x2d\x30\x2e\x30\x36\x34\x2d\x30\x2e\x33\x35\x33\
|
||||
\x2c\x30\x2e\x30\x38\x2d\x30\x2e\x35\x32\x39\x2c\x30\x2e\x34\x33\
|
||||
\x34\x2d\x30\x2e\x35\x32\x39\x0d\x0a\x09\x09\x63\x30\x2e\x31\x37\
|
||||
\x37\x2c\x30\x2e\x30\x31\x36\x2c\x30\x2e\x38\x36\x37\x2c\x30\x2e\
|
||||
\x30\x32\x33\x2c\x32\x2e\x30\x37\x32\x2c\x30\x2e\x30\x32\x33\x63\
|
||||
\x30\x2e\x33\x38\x36\x2c\x30\x2c\x30\x2e\x35\x37\x38\x2d\x30\x2e\
|
||||
\x31\x38\x34\x2c\x30\x2e\x35\x37\x38\x2d\x30\x2e\x35\x35\x34\x56\
|
||||
\x36\x2e\x32\x38\x37\x63\x30\x2d\x30\x2e\x33\x37\x2c\x30\x2e\x31\
|
||||
\x37\x37\x2d\x30\x2e\x35\x33\x2c\x30\x2e\x35\x33\x2d\x30\x2e\x34\
|
||||
\x38\x32\x6c\x32\x2e\x36\x37\x34\x2c\x30\x2e\x34\x35\x38\x0d\x0a\
|
||||
\x09\x09\x63\x30\x2e\x33\x35\x34\x2c\x30\x2e\x30\x34\x38\x2c\x30\
|
||||
\x2e\x35\x33\x2c\x30\x2e\x32\x35\x37\x2c\x30\x2e\x35\x33\x2c\x30\
|
||||
\x2e\x36\x32\x36\x76\x34\x2e\x37\x39\x35\x63\x30\x2e\x32\x34\x31\
|
||||
\x2c\x30\x2e\x37\x35\x35\x2c\x30\x2e\x35\x37\x2c\x31\x2e\x36\x31\
|
||||
\x34\x2c\x30\x2e\x39\x38\x38\x2c\x32\x2e\x35\x37\x38\x43\x31\x32\
|
||||
\x34\x2e\x37\x33\x39\x2c\x31\x32\x2e\x37\x33\x36\x2c\x31\x32\x35\
|
||||
\x2e\x39\x37\x36\x2c\x31\x31\x2e\x33\x37\x39\x2c\x31\x32\x36\x2e\
|
||||
\x38\x31\x31\x2c\x31\x30\x2e\x31\x39\x7a\x22\x2f\x3e\x0d\x0a\x09\
|
||||
\x3c\x70\x61\x74\x68\x20\x66\x69\x6c\x6c\x3d\x22\x23\x46\x46\x46\
|
||||
\x46\x46\x46\x22\x20\x64\x3d\x22\x4d\x31\x34\x30\x2e\x38\x35\x38\
|
||||
\x2c\x36\x2e\x35\x35\x32\x63\x30\x2e\x33\x30\x35\x2d\x30\x2e\x31\
|
||||
\x34\x35\x2c\x30\x2e\x35\x36\x32\x2d\x30\x2e\x30\x37\x32\x2c\x30\
|
||||
\x2e\x37\x37\x31\x2c\x30\x2e\x32\x31\x37\x6c\x31\x2e\x34\x39\x34\
|
||||
\x2c\x32\x2e\x31\x39\x33\x63\x30\x2e\x32\x30\x39\x2c\x30\x2e\x32\
|
||||
\x38\x39\x2c\x30\x2e\x31\x36\x2c\x30\x2e\x34\x38\x32\x2d\x30\x2e\
|
||||
\x31\x34\x35\x2c\x30\x2e\x35\x37\x38\x0d\x0a\x09\x09\x63\x2d\x30\
|
||||
\x2e\x39\x36\x34\x2c\x30\x2e\x33\x37\x2d\x32\x2e\x33\x36\x39\x2c\
|
||||
\x30\x2e\x37\x36\x33\x2d\x34\x2e\x32\x31\x37\x2c\x31\x2e\x31\x38\
|
||||
\x31\x63\x2d\x30\x2e\x36\x31\x2c\x30\x2e\x31\x32\x39\x2d\x30\x2e\
|
||||
\x39\x31\x35\x2c\x30\x2e\x34\x32\x36\x2d\x30\x2e\x39\x31\x35\x2c\
|
||||
\x30\x2e\x38\x39\x32\x76\x32\x2e\x30\x39\x36\x68\x34\x2e\x39\x31\
|
||||
\x35\x63\x30\x2e\x33\x36\x39\x2c\x30\x2c\x30\x2e\x35\x32\x31\x2c\
|
||||
\x30\x2e\x31\x37\x37\x2c\x30\x2e\x34\x35\x38\x2c\x30\x2e\x35\x33\
|
||||
\x0d\x0a\x09\x09\x6c\x2d\x30\x2e\x34\x31\x2c\x32\x2e\x33\x31\x33\
|
||||
\x63\x2d\x30\x2e\x30\x36\x34\x2c\x30\x2e\x33\x35\x34\x2d\x30\x2e\
|
||||
\x32\x38\x31\x2c\x30\x2e\x35\x33\x2d\x30\x2e\x36\x35\x2c\x30\x2e\
|
||||
\x35\x33\x68\x2d\x34\x2e\x33\x31\x33\x76\x33\x2e\x36\x31\x34\x63\
|
||||
\x30\x2c\x30\x2e\x34\x36\x37\x2c\x30\x2e\x32\x32\x35\x2c\x30\x2e\
|
||||
\x36\x35\x38\x2c\x30\x2e\x36\x37\x35\x2c\x30\x2e\x35\x37\x38\x6c\
|
||||
\x34\x2e\x32\x34\x2d\x30\x2e\x37\x37\x31\x0d\x0a\x09\x09\x63\x30\
|
||||
\x2e\x33\x35\x34\x2d\x30\x2e\x30\x36\x33\x2c\x30\x2e\x34\x39\x38\
|
||||
\x2c\x30\x2e\x30\x38\x31\x2c\x30\x2e\x34\x33\x34\x2c\x30\x2e\x34\
|
||||
\x33\x35\x6c\x2d\x30\x2e\x34\x38\x31\x2c\x32\x2e\x34\x33\x34\x63\
|
||||
\x2d\x30\x2e\x30\x36\x34\x2c\x30\x2e\x33\x35\x33\x2d\x30\x2e\x33\
|
||||
\x34\x36\x2c\x30\x2e\x35\x37\x38\x2d\x30\x2e\x38\x34\x34\x2c\x30\
|
||||
\x2e\x36\x37\x35\x63\x2d\x32\x2e\x32\x39\x37\x2c\x30\x2e\x34\x38\
|
||||
\x31\x2d\x34\x2e\x30\x32\x33\x2c\x30\x2e\x38\x37\x35\x2d\x35\x2e\
|
||||
\x31\x38\x31\x2c\x31\x2e\x31\x38\x0d\x0a\x09\x09\x63\x2d\x31\x2e\
|
||||
\x31\x35\x36\x2c\x30\x2e\x32\x38\x39\x2d\x31\x2e\x38\x35\x34\x2c\
|
||||
\x30\x2e\x35\x30\x36\x2d\x32\x2e\x30\x39\x36\x2c\x30\x2e\x36\x35\
|
||||
\x63\x2d\x30\x2e\x32\x32\x36\x2c\x30\x2e\x31\x31\x33\x2d\x30\x2e\
|
||||
\x33\x37\x2d\x30\x2e\x30\x30\x38\x2d\x30\x2e\x34\x33\x34\x2d\x30\
|
||||
\x2e\x33\x36\x31\x6c\x2d\x30\x2e\x35\x35\x35\x2d\x33\x2e\x30\x31\
|
||||
\x32\x63\x2d\x30\x2e\x30\x36\x34\x2d\x30\x2e\x33\x35\x33\x2c\x30\
|
||||
\x2e\x30\x34\x39\x2d\x30\x2e\x36\x35\x38\x2c\x30\x2e\x33\x33\x38\
|
||||
\x2d\x30\x2e\x39\x31\x35\x0d\x0a\x09\x09\x63\x30\x2e\x32\x32\x35\
|
||||
\x2c\x30\x2e\x30\x39\x37\x2c\x30\x2e\x33\x33\x37\x2d\x30\x2e\x32\
|
||||
\x34\x31\x2c\x30\x2e\x33\x33\x37\x2d\x31\x2e\x30\x31\x33\x56\x39\
|
||||
\x2e\x38\x35\x33\x63\x30\x2d\x30\x2e\x38\x33\x35\x2c\x30\x2e\x34\
|
||||
\x37\x34\x2d\x31\x2e\x33\x35\x37\x2c\x31\x2e\x34\x32\x32\x2d\x31\
|
||||
\x2e\x35\x36\x36\x43\x31\x33\x37\x2e\x34\x36\x39\x2c\x37\x2e\x39\
|
||||
\x30\x31\x2c\x31\x33\x39\x2e\x31\x38\x38\x2c\x37\x2e\x33\x32\x33\
|
||||
\x2c\x31\x34\x30\x2e\x38\x35\x38\x2c\x36\x2e\x35\x35\x32\x7a\x0d\
|
||||
\x0a\x09\x09\x20\x4d\x31\x35\x33\x2e\x33\x33\x39\x2c\x37\x2e\x33\
|
||||
\x34\x37\x63\x30\x2e\x38\x38\x34\x2c\x30\x2c\x31\x2e\x33\x32\x35\
|
||||
\x2c\x30\x2e\x34\x34\x32\x2c\x31\x2e\x33\x32\x35\x2c\x31\x2e\x33\
|
||||
\x32\x35\x56\x32\x31\x2e\x34\x39\x63\x30\x2c\x31\x2e\x36\x35\x34\
|
||||
\x2d\x30\x2e\x34\x31\x38\x2c\x32\x2e\x37\x33\x39\x2d\x31\x2e\x32\
|
||||
\x35\x33\x2c\x33\x2e\x32\x35\x33\x63\x2d\x30\x2e\x37\x37\x31\x2c\
|
||||
\x30\x2e\x34\x38\x31\x2d\x31\x2e\x37\x37\x34\x2c\x30\x2e\x37\x32\
|
||||
\x34\x2d\x33\x2e\x30\x31\x32\x2c\x30\x2e\x37\x32\x34\x0d\x0a\x09\
|
||||
\x09\x63\x2d\x30\x2e\x34\x38\x31\x2c\x30\x2d\x30\x2e\x37\x36\x33\
|
||||
\x2d\x30\x2e\x31\x37\x38\x2d\x30\x2e\x38\x34\x33\x2d\x30\x2e\x35\
|
||||
\x33\x31\x6c\x2d\x30\x2e\x35\x37\x38\x2d\x32\x2e\x36\x32\x36\x63\
|
||||
\x2d\x30\x2e\x30\x38\x31\x2d\x30\x2e\x33\x35\x33\x2c\x30\x2e\x30\
|
||||
\x35\x36\x2d\x30\x2e\x35\x32\x31\x2c\x30\x2e\x34\x30\x39\x2d\x30\
|
||||
\x2e\x35\x30\x36\x63\x2d\x30\x2e\x30\x38\x2c\x30\x2c\x30\x2e\x33\
|
||||
\x35\x34\x2c\x30\x2c\x31\x2e\x33\x30\x31\x2c\x30\x0d\x0a\x09\x09\
|
||||
\x63\x30\x2e\x32\x38\x39\x2c\x30\x2c\x30\x2e\x34\x33\x34\x2d\x30\
|
||||
\x2e\x31\x34\x35\x2c\x30\x2e\x34\x33\x34\x2d\x30\x2e\x34\x33\x34\
|
||||
\x76\x2d\x39\x2e\x38\x35\x34\x63\x30\x2d\x30\x2e\x34\x36\x36\x2d\
|
||||
\x30\x2e\x32\x33\x32\x2d\x30\x2e\x36\x39\x39\x2d\x30\x2e\x36\x39\
|
||||
\x38\x2d\x30\x2e\x36\x39\x39\x68\x2d\x31\x2e\x37\x38\x33\x63\x2d\
|
||||
\x30\x2e\x34\x36\x36\x2c\x30\x2d\x30\x2e\x36\x39\x38\x2c\x30\x2e\
|
||||
\x32\x33\x33\x2d\x30\x2e\x36\x39\x38\x2c\x30\x2e\x36\x39\x39\x56\
|
||||
\x32\x38\x2e\x30\x32\x0d\x0a\x09\x09\x63\x30\x2c\x30\x2e\x33\x37\
|
||||
\x2d\x30\x2e\x31\x37\x38\x2c\x30\x2e\x35\x33\x31\x2d\x30\x2e\x35\
|
||||
\x33\x2c\x30\x2e\x34\x38\x32\x6c\x2d\x32\x2e\x34\x38\x31\x2d\x30\
|
||||
\x2e\x34\x35\x37\x63\x2d\x30\x2e\x33\x35\x34\x2d\x30\x2e\x30\x34\
|
||||
\x39\x2d\x30\x2e\x35\x33\x2d\x30\x2e\x32\x35\x38\x2d\x30\x2e\x35\
|
||||
\x33\x2d\x30\x2e\x36\x32\x37\x56\x38\x2e\x36\x37\x32\x63\x30\x2d\
|
||||
\x30\x2e\x38\x38\x33\x2c\x30\x2e\x34\x34\x31\x2d\x31\x2e\x33\x32\
|
||||
\x35\x2c\x31\x2e\x33\x32\x35\x2d\x31\x2e\x33\x32\x35\x48\x31\x35\
|
||||
\x33\x2e\x33\x33\x39\x7a\x22\x0d\x0a\x09\x09\x2f\x3e\x0d\x0a\x3c\
|
||||
\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
|
||||
\x00\x00\x02\x17\
|
||||
\x00\
|
||||
\x00\x07\x01\x78\x9c\xe5\x55\xcd\x8a\xdb\x30\x10\x7e\x95\x41\xb9\
|
||||
\xec\x82\x63\xcb\x3f\xb2\xa2\x10\x07\xb6\x21\x39\xa5\xf4\xd0\x5b\
|
||||
\x2f\xc5\xbb\x56\x6c\xb3\x8e\x1d\x6c\x25\xce\x3e\x44\xe9\xa9\xb7\
|
||||
\xbe\x5e\xa1\x8f\xb1\x23\x39\xbb\x4d\x42\x02\x66\x61\x0f\x4b\x65\
|
||||
\xf4\x33\x9a\x6f\x46\xf3\x7d\x12\x78\xd2\xec\x52\xd8\xaf\x8b\xb2\
|
||||
\x89\x48\xa6\xd4\x66\xec\x38\x6d\xdb\xda\xad\x6f\x57\x75\xea\x78\
|
||||
\x94\x52\x07\x11\xa4\x83\x8c\xf7\x45\x5e\x3e\x5e\x02\xba\x42\x08\
|
||||
\xc7\x78\x09\xb4\x79\xa2\xb2\x88\x08\x4a\x09\x64\x32\x4f\x33\x15\
|
||||
\x91\x50\x1b\xbb\x5c\xb6\x9f\xaa\x7d\x44\x28\x50\x40\x37\x98\xdd\
|
||||
\x55\x5e\x14\x11\x29\xab\x52\x92\xe9\x24\x91\xab\x66\x3a\xa9\xe5\
|
||||
\x83\x82\x3c\x89\xc8\x26\x56\xd9\x77\xc4\xe8\x18\x02\x4f\x66\xbc\
|
||||
\x9a\xde\x99\x4e\x9c\x2e\x3e\x85\x6a\x13\x3f\xe4\x0a\x03\x5c\x02\
|
||||
\xaa\x8e\xcb\x66\x55\xd5\xeb\x88\x98\x65\x11\x2b\x79\x83\x25\xdc\
|
||||
\x02\xd4\x95\xea\x8c\x80\x51\xf0\x29\xbd\x25\x87\xc3\xbb\xa2\x06\
|
||||
\x0b\xd3\xc8\xdb\xd3\xf5\xae\x7c\x1d\x37\x8f\x86\xf2\x7d\x3a\xd4\
|
||||
\xeb\x17\x5d\xda\x2c\x57\x5a\x98\x6d\x23\xc1\xe8\x3b\xce\x6a\xb9\
|
||||
\xc2\xd2\x0e\xd2\x20\x67\x74\xe1\xa8\x83\x34\x73\x3d\x47\x64\x5b\
|
||||
\x17\x37\x83\x43\x2a\xac\x62\x3a\xd1\x70\x93\xff\xef\xcf\xdf\x7f\
|
||||
\x7e\xfc\xea\xd2\x0f\xeb\x6d\x21\x23\x22\x77\xb2\xac\x92\x84\x40\
|
||||
\xa3\x9e\xb4\xad\x5d\xe3\xc1\x9c\xe9\xef\x2a\x5f\xef\x84\xb0\x4b\
|
||||
\x19\x78\x42\x13\x3e\x96\x0a\x8f\xfb\x4c\x2d\x36\xa2\x4b\xcf\xfd\
|
||||
\x37\xd3\x65\xd7\xd1\xfe\x06\x86\xfc\xdb\xee\xcb\x35\xd7\xd5\x23\
|
||||
\x96\xd9\xfe\x88\xb9\x21\x13\x82\xfb\xbe\xe0\x34\x94\x43\xd7\x3f\
|
||||
\xcb\x17\x08\x5b\x1c\x35\x8e\xd9\x6d\x7a\xd2\x98\x3e\xed\x55\xc6\
|
||||
\x59\xb5\xbe\xcf\x4b\x99\xc0\xd7\x2c\xde\xc8\x3e\x72\x06\xf3\xbb\
|
||||
\xf9\xa2\x27\xbb\x5e\xd5\x5c\x90\xda\xa3\x4b\x7c\x5d\x2f\x53\x38\
|
||||
\x33\x86\x1d\x0a\x18\x09\x6e\xfb\xae\x45\x71\x11\xa0\xf8\xa1\x45\
|
||||
\x67\x7a\x1f\x37\x0e\x00\x44\x2f\x75\xe0\xe1\x46\x5e\x79\x7e\xd9\
|
||||
\xc5\x45\x0f\x76\x0b\x81\xdf\xdd\x15\x76\x1c\xf8\x59\xf5\xc1\x31\
|
||||
\x5b\xdf\x66\xd8\x03\x71\xd2\xc2\x0b\xfc\xb8\x85\xd0\x19\xb7\x5c\
|
||||
\x9b\x71\x60\x76\xe0\x5b\x26\x18\xb9\xe8\x1d\xc3\xc5\xb8\xa8\xc1\
|
||||
\xe1\x03\x43\x08\x18\x17\x37\x38\x3e\x33\x41\x58\x4e\xe7\x32\xf9\
|
||||
\xde\x83\xb0\xfb\xdf\x31\xf6\x3e\x02\x63\x27\x3d\xeb\xf8\x67\x9b\
|
||||
\x3e\x03\xf1\x7a\xec\xab\
|
||||
"
|
||||
|
||||
qt_resource_name = b"\
|
||||
\x00\x03\
|
||||
\x00\x00\x70\x37\
|
||||
\x00\x69\
|
||||
\x00\x6d\x00\x67\
|
||||
\x00\x13\
|
||||
\x0a\x25\xf2\x27\
|
||||
\x00\x6c\
|
||||
\x00\x6f\x00\x67\x00\x6f\x00\x2d\x00\x68\x00\x6f\x00\x72\x00\x69\x00\x7a\x00\x6f\x00\x6e\x00\x74\x00\x61\x00\x6c\x00\x2e\x00\x73\
|
||||
\x00\x76\x00\x67\
|
||||
\x00\x06\
|
||||
\x03\x32\x4a\x27\
|
||||
\x80\xcc\
|
||||
\x66\x6f\x00\x2e\x00\x73\x00\x76\x00\x67\
|
||||
"
|
||||
|
||||
qt_resource_struct_v1 = b"\
|
||||
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
|
||||
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x02\
|
||||
\x00\x00\x00\x38\x00\x01\x00\x00\x00\x01\x00\x00\x22\x42\
|
||||
\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
|
||||
"
|
||||
|
||||
qt_resource_struct_v2 = b"\
|
||||
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
|
||||
\x00\x00\x00\x00\x00\x00\x00\x00\
|
||||
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x02\
|
||||
\x00\x00\x00\x00\x00\x00\x00\x00\
|
||||
\x00\x00\x00\x38\x00\x01\x00\x00\x00\x01\x00\x00\x22\x42\
|
||||
\x00\x00\x01\x7e\x9b\x06\x48\x80\
|
||||
\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
|
||||
\x00\x00\x01\x7e\x9b\x58\x78\xfc\
|
||||
"
|
||||
|
||||
qt_version = [int(v) for v in QtCore.qVersion().split('.')]
|
||||
if qt_version < [5, 8, 0]:
|
||||
rcc_version = 1
|
||||
qt_resource_struct = qt_resource_struct_v1
|
||||
else:
|
||||
rcc_version = 2
|
||||
qt_resource_struct = qt_resource_struct_v2
|
||||
|
||||
def qInitResources():
|
||||
QtCore.qRegisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)
|
||||
|
||||
def qCleanupResources():
|
||||
QtCore.qUnregisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)
|
||||
|
||||
qInitResources()
|
||||
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2021 JohnserfSeed
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
+324
@@ -0,0 +1,324 @@
|
||||

|
||||
|
||||
<h1 align="center">✨ TikTok Watermark-Free Video Downloader ✨</h1>
|
||||
<div align="center">
|
||||
|
||||
[简体中文](README.md) | English
|
||||
|
||||
[](https://github.com/Johnserf-Seed/TikTokDownload/blob/main/LICENSE)
|
||||

|
||||

|
||||
[](https://github.com/BeyondDimension/SteamTools/search?l=c%23)
|
||||
[](https://github.com/Johnserf-Seed/TikTokDownload)
|
||||

|
||||
|
||||
[](https://github.com/Johnserf-Seed/TikTokDownload)
|
||||
[](https://github.com/Johnserf-Seed/TikTokDownload)
|
||||
[](https://github.com/Johnserf-Seed/TikTokDownload)
|
||||
[](https://github.com/Johnserf-Seed/TikTokDownload)
|
||||
|
||||
[](https://www.jsdelivr.com/package/gh/Johnserf-Seed/TikTokDownload)
|
||||
[](https://hits.seeyoufarm.com)
|
||||
[](https://discord.gg/q3hA8qQZbG)
|
||||
[](https://www.patreon.com/TikTokDownload713)
|
||||
</div>
|
||||
|
||||
## 🚀 Environmental Preparation/Environment
|
||||
|
||||
> [](https://aka.ms/terminal)
|
||||
>
|
||||
> The old console doesn't adapt well; using Windows Terminal is recommended.
|
||||
>
|
||||
> [](https://www.python.org/ftp/python/3.11.1/python-3.11.1-amd64.exe)
|
||||
>
|
||||
> Unexpected errors might arise with versions below Python3.11.1.
|
||||
>
|
||||
> [](https://github.com/Johnserf-Seed/TikTokDownload/releases)
|
||||
>
|
||||
> Download the release version. It gets repackaged after every commit.
|
||||
|
||||
<details><summary> ⚙ Windows Terminal Settings (Must-read) </summary>
|
||||
|
||||

|
||||
|
||||
</details>
|
||||
|
||||
## 🧰 Features
|
||||
|
||||
- DouYin API Information:
|
||||
- ✅ Detailed user information.
|
||||
- ✅ Download published content.
|
||||
- ✅ Download favorite content.
|
||||
- ✅ Download liked content.
|
||||
- ✅ Download picture sets.
|
||||
- ✅ Download cover images of the content.
|
||||
- ✅ Download content description.
|
||||
- ✅ Download original sound.
|
||||
- ✅ Extract live stream links.
|
||||
- ⌛ Download content from following.
|
||||
- ⌛ Download content from friends.
|
||||
- ⌛ Download recommended content.
|
||||
- ❌ Download collection content.
|
||||
- ❌ Extract comments.
|
||||
|
||||
- Asynchronous Downloads:
|
||||
- ✅ Download and process multiple content simultaneously to enhance efficiency.
|
||||
- ✅ Adjust asynchronous threads to reduce system pressure and reduce API errors.
|
||||
- ✅ Adjust network concurrency to reduce server verification.
|
||||
|
||||
- Cookie Management:
|
||||
- ✅ Generate the cookie value needed for the web, facilitating the access of login-required APIs.
|
||||
- ✅ Handle SetCookie.
|
||||
|
||||
- Configuration Operations:
|
||||
- ✅ URL shortening and parsing.
|
||||
- ✅ Custom save directory.
|
||||
- ✅ Option to download original sound.
|
||||
- ✅ Option for automatic updates.
|
||||
- ✅ Specify download time interval.
|
||||
- ❌ Set download content likes threshold.
|
||||
- ❌ Set download content play threshold.
|
||||
|
||||
- Version Updates:
|
||||
- ✅ Features to automatically check and download new versions.
|
||||
|
||||
- File Checking:
|
||||
- ✅ Check if a file exists before downloading to avoid redundancy.
|
||||
|
||||
- Command Line Interaction:
|
||||
- ✅ Provide command line options and global headers for easy operation.
|
||||
- ⌛ Provide web UI mode.
|
||||
|
||||
- Scan Code to Login:
|
||||
- ✅ Feature for scan code login, no manual cookie entry required.
|
||||
|
||||
- Automatic Renaming:
|
||||
- ✅ Use a nickname mapping table to ensure content from renamed authors isn't downloaded again.
|
||||
- ⌛ Use content description mapping table to ensure content with edited descriptions isn't downloaded again.
|
||||
|
||||
- Local Encrypted Parameter Call:
|
||||
- ✅ XBogus
|
||||
- ✅ verifyFp
|
||||
- ✅ s_v_web_id
|
||||
- ✅ ttwid
|
||||
- ✅ x-tt-params
|
||||
- 🔘 msToken
|
||||
|
||||
## 💡 To Do
|
||||
|
||||
- Adapt for TikTok.
|
||||
- Set up automation tasks.
|
||||
- Multi-user parsing.
|
||||
- [For more, check the project board](https://github.com/users/Johnserf-Seed/projects/1/views/1)
|
||||
|
||||
## 🖥 Supported Operating Systems
|
||||
|
||||
<details>
|
||||
<summary> List of Operating Systems supported by version 1.5.0.0 </summary>
|
||||
|
||||
- Windows 11
|
||||
- Windows 10 Version 1809 (OS Build 17763) or later
|
||||
- macOS Monterey (12.0) or later
|
||||
- macOS Big Sur (11.0) or later
|
||||
- macOS Catalina (10.15) or later
|
||||
- Ubuntu 20.04 LTS or later
|
||||
- Debian 10 or later
|
||||
- CentOS 7 or later
|
||||
- Fedora 34 or later
|
||||
- Deepin (UOS) 20 or later
|
||||
|
||||
</details>
|
||||
|
||||
## 📸 Running Process
|
||||
|
||||
<details>
|
||||
<summary> 🎬 Running without configuration file and scan code login </summary>
|
||||
|
||||
https://user-images.githubusercontent.com/40727745/fc1e6c46-d0c3-4f2a-a4a5-ca3d781e7d11
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary> 🎬 Downloading from the homepage </summary>
|
||||
|
||||
https://user-images.githubusercontent.com/40727745/12c21d55-b629-485a-b904-54d86341c371
|
||||
|
||||
</details>
|
||||
|
||||
## 📥 Installation and Running
|
||||
|
||||
1. **📦 Installation**
|
||||
|
||||
```bash
|
||||
python -m venv venv
|
||||
.\venv\Scripts\activate
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
2. **▶️ Running**
|
||||
|
||||
```python
|
||||
import Util
|
||||
|
||||
if __name__ == '__main__':
|
||||
# Get command line and configuration file
|
||||
cmd = Util.Command()
|
||||
config = cmd.config_dict
|
||||
dyheaders = cmd.dyheaders
|
||||
|
||||
# Asynchronously download content
|
||||
Util.asyncio.run(Util.Profile(config, dyheaders).get_Profile())
|
||||
input("[ Prompt ]: Download completed, press any key to exit.")
|
||||
|
||||
```
|
||||
|
||||
3. **🔬 Test**
|
||||
|
||||
```bash
|
||||
python example.py
|
||||
```
|
||||
|
||||
## 🗂️ Folder
|
||||
|
||||
<details>
|
||||
<summary>📁 directory</summary>
|
||||
|
||||
```bash
|
||||
├─ .github
|
||||
│ └─ ISSUE_TEMPLATE
|
||||
│ ├── --------.md
|
||||
│ └── -------.md
|
||||
│
|
||||
├─ API
|
||||
│ ├── API.js
|
||||
│ ├── API参考.md
|
||||
│ ├── Server.txt
|
||||
│ ├── TikTokAPI.py
|
||||
│ ├── TikTokDownloadVersion.txt
|
||||
│ ├── TikTokGUIVersion.txt
|
||||
│ ├── TikTokLive.txt
|
||||
│ ├── TikTokMultiVersion.txt
|
||||
│ ├── TikTokPicVersion.txt
|
||||
│ ├── TikTokTool.txt
|
||||
│ ├── TikTokUpdata.txt
|
||||
│ ├── user_base_info.json
|
||||
│ ├── user_post_delete.json
|
||||
│ ├── user_post_detail.json
|
||||
│ ├── user_post_info_image.json
|
||||
│ ├── user_post_info_video.json
|
||||
│ └── user_profile_info.json
|
||||
│
|
||||
├─ Collection
|
||||
│ ├── CopyWritingHomePage_1.json
|
||||
│ ├── GirlHomePage_1.json
|
||||
│ └── MusicHomePage_1.json
|
||||
│
|
||||
├─ DB
|
||||
│ └── create.sql
|
||||
│
|
||||
├─ GUI
|
||||
│ ├── Main.ui
|
||||
│ ├── preview.png
|
||||
│ ├── README-EN.md
|
||||
│ ├── README.md
|
||||
│ ├── requirements.txt
|
||||
│ ├── resource.py
|
||||
│ └── Resource.qrc
|
||||
│
|
||||
└─ Util
|
||||
├── Check.py
|
||||
├── Command.py
|
||||
├── Config.py
|
||||
├── Cookies.py
|
||||
├── Download.py
|
||||
├── Lives.py
|
||||
├── Log.py
|
||||
├── Login.py
|
||||
├── NickMapper.py
|
||||
├── Profile.py
|
||||
├── Resource.py
|
||||
├── Urls.py
|
||||
├── XB.py
|
||||
├── __init__.py
|
||||
├── __version__.py
|
||||
└─ algorithm
|
||||
├── package.json
|
||||
├── Server.py
|
||||
├── s_v_web_id.js
|
||||
├── s_v_web_id.py
|
||||
├── x-bogus.js
|
||||
└── x-tt-params.js
|
||||
│
|
||||
├─ .gitignore
|
||||
├─ Banner.png
|
||||
├─ build-win.bat
|
||||
├─ conf.conf
|
||||
├─ conf.ini
|
||||
├─ Dockerfile
|
||||
├─ example.py
|
||||
├─ info.db
|
||||
├─ LICENSE
|
||||
├─ Logo.ico
|
||||
├─ README-EN.md
|
||||
├─ README.md
|
||||
├─ requirements.txt
|
||||
├─ server.bat
|
||||
├─ server.sh
|
||||
├─ TikTokLive.py
|
||||
├─ TikTokMultiGUI.py
|
||||
├─ TikTokTool.py
|
||||
├─ TikTokUpdata.py
|
||||
├─ version
|
||||
└─ _config.yml
|
||||
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
## 💖 Sponsorship
|
||||
|
||||

|
||||
|
||||
Thank you for supporting this project! If you find this project helpful, please consider sponsoring. You can directly visit our [](https://www.patreon.com/TikTokDownload713)
|
||||
|
||||
## 📧 Contact
|
||||
|
||||
If you have any questions or suggestions, you can contact me via email:
|
||||
|
||||
- Email: [johnserf-seed@foxmail.com](mailto:johnserf-seed@foxmail.com)
|
||||
|
||||
## 🙏 Acknowledgments
|
||||
|
||||
- [Windows Terminal](https://aka.ms/terminal)
|
||||
- [aiohttp](https://github.com/aio-libs/aiohttp)
|
||||
- [requests](https://github.com/psf/requests)
|
||||
- [Pillow (PIL Fork)](https://github.com/python-pillow/Pillow)
|
||||
- [lxml](https://github.com/lxml/lxml)
|
||||
- [rich](https://github.com/willmcgugan/rich)
|
||||
- [qrcode](https://github.com/lincolnloop/python-qrcode)
|
||||
- [ConfigObj](https://github.com/DiffSK/configobj)
|
||||
|
||||
We genuinely appreciate their contributions and efforts.
|
||||
|
||||
## ⚖️ Disclaimer
|
||||
|
||||
This project does not sell, share, encrypt, upload, or study any personal information. This project and its associated code are for learning and research purposes only and do not constitute any explicit or implicit warranty. The author assumes no responsibility for any form of loss caused by the use of this project and its code.
|
||||
|
||||
## 📜 License Statement
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2021 JohnserfSeed
|
||||
|
||||
The source code of this project is licensed under the MIT License. For detailed information, please refer to the [LICENSE](LICENSE) file.
|
||||
|
||||
## 📝 Contributor Code of Conduct
|
||||
|
||||
All contributors are welcome to this project. We hope to create a friendly environment where everyone can work together in an atmosphere of respect and understanding. Please review our [Contributor Code of Conduct](CODE_OF_CONDUCT.md) before participating.
|
||||
|
||||
## 👨💻 Contributors
|
||||
|
||||
We welcome all kinds of contributions, be it error reporting, improvement suggestions, or provision of code and documentation. We appreciate your help.
|
||||
|
||||

|
||||
|
||||
@@ -0,0 +1,370 @@
|
||||
|
||||

|
||||
|
||||
<h1 align="center">✨ 抖音去水印作品下载 ✨</h1>
|
||||
<div align="center">
|
||||
|
||||
[English](README-EN.md) | 简体中文
|
||||
|
||||
[](https://github.com/Johnserf-Seed/TikTokDownload/blob/main/LICENSE)
|
||||

|
||||

|
||||
[](https://github.com/BeyondDimension/SteamTools/search?l=c%23)
|
||||
[](https://github.com/Johnserf-Seed/TikTokDownload)
|
||||

|
||||
|
||||
[](https://github.com/Johnserf-Seed/TikTokDownload)
|
||||
[](https://github.com/Johnserf-Seed/TikTokDownload)
|
||||
[](https://github.com/Johnserf-Seed/TikTokDownload)
|
||||
[](https://github.com/Johnserf-Seed/TikTokDownload)
|
||||
|
||||
[](https://pepy.tech/project/f2)
|
||||
[](https://badge.fury.io/py/f2)
|
||||
[](https://www.jsdelivr.com/package/gh/Johnserf-Seed/TikTokDownload)
|
||||
[](https://hits.seeyoufarm.com)
|
||||
[](https://beta-web.tikhub.io/users/signup?referral_code=6hLcGD94)
|
||||
[](https://discord.gg/3PhtPmgHf8)
|
||||
[](https://www.patreon.com/TikTokDownload713)
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
## 🚀 环境准备/Environment
|
||||
|
||||
> [](https://aka.ms/terminal)
|
||||
>
|
||||
> 旧的控制台无法很好适配,推荐使用Windows Terminal。
|
||||
>
|
||||
> [](https://www.python.org/ftp/python/3.11.1/python-3.11.1-amd64.exe)
|
||||
>
|
||||
> Python3.11.1 低于该版本可能会有意外的错误
|
||||
>
|
||||
> [](https://github.com/Johnserf-Seed/TikTokDownload/releases/tag/v1.4.2.2)
|
||||
>
|
||||
> 更新F2前的最后一个发行版下载
|
||||
|
||||
<details><summary> ⚙ Windows Terminal 设置(必看) </summary>
|
||||
|
||||

|
||||
|
||||
</details>
|
||||
|
||||
|
||||
## 🧰 功能/Features
|
||||
|
||||
- DouYin 接口(全新Abogus)
|
||||
- ✅ 用户信息。
|
||||
- ✅ 查询用户信息。
|
||||
- ✅ 下载发布作品。
|
||||
- ✅ 下载收藏作品。
|
||||
- ✅ 下载收藏原声。
|
||||
- ✅ 下载喜欢作品。
|
||||
- ✅ 下载图集作品。
|
||||
- ✅ 下载短剧作品。
|
||||
- ✅ 下载作品封面。
|
||||
- ✅ 下载作品文案。
|
||||
- ✅ 下载作品原声。
|
||||
- ✅ 下载直播。
|
||||
- ✅ 下载合集作品。
|
||||
- ⌛ 下载关注作品。
|
||||
- ✅ 关注用户信息。
|
||||
- ✅ 粉丝用户信息。
|
||||
- ✅ 下载好友作品。
|
||||
- ✅ 下载首页推荐作品。
|
||||
- ✅ 下载相关推荐作品。
|
||||
- ⌛ 提取评论。
|
||||
- ✅ 详细直播间信息。
|
||||
- ✅ 关注用户开播状态。
|
||||
- ✅ 直播间弹幕负载数据。
|
||||
- ✅ 直播间弹幕采集。
|
||||
- ✅ 详细用户信息。
|
||||
|
||||
- TikTok 接口
|
||||
- ✅ 下载发布作品。
|
||||
- ✅ 下载收藏作品。
|
||||
- ✅ 下载喜欢作品。
|
||||
- ✅ 下载图集作品。
|
||||
- ✅ 下载作品封面。
|
||||
- ✅ 下载作品文案。
|
||||
- ✅ 下载作品原声。
|
||||
- ✅ 下载播放列表。
|
||||
- ✅ 下载合集作品。
|
||||
- ✅ 下载搜索作品。
|
||||
- ⌛ 下载关注作品。
|
||||
- ⌛ 下载好友作品。
|
||||
- ⌛ 下载推荐作品。
|
||||
- ⌛ 下载相关推荐作品。
|
||||
- ⌛ 提取评论。
|
||||
- ✅ 详细直播间信息。
|
||||
- ✅ 直播间开播状态。
|
||||
- ⌛ 直播间弹幕发言。
|
||||
- ✅ 详细用户信息。
|
||||
|
||||
- 更多接口,请查阅 [「F2开发者接口」](https://johnserf-seed.github.io/f2/guide/apps/douyin/)
|
||||
|
||||
- 异步下载
|
||||
- ✅ 同时处理和下载多个作品,提高效率。
|
||||
- ✅ 异步线程,减轻系统压力减少接口出错。
|
||||
- ✅ 网络并发数,减少被服务器校验。
|
||||
- ✅ 超时重试设置,降低采集错误率。
|
||||
|
||||
- Cookie
|
||||
- ✅ 使用--auto-cookie自动从浏览器获取cookie。
|
||||
|
||||
- 接口数据模型
|
||||
- ✅ 开箱即用的接口参数配置,提供完整参数生成。
|
||||
- 请查阅[「使用接口模型生成XB参数」](https://johnserf-seed.github.io/f2/guide/apps/douyin/#%E4%BD%BF%E7%94%A8%E6%8E%A5%E5%8F%A3%E6%A8%A1%E5%9E%8B%E7%94%9F%E6%88%90xb%E5%8F%82%E6%95%B0-%F0%9F%9F%A2)
|
||||
- 请查阅[「使用接口模型生成AB参数」](https://johnserf-seed.github.io/f2/guide/apps/douyin/#%E4%BD%BF%E7%94%A8%E6%8E%A5%E5%8F%A3%E6%A8%A1%E5%9E%8B%E7%94%9F%E6%88%90ab%E5%8F%82%E6%95%B0-%F0%9F%9F%A2)
|
||||
|
||||
- 接口数据过滤器
|
||||
- ✅ 通过过滤接口数据,提高采集与数据处理效率。
|
||||
- 请查阅[「过滤器采集数据」](https://johnserf-seed.github.io/f2/guide/apps/douyin/#%E4%BD%BF%E7%94%A8%E6%8E%A5%E5%8F%A3%E6%A8%A1%E5%9E%8B%E7%94%9F%E6%88%90xb%E5%8F%82%E6%95%B0-%F0%9F%9F%A2)
|
||||
|
||||
- 更多功能
|
||||
- ✅ 长短链解析。
|
||||
- ✅ 自定义保存目录。
|
||||
- ✅ 是否下载原声。
|
||||
- ✅ 是否下载封面。
|
||||
- ✅ 是否下载文案。
|
||||
- ✅ 单次下载作品数量。
|
||||
- ✅ 单次返回作品数量。
|
||||
- ✅ 自定义文件名模板。
|
||||
- ✅ 代理设置。
|
||||
- ✅ 指定下载时间区间。
|
||||
- ✅ 提取单个/列表用户id。
|
||||
- ✅ 提取单个/列表作品id。
|
||||
- ✅ 提取单个/列表合集id。
|
||||
- ✅ 提取单个/列表直播间rid。
|
||||
- ✅ 原声json歌词转lrc歌词。
|
||||
- ⌛ 设定下载作品点赞阈值。
|
||||
- ⌛ 设定下载作品播放阈值。
|
||||
|
||||
- 更多配置文件操作,请查阅[「F2配置文件」](https://johnserf-seed.github.io/f2/site-config.html)
|
||||
|
||||
- 多用户配置
|
||||
- ✅ 对不同用户建立不同配置与不同的下载模式。
|
||||
- ✅ 灵活的cli模式,方便用户快速切换配置。
|
||||
- ⌛ 灵活的webui模式,方便用户快速切换配置。
|
||||
|
||||
- 版本更新
|
||||
- ✅ 全新开发 F2 依赖pip进行升级
|
||||
- ✅ 自动检查 pypi 上的最新版本
|
||||
|
||||
- 文件检查
|
||||
- ✅ 下载文件前检查文件是否已经存在,避免重复下载。
|
||||
- ⌛ 添加”黑名单“,不检查这些作品是否存在。
|
||||
|
||||
- 命令行交互
|
||||
- ✅ 提供cli模式与开发者模式
|
||||
- ⌛ 提供webui模式
|
||||
- ⌛ 提供本地接口转发,方便部署调用。
|
||||
|
||||
- 自动重命名
|
||||
- ✅ 无需关心用户是否改名,从而造成重复下载。
|
||||
- ⌛ 无需关心作品是否改文案,从而造成重复下载。
|
||||
|
||||
- 本地加密参数调用
|
||||
- ✅ ABogus(dy)
|
||||
- ✅ XBogus(dy、tk)
|
||||
- ✅ verifyFp(dy)
|
||||
- ✅ s_v_web_id(dy)
|
||||
- ✅ ttwid(dy、tk)
|
||||
- ✅ web_id(dy)
|
||||
- ✅ _signature(dy)
|
||||
- ✅ x-tt-params(tk)
|
||||
- ✅ msToken(dy、tk)
|
||||
- ✅ odin_tt(tk)
|
||||
- ✅ device_Id(tk)
|
||||
|
||||
|
||||
## 💡 待办/ToDo
|
||||
|
||||
- 创建自动化任务
|
||||
- [更多请查看项目板](https://github.com/users/Johnserf-Seed/projects/1/views/1)
|
||||
|
||||
|
||||
## 🖥 支持的操作系统/Supported Operating Systems
|
||||
|
||||
<details>
|
||||
<summary> TikTokDownload 1.6 / F2 0.0.1.6-pw2 支持的操作系统列表 </summary>
|
||||
|
||||
- Windows 11
|
||||
- Windows 10 版本 1809(OS 内部版本 17763)或更高版本
|
||||
- macOS Monterey(12.0)或更高版本
|
||||
- macOS Big Sur(11.0)或更高版本
|
||||
- macOS Catalina(10.15)或更高版本
|
||||
- Ubuntu 20.04 LTS 或更高版本
|
||||
- Debian 10 或更高版本
|
||||
- CentOS 7 或更高版本
|
||||
- Fedora 34 或更高版本
|
||||
- Deepin (UOS) 20 或更高版本
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
## 📥 安装与运行/Installation and Running
|
||||
|
||||
1. **📦 安装/Installation**
|
||||
|
||||
请查阅 [「安装」](https://johnserf-seed.github.io/f2/install.html)
|
||||
|
||||
2. **▶️ 运行/Running**
|
||||
|
||||
请查阅 [「配置文件」](https://johnserf-seed.github.io/f2/install.html)
|
||||
|
||||
3. **🔬 测试/Test**
|
||||
|
||||
在 F2 安装目录打开终端运行,如果配置正确那么你不会看见报错。
|
||||
```bash
|
||||
python -m pytest
|
||||
```
|
||||
|
||||
## 📸 运行过程/Running Process
|
||||
|
||||
<details>
|
||||
<summary> 🎬 无配置文件扫码登录 </summary>
|
||||
|
||||
https://user-images.githubusercontent.com/40727745/fc1e6c46-d0c3-4f2a-a4a5-ca3d781e7d11
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary> 🎬 主页作品下载 </summary>
|
||||
|
||||
https://user-images.githubusercontent.com/40727745/12c21d55-b629-485a-b904-54d86341c371
|
||||
|
||||
</details>
|
||||
|
||||
更多运行过程请查阅 [「F2 readme」](https://github.com/Johnserf-Seed/f2/blob/main/README.md)
|
||||
|
||||
|
||||
## 🗂️ 项目结构/Folder
|
||||
|
||||
<details>
|
||||
<summary>📁 目录</summary>
|
||||
|
||||
```bash
|
||||
├─ .github
|
||||
│ └─ ISSUE_TEMPLATE
|
||||
│ ├── --------.md
|
||||
│ └── -------.md
|
||||
│
|
||||
├─ API
|
||||
│ ├── TikTokTool.txt
|
||||
│ ├── user_base_info.json
|
||||
│ ├── user_post_delete.json
|
||||
│ ├── user_post_detail.json
|
||||
│ ├── user_post_info_image.json
|
||||
│ ├── user_post_info_video.json
|
||||
│ └── user_profile_info.json
|
||||
│
|
||||
├─ GUI(待重构)
|
||||
│ ├── Main.ui
|
||||
│ ├── preview.png
|
||||
│ ├── README-EN.md
|
||||
│ ├── README.md
|
||||
│ ├── requirements.txt
|
||||
│ ├── resource.py
|
||||
│ └── Resource.qrc
|
||||
│
|
||||
└─ Server
|
||||
└─ algorithm
|
||||
├── build-win.bat
|
||||
├── package.json
|
||||
├── requirements.txt
|
||||
├── Server.py
|
||||
├── Server.txt
|
||||
├── s_v_web_id.js
|
||||
├── s_v_web_id.py
|
||||
├── x-bogus.js
|
||||
└── x-tt-params.js
|
||||
│
|
||||
├─ .gitignore
|
||||
├─ Banner.png
|
||||
├─ build-win.bat
|
||||
├─ Dockerfile
|
||||
├─ LICENSE
|
||||
├─ f2-logo.ico
|
||||
├─ README-EN.md
|
||||
├─ README.md
|
||||
├─ requirements.txt
|
||||
├─ run-server.bat
|
||||
├─ run-server.sh
|
||||
├─ TikTokTool.py
|
||||
├─ version
|
||||
└─ _config.yml
|
||||
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
## 💖 赞赏/Sponsor
|
||||
|
||||
<a href="https://tikhub.io/"><img style="border-radius:20px" src="https://github.com/Johnserf-Seed/f2/assets/40727745/70a67dd1-dccb-44a9-b635-c29a950f1daf"></a>
|
||||
|
||||
[TikHub](https://tikhub.io/) 是一家提供优质数据接口服务的供应商。通过每日签到,可以获取免费额度。可以使用我的注册邀请链接:[https://beta-web.tikhub.io/users/signup?referral_code=6hLcGD94](https://beta-web.tikhub.io/users/signup?referral_code=6hLcGD94) 或 邀请码:`6hLcGD94`,注册并充值即可获得`$2`额度。
|
||||
|
||||
[TikHub](https://tikhub.io/) 提供以下服务:
|
||||
|
||||
- 丰富的数据接口
|
||||
- 每日签到免费获取额度
|
||||
- 高质量的API服务
|
||||
- 官网:https://tikhub.io/
|
||||
- 项目地址:https://github.com/TikHubIO/
|
||||
|
||||
|
||||

|
||||
|
||||
感谢对本项目的支持!如果您觉得这个项目有帮助,欢迎赞助。您可以直接访问我们的 [](https://www.patreon.com/F2_pypi)
|
||||
|
||||
|
||||
## 📧 联系/Contact
|
||||
|
||||
如果有任何问题或者建议,可以通过邮箱联系我:
|
||||
|
||||
- 邮箱:[johnserf-seed@foxmail.com](mailto:johnserf-seed@foxmail.com)
|
||||
|
||||
|
||||
## 🙏 鸣谢/Acknowledgments
|
||||
|
||||
- [Windows Terminal](https://aka.ms/terminal)
|
||||
- [Python](https://www.python.org/)
|
||||
- [httpx](https://github.com/encode/httpx)
|
||||
- [click](https://github.com/pallets/click)
|
||||
- [aiofiles](https://github.com/Tinche/aiofiles)
|
||||
- [aiosqlite](https://github.com/omnilib/aiosqlite)
|
||||
- [rich](https://github.com/willmcgugan/rich)
|
||||
- [qrcode](https://github.com/lincolnloop/python-qrcode)
|
||||
- [pyyaml](hhttps://github.com/yaml/pyyaml)
|
||||
- [jsonpath-ng](https://github.com/h2non/jsonpath-ng)
|
||||
- [m3u8](https://github.com/globocom/m3u8)
|
||||
- [pytest](https://github.com/pytest-dev/pytest)
|
||||
|
||||
对于他们的贡献和努力,表示由衷的感谢。
|
||||
|
||||
|
||||
## ⚖️ 免责声明/Disclaimer
|
||||
|
||||
此项目不出售、共享、加密、上传、研究任何个人信息。此项目及其相关代码仅供学习与研究使用,不构成任何明示或暗示的保证。使用者因使用此项目及其代码可能造成的任何形式的损失,作者不承担任何责任。
|
||||
|
||||
|
||||
## 📜 版权声明/LICENSE
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2021 JohnserfSeed
|
||||
|
||||
此项目的源代码在 MIT 许可证下授权,有关详细信息,请参阅 [LICENSE](LICENSE) 文件。
|
||||
|
||||
|
||||
## 📝 贡献者守则/CoC
|
||||
|
||||
此项目欢迎所有的贡献者。我们希望能够创建一个友好的环境,让每个人都能在尊重和理解的氛围中共同工作。在参与贡献之前,请参阅我们的 [贡献者守则](CODE_OF_CONDUCT.md)。
|
||||
|
||||
|
||||
## 👨💻贡献者/Contributors
|
||||
|
||||
我们欢迎任何形式的贡献,无论是提交错误报告,提出改进意见,或者是提供代码和文档。我们都欣赏你的帮助。
|
||||
|
||||

|
||||
@@ -0,0 +1,197 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- encoding: utf-8 -*-
|
||||
'''
|
||||
@Description:Server.py
|
||||
@Date :2023/02/25 17:03:32
|
||||
@Author :JohnserfSeed
|
||||
@version :0.0.1
|
||||
@License :MIT License
|
||||
@Github :https://github.com/johnserf-seed
|
||||
@Mail :johnserf-seed@foxmail.com
|
||||
-------------------------------------------------
|
||||
Change Log :
|
||||
2023/02/25 17:03:32 - Create Flask Server XB Gen
|
||||
2023/08/03 16:48:34 - Fix ttwid
|
||||
-------------------------------------------------
|
||||
'''
|
||||
|
||||
import time
|
||||
import execjs
|
||||
# import sqlite3
|
||||
import requests
|
||||
|
||||
from flask import Flask
|
||||
from flask import request
|
||||
from flask import jsonify
|
||||
# from flask import make_response
|
||||
# from flask import render_template
|
||||
|
||||
from urllib.parse import urlencode
|
||||
from urllib.parse import unquote
|
||||
from urllib.parse import parse_qsl
|
||||
|
||||
class Server:
|
||||
def __init__(self) -> None:
|
||||
# 工厂模式
|
||||
self.app = Flask(__name__)
|
||||
|
||||
self.app.config.from_mapping(
|
||||
SECRET_KEY='douyin-xbogus'
|
||||
)
|
||||
|
||||
self.app.config['JSON_AS_ASCII'] = False
|
||||
|
||||
with open("x-bogus.js", "r", encoding="utf-8") as fp:
|
||||
self.xbogust_func = execjs.compile(fp.read())
|
||||
|
||||
with open("x-tt-params.js", "r", encoding="utf-8") as fp:
|
||||
self.xttm_func = execjs.compile(fp.read())
|
||||
|
||||
self.ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"
|
||||
|
||||
# 获取xg参数
|
||||
def getXG(self, url_path, params):
|
||||
xbogus = self.xbogust_func.call("getXB", url_path)
|
||||
# 字典中添加xg
|
||||
params["X-Bogus"] = xbogus
|
||||
tips = {
|
||||
"status_code": "200",
|
||||
"time": {
|
||||
"strftime": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),
|
||||
"timestamp": int(round(time.time() * 1000))
|
||||
},
|
||||
"result": [{
|
||||
"params": params,
|
||||
"paramsencode": urlencode(params, safe="="),
|
||||
"user-agent": self.ua,
|
||||
"X-Bogus": {
|
||||
0: xbogus,
|
||||
1: "X-Bogus=%s" % xbogus
|
||||
}
|
||||
}]
|
||||
}
|
||||
print(tips)
|
||||
return jsonify(tips)
|
||||
|
||||
# 生成x-tt-params
|
||||
def getxttparams(self, url_path):
|
||||
xttp = self.xttm_func.call("getXTTP", url_path)
|
||||
tips = {
|
||||
"status_code": "200",
|
||||
"time": {
|
||||
"strftime": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),
|
||||
"timestamp": int(round(time.time() * 1000))
|
||||
},
|
||||
"result": [{
|
||||
"headers": {
|
||||
"user-agent": self.ua,
|
||||
"x-tt-params": xttp
|
||||
}
|
||||
}]
|
||||
}
|
||||
print(tips)
|
||||
return jsonify(tips)
|
||||
|
||||
def gen_ttwid(self) -> str:
|
||||
"""生成请求必带的ttwid
|
||||
param :None
|
||||
return:ttwid
|
||||
"""
|
||||
url = 'https://ttwid.bytedance.com/ttwid/union/register/'
|
||||
data = '{"region":"cn","aid":1768,"needFid":false,"service":"www.ixigua.com","migrate_info":{"ticket":"","source":"node"},"cbUrlProtocol":"https","union":true}'
|
||||
response = requests.request("POST", url, data=data)
|
||||
# j = ttwid k = 1%7CfPx9ZM.....
|
||||
for j, k in response.cookies.items():
|
||||
tips = {
|
||||
"status_code": "200",
|
||||
"time": {
|
||||
"strftime": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),
|
||||
"timestamp": int(round(time.time() * 1000))
|
||||
},
|
||||
"result": [{
|
||||
"headers": {
|
||||
"user-agent": self.ua,
|
||||
"cookie": "ttwid=%s;" % k
|
||||
}
|
||||
}]
|
||||
}
|
||||
print(tips)
|
||||
return jsonify(tips)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
server = Server()
|
||||
# 首页
|
||||
@server.app.route('/', methods=['GET', 'POST'])
|
||||
def index():
|
||||
tips = {
|
||||
"status_code": "-1",
|
||||
"time": {
|
||||
"strftime": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),
|
||||
"timestamp": int(round(time.time() * 1000))
|
||||
},
|
||||
"path": {
|
||||
0: "/xg/path/?url=",
|
||||
2: "/x-tt-params/path"
|
||||
}
|
||||
}
|
||||
print(tips)
|
||||
return jsonify(tips)
|
||||
|
||||
# xg参数
|
||||
@server.app.route('/xg/path/', methods=['GET', 'POST'])
|
||||
def xgpath():
|
||||
path = request.args.get('url', '')
|
||||
# 如果str路径为空
|
||||
if not path:
|
||||
tips = {
|
||||
"status_code": "-3",
|
||||
"time": {
|
||||
"strftime": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),
|
||||
"timestamp": int(round(time.time() * 1000))
|
||||
},
|
||||
"message": {
|
||||
0: "The key url cannot be empty and the need for url encoding, The '&' sign needs to be escaped to '%26', Use urllib.parse.quote(url) to escape. Example:/xg/path/?url=aid=6383%26sec_user_id=xxx%26max_cursor=0%26count=10",
|
||||
1: "url参数不能为空,且需要注意传入值中的“&”需要转义成“%26”,使用urllib.parse.quote(url)转义. 例如:/xg/path/?url=aid=6383%26sec_user_id=xxx%26max_cursor=0%26count=10"
|
||||
}
|
||||
}
|
||||
print(tips)
|
||||
return jsonify(tips)
|
||||
else:
|
||||
# url转字典
|
||||
params = dict(parse_qsl(path))
|
||||
# 字典转url
|
||||
url_path = urlencode(params, safe="=")
|
||||
return server.getXG(url_path, params)
|
||||
|
||||
# x-tt-params参数
|
||||
@server.app.route('/x-tt-params/path', methods=['GET', 'POST'])
|
||||
def xttppath():
|
||||
try:
|
||||
path = request.json
|
||||
except:
|
||||
pass
|
||||
if not path:
|
||||
tips = {
|
||||
"status_code": "-5",
|
||||
"time": {
|
||||
"strftime": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),
|
||||
"timestamp": int(round(time.time() * 1000))
|
||||
},
|
||||
"message": {
|
||||
0: "Body uses raw JSON format to pass dictionary parameters, such as %s" % '{"aid": 1988,"app_name": "tiktok_web","channel": "tiktok_web".........}',
|
||||
1: "body中使用raw json格式传递字典参数,如%s" % '{"aid": 1988,"app_name": "tiktok_web","channel": "tiktok_web".........}'
|
||||
}
|
||||
}
|
||||
print(tips)
|
||||
return jsonify(tips)
|
||||
else:
|
||||
return server.getxttparams(path)
|
||||
|
||||
# ttwid
|
||||
@server.app.route('/xg/ttwid', methods=['GET', 'POST'])
|
||||
def ttwid():
|
||||
return server.gen_ttwid()
|
||||
|
||||
|
||||
server.app.run(host='0.0.0.0',port='8889')
|
||||
@@ -0,0 +1,41 @@
|
||||
# UTF-8
|
||||
#
|
||||
# For more details about fixed file info 'ffi' see:
|
||||
# http://msdn.microsoft.com/en-us/library/ms646997.aspx
|
||||
VSVersionInfo(
|
||||
ffi=FixedFileInfo(
|
||||
# filevers and prodvers should be always a tuple with four items: (1, 2, 3, 4)
|
||||
# Set not needed items to zero 0.
|
||||
filevers=(1, 4, 2, 2),
|
||||
prodvers=(1, 4, 2, 2),
|
||||
# Contains a bitmask that specifies the valid bits 'flags'r
|
||||
mask=0x3f,
|
||||
# Contains a bitmask that specifies the Boolean attributes of the file.
|
||||
flags=0x0,
|
||||
# The operating system for which this file was designed.
|
||||
# 0x4 - NT and there is no need to change it.
|
||||
OS=0x40004,
|
||||
# The general type of file.
|
||||
# 0x1 - the file is an application.
|
||||
fileType=0x1,
|
||||
# The function of the file.
|
||||
# 0x0 - the function is not defined for this fileType
|
||||
subtype=0x0,
|
||||
# Creation date and time stamp.
|
||||
date=(0, 0)
|
||||
),
|
||||
kids=[
|
||||
StringFileInfo(
|
||||
[
|
||||
StringTable(
|
||||
u'080404b0',
|
||||
[StringStruct(u'CompanyName', u'JohnserfSeed'),
|
||||
StringStruct(u'FileDescription', u'本地解析服务'),
|
||||
StringStruct(u'FileVersion', u'1.5.0.0'),
|
||||
StringStruct(u'LegalCopyright', u'Copyright (C) 2019-2023 JohnserfSeed. All Rights Reserved'),
|
||||
StringStruct(u'ProductName', u'本地解析服务'),
|
||||
StringStruct(u'ProductVersion', u'1.5.0.0')])
|
||||
]),
|
||||
VarFileInfo([VarStruct(u'Translation', [2052, 1200])])
|
||||
]
|
||||
)
|
||||
@@ -0,0 +1,9 @@
|
||||
@echo off
|
||||
echo Install Pip Require
|
||||
pip install -r requirements.txt
|
||||
echo Build EXE version, Press Ctrl + C to Exit
|
||||
echo Build Server
|
||||
pyinstaller -F -i ..\f2-logo.ico --distpath . --version-file Server.txt --hidden-import=charset_normalizer.md__mypyc Server.py
|
||||
echo Install Npm Require
|
||||
npm i
|
||||
pause
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"dependencies": {
|
||||
"crypto-js": "^4.1.1",
|
||||
"md5": "^2.3.0"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
Flask==2.2.5
|
||||
PyExecJS==1.5.1
|
||||
@@ -0,0 +1,15 @@
|
||||
function create_s_v_web_id() {
|
||||
var e = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split("")
|
||||
, t = e.length
|
||||
, n = (new Date).getTime().toString(36)
|
||||
, r = [];
|
||||
|
||||
r[8] = r[13] = r[18] = r[23] = "_",
|
||||
r[14] = "4";
|
||||
for (var o, i = 0; i < 36; i++)
|
||||
r[i] || (o = 0 | Math.random() * t,
|
||||
r[i] = e[19 == i ? 3 & o | 8 : o]);
|
||||
return "verify_" + n + "_" + r.join("")
|
||||
}
|
||||
|
||||
console.log(create_s_v_web_id())
|
||||
@@ -0,0 +1,31 @@
|
||||
import time
|
||||
import random
|
||||
|
||||
def create_s_v_web_id():
|
||||
e = list("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz")
|
||||
t = len(e)
|
||||
n = base36_encode(int(time.time()*1000)) # Convert timestamp to base 36
|
||||
|
||||
r = [''] * 36
|
||||
r[8] = r[13] = r[18] = r[23] = "_"
|
||||
r[14] = "4"
|
||||
|
||||
for i in range(36):
|
||||
if not r[i]:
|
||||
o = int(random.random() * t)
|
||||
r[i] = e[3 & o | 8 if i == 19 else o]
|
||||
|
||||
return "verify_" + n + "_" + "".join(r)
|
||||
|
||||
def base36_encode(number):
|
||||
"""Converts an integer to a base36 string."""
|
||||
alphabet = '0123456789abcdefghijklmnopqrstuvwxyz'
|
||||
base36 = []
|
||||
|
||||
while number:
|
||||
number, i = divmod(number, 36)
|
||||
base36.append(alphabet[i])
|
||||
|
||||
return ''.join(reversed(base36))
|
||||
|
||||
print(create_s_v_web_id())
|
||||
@@ -0,0 +1,132 @@
|
||||
let MD5 = require("md5");
|
||||
|
||||
let Array = [ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 10, 11, 12, 13, 14, 15 ];
|
||||
|
||||
// let _0x4129ad = 'Dkdpgh4ZKsQB80/Mfvw36XI1R25+WUAlEi7NLboqYTOPuzmFjJnryx9HVGcaStCe';
|
||||
// let _0x127ecb = '=';
|
||||
let _0x377d66 = "Dkdpgh4ZKsQB80/Mfvw36XI1R25-WUAlEi7NLboqYTOPuzmFjJnryx9HVGcaStCe=";
|
||||
|
||||
function _0x39ced2(l) {
|
||||
let n = [];
|
||||
for (let u = 0; u < l.length; ) {
|
||||
n.push(Array[l.charCodeAt(u++)] << 4 | Array[l.charCodeAt(u++)]);
|
||||
}
|
||||
return n;
|
||||
}
|
||||
|
||||
function _0x1da120(l) {
|
||||
return _0x39ced2(MD5(_0x39ced2(MD5(l))));
|
||||
}
|
||||
|
||||
function _0x2efd11(l) {
|
||||
return "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(l);
|
||||
}
|
||||
|
||||
function _0x2d9dba(l) {
|
||||
var n, u, e, t, r, o = "";
|
||||
for (n = 0; n < l.length - 3; n += 4) {
|
||||
u = _0x2efd11(l.charAt(n)), e = _0x2efd11(l.charAt(n + 1)), t = _0x2efd11(l.charAt(n + 2)),
|
||||
r = _0x2efd11(l.charAt(n + 3)), o += String.fromCharCode(u << 2 | e >>> 4), "=" !== l.charAt(n + 2) && (o += String.fromCharCode(e << 4 & 240 | t >>> 2 & 15)),
|
||||
"=" !== l.charAt(n + 3) && (o += String.fromCharCode(t << 6 & 192 | r));
|
||||
}
|
||||
return o;
|
||||
}
|
||||
|
||||
function _0x24e7c9() {
|
||||
var l = "";
|
||||
try {
|
||||
window.sessionStorage && (l = window.sessionStorage.getItem("_byted_param_sw")),
|
||||
l && !window.localStorage || (l = window.localStorage.getItem("_byted_param_sw"));
|
||||
} catch (l) {}
|
||||
if (l) {
|
||||
try {
|
||||
var n = _0x3459bb(_0x2d9dba(l.slice(8)), l.slice(0, 8));
|
||||
if ("on" === n) {
|
||||
return !0;
|
||||
}
|
||||
if ("off" === n) {
|
||||
return !1;
|
||||
}
|
||||
} catch (l) {}
|
||||
}
|
||||
return !1;
|
||||
}
|
||||
|
||||
function _0x4d54ed(l) {
|
||||
try {
|
||||
return window.localStorage ? window.localStorage.getItem(l) : null;
|
||||
} catch (l) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
function _0x478bb3(l, n, u) {
|
||||
let e = (255 & l) << 16;
|
||||
let t = (255 & n) << 8;
|
||||
let r = e | t | u;
|
||||
return _0x377d66[(16515072 & r) >> 18] + _0x377d66[(258048 & r) >> 12] + _0x377d66[(4032 & r) >> 6] + _0x377d66[63 & r];
|
||||
}
|
||||
|
||||
function _0x481826(l) {
|
||||
void 0 !== l && "" != l && (_0x402a35.ttwid = l);
|
||||
}
|
||||
|
||||
function _0x37f15d() {
|
||||
var l = _0x4d54ed("xmst");
|
||||
return l || "";
|
||||
}
|
||||
|
||||
function _0x330d11(l, n, u, e, t, r, o, d, a, c, i, f, x, _, h, g, C, s, p) {
|
||||
let w = new Uint8Array(19);
|
||||
w[0] = l, w[1] = i, w[2] = n, w[3] = f, w[4] = u, w[5] = x, w[6] = e, w[7] = _,
|
||||
w[8] = t, w[9] = h, w[10] = r, w[11] = g, w[12] = o, w[13] = C, w[14] = d, w[15] = s,
|
||||
w[16] = a, w[17] = p, w[18] = c;
|
||||
return String.fromCharCode.apply(null, w);
|
||||
}
|
||||
|
||||
function _0x330d112(l, n) {
|
||||
let u, e = [], t = 0, r = "", o = 0, d = 0, a = 0;
|
||||
for (let l = 0; l < 256; l++) {
|
||||
e[l] = l;
|
||||
}
|
||||
for (;o < 256; o++) {
|
||||
t = (t + e[o] + l.charCodeAt(o % l.length)) % 256, u = e[o], e[o] = e[t], e[t] = u;
|
||||
}
|
||||
t = 0;
|
||||
for (;d < n.length; d++) {
|
||||
t = (t + e[a = (a + 1) % 256]) % 256, u = e[a], e[a] = e[t], e[t] = u, r += String.fromCharCode(n.charCodeAt(d) ^ e[(e[a] + e[t]) % 256]);
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
function _0x33baa6(l, n, u) {
|
||||
return String.fromCharCode(l) + String.fromCharCode(n) + u;
|
||||
}
|
||||
|
||||
function getXB(l) {
|
||||
// douyin
|
||||
let n = _0x39ced2(MD5("d4+pTKoNjJFb5tMtAC3XB9XrDDxlig1kjbh32u+x5YcwWb/me2pvLTh6ZdBVN5skEeIaOYNixbnFK6wyJdl/Lcy9CDAcpXLLQc3QFKIDQ3KkQYie3n258eLS1YFUqFLDjn7dqCRp1jjoORamU2SV"));
|
||||
// douyin & tiktok
|
||||
let u = _0x39ced2(MD5(_0x39ced2("d41d8cd98f00b204e9800998ecf8427e")));
|
||||
let e = _0x1da120(l), t = new Date().getTime() / 1e3, r = 536919696, o = [], d = [], a = "";
|
||||
let c = [ 64, .00390625, 1, 8, e[14], e[15], u[14], u[15], n[14], n[15], t >> 24 & 255, t >> 16 & 255, t >> 8 & 255, t >> 0 & 255, r >> 24 & 255, r >> 16 & 255, r >> 8 & 255, r >> 0 & 255 ];
|
||||
c.push(c.reduce(function(l, n) {
|
||||
return l ^ n;
|
||||
}));
|
||||
for (let l = 0; l < c.length; l += 2) {
|
||||
o.push(c[l]);
|
||||
d.push(c[l + 1]);
|
||||
}
|
||||
//unescape('%FF')
|
||||
let i = _0x33baa6.apply(null, [ 2, 255, _0x330d112.apply(null, [String.fromCharCode(255), _0x330d11.apply(null, o.concat(d).slice(0, 19)) ]) ]);
|
||||
for (let l = 0; l < i.length; ) {
|
||||
a += _0x478bb3(i.charCodeAt(l++), i.charCodeAt(l++), i.charCodeAt(l++));
|
||||
}
|
||||
return a;
|
||||
}
|
||||
|
||||
_0x180b4c = _0x37f15d();
|
||||
|
||||
module.exports = {
|
||||
getXB: getXB
|
||||
};
|
||||
@@ -0,0 +1,27 @@
|
||||
let CryptoJS = require("crypto-js");
|
||||
getXTTP = e => {
|
||||
const t = [];
|
||||
return Object.keys(e).forEach((i => {
|
||||
const o = `${i}=${e[i]}`;
|
||||
t.push(o)
|
||||
})),
|
||||
t.push("is_encryption=1"),
|
||||
((e, t) => {
|
||||
const i = ((e, t) => {
|
||||
let i = e.toString();
|
||||
const o = i.length;
|
||||
return o < 16 ? i = new Array(16 - o + 1).join("0") + i : o > 16 && (i = i.slice(0, 16)),
|
||||
i
|
||||
})("webapp1.0+20210628"),
|
||||
n = CryptoJS.enc.Utf8.parse(i);
|
||||
return CryptoJS.AES.encrypt(e, n, {
|
||||
iv: n,
|
||||
mode: CryptoJS.mode.CBC,
|
||||
padding: CryptoJS.pad.Pkcs7
|
||||
}).toString()
|
||||
})(t.join("&"))
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
getXTTP: getXTTP
|
||||
};
|
||||
@@ -0,0 +1,52 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- encoding: utf-8 -*-
|
||||
"""
|
||||
@Description:TikTokTool.py
|
||||
@Date :2022/07/29 23:19:14
|
||||
@Author :JohnserfSeed
|
||||
@version :1.6
|
||||
@License :MIT License
|
||||
@Github :https://github.com/johnserf-seed
|
||||
@Mail :johnserf-seed@foxmail.com
|
||||
-------------------------------------------------
|
||||
Change Log :
|
||||
2022/07/29 23:19:14 : Init
|
||||
2023/03/10 16:22:19 : gen dyheaders
|
||||
2023/08/04 02:09:31 : async download
|
||||
2023/12/26 18:01:56 : Switch to f2
|
||||
2024/04/05 00:56:22 : Update to 1.6 with f2 0.0.1.5
|
||||
-------------------------------------------------
|
||||
"""
|
||||
|
||||
import f2
|
||||
import sys
|
||||
import time
|
||||
from f2.cli.cli_console import RichConsoleManager as RCManager
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
RCManager = RCManager()
|
||||
|
||||
if len(sys.argv) <= 1:
|
||||
RCManager.rich_console.print(
|
||||
"[bold red]请通过命令行启动并提供必要的参数, 输入[bold green] TikTokTool -h [/bold green]查看不同平台帮助。[/bold red]"
|
||||
)
|
||||
|
||||
RCManager.rich_console.print(
|
||||
f"[bold white]F2 Version:{f2.__version__}[/bold white]"
|
||||
)
|
||||
time.sleep(3)
|
||||
sys.exit(1)
|
||||
|
||||
from f2.apps.douyin.cli import douyin
|
||||
from f2.apps.tiktok.cli import tiktok
|
||||
|
||||
clis = [douyin, tiktok]
|
||||
|
||||
selected = RCManager.rich_prompt.ask(
|
||||
"[bold yellow]1.Douyin 2.TikTok:[/bold yellow]",
|
||||
choices=[str(i) for i in range(1, len(clis) + 1)],
|
||||
)
|
||||
|
||||
# 调用相应的 CLI 函数
|
||||
clis[int(selected) - 1]()
|
||||
@@ -0,0 +1 @@
|
||||
theme: jekyll-theme-architect
|
||||
+131
@@ -0,0 +1,131 @@
|
||||
import os
|
||||
import time
|
||||
|
||||
COOKIE_FILE = r"C:\Users\Administrator\Desktop\TikTokDownload-main\douyin_cookie.txt"
|
||||
|
||||
def get_douyin_cookie_auto(force_refresh=False, headless=True):
|
||||
"""
|
||||
自动获取抖音访客Cookie(使用Edge本地驱动)
|
||||
"""
|
||||
|
||||
# 检查是否已有Cookie且不需要强制刷新
|
||||
if not force_refresh and os.path.exists(COOKIE_FILE):
|
||||
try:
|
||||
with open(COOKIE_FILE, 'r', encoding='utf-8') as f:
|
||||
cookie = f.read().strip()
|
||||
if cookie and len(cookie) > 100:
|
||||
print("[自动Cookie] 使用已保存的Cookie")
|
||||
return cookie
|
||||
except Exception as e:
|
||||
print(f"[自动Cookie] 读取Cookie失败: {e}")
|
||||
|
||||
print("[自动Cookie] 开始自动获取...")
|
||||
|
||||
try:
|
||||
# 尝试使用selenium with本地Edge
|
||||
from selenium import webdriver
|
||||
from selenium.webdriver.edge.options import Options as EdgeOptions
|
||||
from selenium.webdriver.edge.service import Service as EdgeService
|
||||
|
||||
print("[自动Cookie] 启动Edge浏览器...")
|
||||
|
||||
options = EdgeOptions()
|
||||
|
||||
if headless:
|
||||
print("[自动Cookie] 使用无头模式...")
|
||||
options.add_argument("--headless")
|
||||
options.add_argument("--disable-gpu")
|
||||
|
||||
options.add_argument("--no-sandbox")
|
||||
options.add_argument("--disable-dev-shm-usage")
|
||||
options.add_argument("--disable-blink-features=AutomationControlled")
|
||||
options.add_experimental_option('excludeSwitches', ['enable-automation'])
|
||||
options.add_experimental_option('useAutomationExtension', False)
|
||||
|
||||
# 尝试使用系统Edge驱动
|
||||
try:
|
||||
# 方法1: 直接使用Edge(自动查找驱动)
|
||||
driver = webdriver.Edge(options=options)
|
||||
print("[自动Cookie] Edge浏览器启动成功(自动驱动)")
|
||||
except Exception as e1:
|
||||
print(f"[自动Cookie] 自动驱动失败: {e1}")
|
||||
|
||||
# 方法2: 尝试常见驱动路径
|
||||
common_paths = [
|
||||
r"C:\Program Files (x86)\Microsoft\Edge\Application\msedgedriver.exe",
|
||||
r"C:\Program Files\Microsoft\Edge\Application\msedgedriver.exe",
|
||||
os.path.expandvars(r"%PROGRAMFILES%\Microsoft\Edge\Application\msedgedriver.exe"),
|
||||
os.path.expandvars(r"%PROGRAMFILES(X86)%\Microsoft\Edge\Application\msedgedriver.exe"),
|
||||
]
|
||||
|
||||
driver = None
|
||||
for driver_path in common_paths:
|
||||
if os.path.exists(driver_path):
|
||||
print(f"[自动Cookie] 尝试使用驱动: {driver_path}")
|
||||
try:
|
||||
service = EdgeService(executable_path=driver_path)
|
||||
driver = webdriver.Edge(service=service, options=options)
|
||||
print("[自动Cookie] Edge浏览器启动成功(指定驱动)")
|
||||
break
|
||||
except Exception as e2:
|
||||
print(f"[自动Cookie] 驱动 {driver_path} 失败: {e2}")
|
||||
continue
|
||||
|
||||
if driver is None:
|
||||
raise Exception("无法找到可用的Edge驱动")
|
||||
|
||||
# 访问抖音
|
||||
print("[自动Cookie] 访问抖音网站...")
|
||||
driver.get("https://www.douyin.com")
|
||||
|
||||
print("[自动Cookie] 等待Cookie生成(5秒)...")
|
||||
time.sleep(5)
|
||||
|
||||
# 提取Cookie
|
||||
cookies = driver.get_cookies()
|
||||
|
||||
if not cookies:
|
||||
print("[自动Cookie] 警告: 未获取到Cookie")
|
||||
driver.quit()
|
||||
return None
|
||||
|
||||
# 转换为字符串
|
||||
cookie_str = "; ".join([f"{c['name']}={c['value']}" for c in cookies])
|
||||
|
||||
print(f"[自动Cookie] 成功获取 {len(cookies)} 个Cookie项")
|
||||
print(f"[自动Cookie] Cookie项: {', '.join([c['name'] for c in cookies])}")
|
||||
print(f"[自动Cookie] Cookie长度: {len(cookie_str)}")
|
||||
|
||||
# 保存
|
||||
try:
|
||||
with open(COOKIE_FILE, 'w', encoding='utf-8') as f:
|
||||
f.write(cookie_str)
|
||||
print(f"[自动Cookie] Cookie已保存")
|
||||
except Exception as e:
|
||||
print(f"[自动Cookie] 保存失败: {e}")
|
||||
|
||||
driver.quit()
|
||||
return cookie_str
|
||||
|
||||
except ImportError as e:
|
||||
print(f"[自动Cookie] 错误: selenium未安装 - {e}")
|
||||
print("[自动Cookie] 提示: 请运行 pip install selenium")
|
||||
return None
|
||||
except Exception as e:
|
||||
print(f"[自动Cookie] 错误: {e}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
return None
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("="*60)
|
||||
print("测试:自动获取Cookie(Edge本地驱动)")
|
||||
print("="*60)
|
||||
|
||||
cookie = get_douyin_cookie_auto(force_refresh=True, headless=False)
|
||||
|
||||
if cookie:
|
||||
print(f"\n成功!Cookie长度: {len(cookie)}")
|
||||
print(f"Cookie前200字符:\n{cookie[:200]}...")
|
||||
else:
|
||||
print("\n失败:无法获取Cookie")
|
||||
@@ -0,0 +1,131 @@
|
||||
import os
|
||||
import time
|
||||
|
||||
COOKIE_FILE = r"C:\Users\Administrator\Desktop\TikTokDownload-main\douyin_cookie.txt"
|
||||
|
||||
def get_douyin_cookie_auto(force_refresh=False, headless=True):
|
||||
"""
|
||||
自动获取抖音访客Cookie(使用Edge本地驱动)
|
||||
"""
|
||||
|
||||
# 检查是否已有Cookie且不需要强制刷新
|
||||
if not force_refresh and os.path.exists(COOKIE_FILE):
|
||||
try:
|
||||
with open(COOKIE_FILE, 'r', encoding='utf-8') as f:
|
||||
cookie = f.read().strip()
|
||||
if cookie and len(cookie) > 100:
|
||||
print("[自动Cookie] 使用已保存的Cookie")
|
||||
return cookie
|
||||
except Exception as e:
|
||||
print(f"[自动Cookie] 读取Cookie失败: {e}")
|
||||
|
||||
print("[自动Cookie] 开始自动获取...")
|
||||
|
||||
try:
|
||||
# 尝试使用selenium with本地Edge
|
||||
from selenium import webdriver
|
||||
from selenium.webdriver.edge.options import Options as EdgeOptions
|
||||
from selenium.webdriver.edge.service import Service as EdgeService
|
||||
|
||||
print("[自动Cookie] 启动Edge浏览器...")
|
||||
|
||||
options = EdgeOptions()
|
||||
|
||||
if headless:
|
||||
print("[自动Cookie] 使用无头模式...")
|
||||
options.add_argument("--headless")
|
||||
options.add_argument("--disable-gpu")
|
||||
|
||||
options.add_argument("--no-sandbox")
|
||||
options.add_argument("--disable-dev-shm-usage")
|
||||
options.add_argument("--disable-blink-features=AutomationControlled")
|
||||
options.add_experimental_option('excludeSwitches', ['enable-automation'])
|
||||
options.add_experimental_option('useAutomationExtension', False)
|
||||
|
||||
# 尝试使用系统Edge驱动
|
||||
try:
|
||||
# 方法1: 直接使用Edge(自动查找驱动)
|
||||
driver = webdriver.Edge(options=options)
|
||||
print("[自动Cookie] Edge浏览器启动成功(自动驱动)")
|
||||
except Exception as e1:
|
||||
print(f"[自动Cookie] 自动驱动失败: {e1}")
|
||||
|
||||
# 方法2: 尝试常见驱动路径
|
||||
common_paths = [
|
||||
r"C:\Program Files (x86)\Microsoft\Edge\Application\msedgedriver.exe",
|
||||
r"C:\Program Files\Microsoft\Edge\Application\msedgedriver.exe",
|
||||
os.path.expandvars(r"%PROGRAMFILES%\Microsoft\Edge\Application\msedgedriver.exe"),
|
||||
os.path.expandvars(r"%PROGRAMFILES(X86)%\Microsoft\Edge\Application\msedgedriver.exe"),
|
||||
]
|
||||
|
||||
driver = None
|
||||
for driver_path in common_paths:
|
||||
if os.path.exists(driver_path):
|
||||
print(f"[自动Cookie] 尝试使用驱动: {driver_path}")
|
||||
try:
|
||||
service = EdgeService(executable_path=driver_path)
|
||||
driver = webdriver.Edge(service=service, options=options)
|
||||
print("[自动Cookie] Edge浏览器启动成功(指定驱动)")
|
||||
break
|
||||
except Exception as e2:
|
||||
print(f"[自动Cookie] 驱动 {driver_path} 失败: {e2}")
|
||||
continue
|
||||
|
||||
if driver is None:
|
||||
raise Exception("无法找到可用的Edge驱动")
|
||||
|
||||
# 访问抖音
|
||||
print("[自动Cookie] 访问抖音网站...")
|
||||
driver.get("https://www.douyin.com")
|
||||
|
||||
print("[自动Cookie] 等待Cookie生成(5秒)...")
|
||||
time.sleep(5)
|
||||
|
||||
# 提取Cookie
|
||||
cookies = driver.get_cookies()
|
||||
|
||||
if not cookies:
|
||||
print("[自动Cookie] 警告: 未获取到Cookie")
|
||||
driver.quit()
|
||||
return None
|
||||
|
||||
# 转换为字符串
|
||||
cookie_str = "; ".join([f"{c['name']}={c['value']}" for c in cookies])
|
||||
|
||||
print(f"[自动Cookie] 成功获取 {len(cookies)} 个Cookie项")
|
||||
print(f"[自动Cookie] Cookie项: {', '.join([c['name'] for c in cookies])}")
|
||||
print(f"[自动Cookie] Cookie长度: {len(cookie_str)}")
|
||||
|
||||
# 保存
|
||||
try:
|
||||
with open(COOKIE_FILE, 'w', encoding='utf-8') as f:
|
||||
f.write(cookie_str)
|
||||
print(f"[自动Cookie] Cookie已保存")
|
||||
except Exception as e:
|
||||
print(f"[自动Cookie] 保存失败: {e}")
|
||||
|
||||
driver.quit()
|
||||
return cookie_str
|
||||
|
||||
except ImportError as e:
|
||||
print(f"[自动Cookie] 错误: selenium未安装 - {e}")
|
||||
print("[自动Cookie] 提示: 请运行 pip install selenium")
|
||||
return None
|
||||
except Exception as e:
|
||||
print(f"[自动Cookie] 错误: {e}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
return None
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("="*60)
|
||||
print("测试:自动获取Cookie(Edge本地驱动)")
|
||||
print("="*60)
|
||||
|
||||
cookie = get_douyin_cookie_auto(force_refresh=True, headless=False)
|
||||
|
||||
if cookie:
|
||||
print(f"\n成功!Cookie长度: {len(cookie)}")
|
||||
print(f"Cookie前200字符:\n{cookie[:200]}...")
|
||||
else:
|
||||
print("\n失败:无法获取Cookie")
|
||||
@@ -0,0 +1 @@
|
||||
odin_tt=0ab64014f8621dcc5185659a02a1da6d71c4e475608a68079d76e337e92f94d79faa3530852b4808b2a227ed12eed380648ebe917960b6ed3a0614221cfb3b4e427a497c8c7c3a96777e1275ad869f3c; passport_auth_mix_state=f4tq1dty1bdyou5gu1vadk0i7zff9c1fdkwurm514fvjmmn5; gulu_source_res=eyJwX2luIjoiY2U2ZGQ3NDE5YmRhYjA4ZTJhN2VmZDIwODlkMTA3YmJlZjUyZjUyYzYxMjVkMDliYjcyYmE3MGEzYWYxMjU4NCJ9; sdk_source_info=7e276470716a68645a606960273f276364697660272927676c715a6d6069756077273f276364697660272927666d776a68605a607d71606b766c6a6b5a7666776c7571273f275e58272927666a6b766a69605a696c6061273f27636469766027292762696a6764695a7364776c6467696076273f275e5927766069606b6c7068375927582729277672715a646971273f2763646976602729277f6b5a666475273f2763646976602729276d6a6e5a6b6a716c273f2763646976602729276c6b6f5a7f6367273f27636469766027292771273f273035343d313c32303137323234272927676c715a75776a716a666a69273f2763646976602778; ttwid=1%7C2WGJmIcw_oo6GaE4FyFjhCXzFdAN7H2clv8bpD27BE4%7C1772457948%7C1b6f2d6daf5b3891c74d69f3f166e319021d978f71e226547441aa4f9a179950; bd_ticket_guard_client_web_domain=2; stream_recommend_feed_params=%22%7B%5C%22cookie_enabled%5C%22%3Atrue%2C%5C%22screen_width%5C%22%3A2560%2C%5C%22screen_height%5C%22%3A1440%2C%5C%22browser_online%5C%22%3Atrue%2C%5C%22cpu_core_num%5C%22%3A16%2C%5C%22device_memory%5C%22%3A8%2C%5C%22downlink%5C%22%3A1.6%2C%5C%22effective_type%5C%22%3A%5C%224g%5C%22%2C%5C%22round_trip_time%5C%22%3A100%7D%22; __security_mc_1_s_sdk_crypt_sdk=9d5addaf-4008-8680; biz_trace_id=c1054347; passport_csrf_token_default=c00aa881509d4db8eed9eddfb1387df6; home_can_add_dy_2_desktop=%221%22; dy_sheight=1440; passport_csrf_token=c00aa881509d4db8eed9eddfb1387df6; dy_swidth=2560; __ac_nonce=069a58fd7009e5225d0ab; =douyin.com; fpk2=8369da3c75ccd12bc017791df73a85c8; IsDouyinActive=true; device_web_cpu_core=16; device_web_memory_size=8; s_v_web_id=verify_mm97p2om_E2hKT2qB_YVco_4Mbp_BWVJ_gDHlqlQuQp34; x-web-secsdk-uid=b8e6e6e8-1d67-402c-abcc-2c917dedb303; architecture=amd64; fpk1=U2FsdGVkX1/SKZb5paKgvDTF5ExF/c2DNCO31JgNuwVdCVw5IMStaxbt3S08U4USh9aph+H+OyLlIy9pwSBSWg==; UIFID_TEMP=c8c20d54553eadab8c678961c2b0df95555df87bbc6b890988ad105aec15abc0078f6c0f89a54645786d4847fe5d733279b7352837201c16eefe8fc2799fbabfd5e252217bf9357348e544c5eba770b8; strategyABtestKey=%221772457946.759%22; __ac_signature=_02B4Z6wo00f01DlZnjAAAIDADn1ab.omBNw5eZqAAGf6fc; bd_ticket_guard_client_data_v2=eyJyZWVfcHVibGljX2tleSI6IkJBKzgza2pPK2tYQTVJSUVxcWdzTTJjc0hFcE5YTjRkVjd0KzRNanVEYnh2MHhNSldVelV6UHpFa1dZS1FIMENubXhvQXBRSm9TdUd6dS9hNnhyQ3U3ST0iLCJyZXFfY29udGVudCI6InNlY190cyIsInJlcV9zaWduIjoiWWxYaURyMU1LNlNHUks2bG9RSFYzbFNrenk0Rmd4dnhDMW1kR0M1OFlQbz0iLCJzZWNfdHMiOiIjS3UxOXhNZVVtYm9TZDg5RUl3YlJCckNxSXZGTkRJSnZFbE1CT2Q3Z0JWREtWUGJzTUIwQlB4ZmJoOVQxIn0%3D; bd_ticket_guard_client_data=eyJiZC10aWNrZXQtZ3VhcmQtdmVyc2lvbiI6MiwiYmQtdGlja2V0LWd1YXJkLWl0ZXJhdGlvbi12ZXJzaW9uIjoxLCJiZC10aWNrZXQtZ3VhcmQtcmVlLXB1YmxpYy1rZXkiOiJCQSs4M2tqTytrWEE1SUlFcXFnc00yY3NIRXBOWE40ZFY3dCs0TWp1RGJ4djB4TUpXVXpVelB6RWtXWUtRSDBDbm14b0FwUUpvU3VHenUvYTZ4ckN1N0k9IiwiYmQtdGlja2V0LWd1YXJkLXdlYi12ZXJzaW9uIjoyfQ%3D%3D; bit_env=lkuQMjmHOSrwBMrTHzos5sS7xTBdgLBDG9q6GBCelYVM5pRuZfruudJONSvXd-727alZFIfxd8TT_4AktaJU1CWEOYNe7pYlqOt0ja_8t0onKmBsLmUlwdZecN8dVxa6Z6eJtdK4jtdCBjIbIv24BmS0I9kCiPMewHlKqzYGGdq-VR-96TTCbgnL3aUXyop5T0TKeSX-WObcCsv3xAUNFereInqEF_1d6NiFwMWz3P2DoVkEayemJ25kcnKDBzgkIsk-TkhNwyd16JYZphTpuKXbbaKSXUnQk8-p8fxCUFWsWTwYRXsJuqq4_9mtuvD0LZijvX4dwsjEPIXQZ4-CJnOeutft3Mvap75qIlSOERi90d3l-kBchx5oxZgnMZfc8d1vgG8oQKjYnhhzCrNc9ijGoS5I0kzaQBkJpmLXS4WHycoTb_cA2TqUp7pnaFRvXyrgrDUJoskNZpJDfCCxIN912fd56RCec-DhI3N3A40GWlMcbyPpVJcSPmRsBGx2rkANb8STYsH6VUKJgnMWYXLmV6BX1whLixHGRpJFt9c%3D; enter_pc_once=1
|
||||
+382
@@ -0,0 +1,382 @@
|
||||
import tkinter as tk
|
||||
from tkinter import ttk, filedialog, scrolledtext, messagebox
|
||||
import subprocess
|
||||
import threading
|
||||
import os
|
||||
import re
|
||||
|
||||
PYTHON_PATH = r"C:\Program Files\Python311\python.exe"
|
||||
COOKIE_FILE = r"C:\Users\Administrator\Desktop\TikTokDownload-main\douyin_cookie.txt"
|
||||
|
||||
class DouyinDownloaderUI:
|
||||
def __init__(self, root):
|
||||
self.root = root
|
||||
self.root.title("抖音去水印下载器 v3.0 (自动Cookie)")
|
||||
self.root.geometry("800x700")
|
||||
self.root.resizable(True, True)
|
||||
|
||||
self.download_dir = os.path.join(os.path.expanduser("~"), "Downloads", "DouyinDownloads")
|
||||
os.makedirs(self.download_dir, exist_ok=True)
|
||||
|
||||
self.is_downloading = False
|
||||
self.cookie = None
|
||||
|
||||
self.setup_ui()
|
||||
self.auto_load_cookie()
|
||||
|
||||
def auto_load_cookie(self):
|
||||
"""启动时自动加载Cookie"""
|
||||
if os.path.exists(COOKIE_FILE):
|
||||
try:
|
||||
with open(COOKIE_FILE, 'r', encoding='utf-8') as f:
|
||||
self.cookie = f.read().strip()
|
||||
if self.cookie and len(self.cookie) > 100:
|
||||
self.update_cookie_status(True)
|
||||
self.log("✓ 已自动加载Cookie", "SUCCESS")
|
||||
return
|
||||
except:
|
||||
pass
|
||||
|
||||
self.update_cookie_status(False)
|
||||
self.log("ℹ 未检测到Cookie,首次下载时将自动获取", "INFO")
|
||||
|
||||
def update_cookie_status(self, has_cookie):
|
||||
"""更新Cookie状态指示"""
|
||||
if has_cookie:
|
||||
self.cookie_status.config(text="● Cookie: 有效", foreground="green")
|
||||
self.cookie_entry.delete(0, tk.END)
|
||||
self.cookie_entry.insert(0, "[已自动获取Cookie]")
|
||||
else:
|
||||
self.cookie_status.config(text="● Cookie: 未获取", foreground="gray")
|
||||
|
||||
def setup_ui(self):
|
||||
style = ttk.Style()
|
||||
style.theme_use('clam')
|
||||
|
||||
main_frame = ttk.Frame(self.root, padding="15")
|
||||
main_frame.pack(fill=tk.BOTH, expand=True)
|
||||
|
||||
# Title
|
||||
title_label = ttk.Label(main_frame, text="抖音/TikTok 去水印下载器", font=('Microsoft YaHei', 18, 'bold'))
|
||||
title_label.pack(pady=(0, 5))
|
||||
|
||||
subtitle = ttk.Label(main_frame, text="自动Cookie | 无需登录 | 一键下载", font=('Microsoft YaHei', 10), foreground="gray")
|
||||
subtitle.pack(pady=(0, 10))
|
||||
|
||||
# Cookie Status Frame
|
||||
cookie_frame = ttk.LabelFrame(main_frame, text="Cookie状态", padding="10")
|
||||
cookie_frame.pack(fill=tk.X, pady=(0, 10))
|
||||
|
||||
self.cookie_status = ttk.Label(cookie_frame, text="● Cookie: 检测中...", font=('Microsoft YaHei', 10, 'bold'))
|
||||
self.cookie_status.pack(side=tk.LEFT, padx=5)
|
||||
|
||||
ttk.Button(cookie_frame, text="自动获取Cookie", command=self.auto_get_cookie_ui, width=15).pack(side=tk.LEFT, padx=10)
|
||||
|
||||
ttk.Label(cookie_frame, text="(首次下载时会自动获取,无需手动操作)",
|
||||
font=('Microsoft YaHei', 8), foreground="gray").pack(side=tk.LEFT, padx=5)
|
||||
|
||||
# Hidden Cookie Entry (for compatibility)
|
||||
self.cookie_entry = ttk.Entry(cookie_frame, width=20, state='disabled')
|
||||
|
||||
# URL Frame
|
||||
input_frame = ttk.LabelFrame(main_frame, text="下载设置", padding="10")
|
||||
input_frame.pack(fill=tk.X, pady=(0, 10))
|
||||
|
||||
ttk.Label(input_frame, text="分享链接:", font=('Microsoft YaHei', 10)).grid(row=0, column=0, sticky=tk.W, pady=5)
|
||||
self.url_entry = ttk.Entry(input_frame, width=80, font=('Microsoft YaHei', 10))
|
||||
self.url_entry.grid(row=0, column=1, padx=5, pady=5, sticky=tk.EW)
|
||||
self.url_entry.bind('<Control-v>', self.paste_clipboard)
|
||||
|
||||
ttk.Label(input_frame, text="下载模式:", font=('Microsoft YaHei', 10)).grid(row=1, column=0, sticky=tk.W, pady=5)
|
||||
self.mode_var = tk.StringVar(value="one")
|
||||
mode_frame = ttk.Frame(input_frame)
|
||||
mode_frame.grid(row=1, column=1, sticky=tk.W, padx=5, pady=5)
|
||||
|
||||
modes = [
|
||||
("单个作品", "one"),
|
||||
("用户主页", "post"),
|
||||
("用户喜欢", "like"),
|
||||
("用户收藏", "collects"),
|
||||
("直播", "live"),
|
||||
]
|
||||
|
||||
for i, (text, value) in enumerate(modes):
|
||||
rb = ttk.Radiobutton(mode_frame, text=text, value=value, variable=self.mode_var)
|
||||
rb.pack(side=tk.LEFT, padx=8)
|
||||
|
||||
ttk.Label(input_frame, text="保存目录:", font=('Microsoft YaHei', 10)).grid(row=2, column=0, sticky=tk.W, pady=5)
|
||||
dir_frame = ttk.Frame(input_frame)
|
||||
dir_frame.grid(row=2, column=1, sticky=tk.EW, padx=5, pady=5)
|
||||
|
||||
self.dir_entry = ttk.Entry(dir_frame, textvariable=tk.StringVar(value=self.download_dir), font=('Microsoft YaHei', 10))
|
||||
self.dir_entry.pack(side=tk.LEFT, fill=tk.X, expand=True)
|
||||
|
||||
ttk.Button(dir_frame, text="浏览", command=self.browse_dir, width=8).pack(side=tk.LEFT, padx=(5, 0))
|
||||
|
||||
input_frame.columnconfigure(1, weight=1)
|
||||
|
||||
# Options Frame
|
||||
options_frame = ttk.LabelFrame(main_frame, text="选项", padding="10")
|
||||
options_frame.pack(fill=tk.X, pady=(0, 10))
|
||||
|
||||
self.download_music = tk.BooleanVar(value=False)
|
||||
self.download_cover = tk.BooleanVar(value=False)
|
||||
|
||||
ttk.Checkbutton(options_frame, text="下载原声", variable=self.download_music).pack(side=tk.LEFT, padx=10)
|
||||
ttk.Checkbutton(options_frame, text="下载封面", variable=self.download_cover).pack(side=tk.LEFT, padx=10)
|
||||
|
||||
ttk.Label(options_frame, text="作品数量:").pack(side=tk.LEFT, padx=(20, 5))
|
||||
self.limit_entry = ttk.Entry(options_frame, width=8)
|
||||
self.limit_entry.insert(0, "0")
|
||||
self.limit_entry.pack(side=tk.LEFT)
|
||||
ttk.Label(options_frame, text="(0=全部)").pack(side=tk.LEFT, padx=5)
|
||||
|
||||
# Buttons
|
||||
btn_frame = ttk.Frame(main_frame)
|
||||
btn_frame.pack(fill=tk.X, pady=10)
|
||||
|
||||
self.download_btn = ttk.Button(btn_frame, text="开始下载", command=self.start_download)
|
||||
self.download_btn.pack(side=tk.LEFT, padx=5, ipadx=20, ipady=5)
|
||||
|
||||
self.stop_btn = ttk.Button(btn_frame, text="停止", command=self.stop_download, state=tk.DISABLED)
|
||||
self.stop_btn.pack(side=tk.LEFT, padx=5, ipadx=20, ipady=5)
|
||||
|
||||
ttk.Button(btn_frame, text="打开目录", command=self.open_download_dir).pack(side=tk.LEFT, padx=5)
|
||||
ttk.Button(btn_frame, text="清空日志", command=self.clear_log).pack(side=tk.RIGHT, padx=5)
|
||||
|
||||
# Log Frame
|
||||
log_frame = ttk.LabelFrame(main_frame, text="下载日志", padding="5")
|
||||
log_frame.pack(fill=tk.BOTH, expand=True)
|
||||
|
||||
self.log_text = scrolledtext.ScrolledText(log_frame, height=15, font=('Consolas', 9),
|
||||
bg='#1e1e1e', fg='#00ff00', insertbackground='white')
|
||||
self.log_text.pack(fill=tk.BOTH, expand=True)
|
||||
|
||||
# Progress
|
||||
self.progress_var = tk.DoubleVar()
|
||||
self.progress_bar = ttk.Progressbar(main_frame, variable=self.progress_var, maximum=100)
|
||||
self.progress_bar.pack(fill=tk.X, pady=(10, 0))
|
||||
|
||||
self.status_label = ttk.Label(main_frame, text="就绪", font=('Microsoft YaHei', 9))
|
||||
self.status_label.pack(pady=5)
|
||||
|
||||
def auto_get_cookie_ui(self):
|
||||
"""UI线程:自动获取Cookie"""
|
||||
self.log("正在自动获取Cookie...", "INFO")
|
||||
self.status_label.config(text="正在获取Cookie...")
|
||||
self.download_btn.config(state=tk.DISABLED)
|
||||
|
||||
thread = threading.Thread(target=self.auto_get_cookie_thread)
|
||||
thread.daemon = True
|
||||
thread.start()
|
||||
|
||||
def auto_get_cookie_thread(self):
|
||||
"""后台线程:自动获取Cookie"""
|
||||
try:
|
||||
from auto_cookie import get_douyin_cookie_auto
|
||||
|
||||
# 强制刷新,使用有界面模式(更稳定)
|
||||
cookie = get_douyin_cookie_auto(force_refresh=True, headless=False)
|
||||
|
||||
if cookie and len(cookie) > 100:
|
||||
self.cookie = cookie
|
||||
self.root.after(0, lambda: self.update_cookie_status(True))
|
||||
self.root.after(0, lambda: self.log("✓ Cookie获取成功!", "SUCCESS"))
|
||||
self.root.after(0, lambda: self.status_label.config(text="Cookie已就绪"))
|
||||
else:
|
||||
self.root.after(0, lambda: self.log("✗ Cookie获取失败", "ERROR"))
|
||||
self.root.after(0, lambda: self.status_label.config(text="Cookie获取失败"))
|
||||
|
||||
except Exception as e:
|
||||
self.root.after(0, lambda: self.log(f"✗ Cookie获取失败: {str(e)}", "ERROR"))
|
||||
self.root.after(0, lambda: self.status_label.config(text="Cookie获取失败"))
|
||||
finally:
|
||||
self.root.after(0, lambda: self.download_btn.config(state=tk.NORMAL))
|
||||
|
||||
def paste_clipboard(self, event=None):
|
||||
try:
|
||||
clipboard = self.root.clipboard_get()
|
||||
self.url_entry.delete(0, tk.END)
|
||||
self.url_entry.insert(0, clipboard)
|
||||
except:
|
||||
pass
|
||||
return "break"
|
||||
|
||||
def browse_dir(self):
|
||||
dir_path = filedialog.askdirectory(initialdir=self.download_dir)
|
||||
if dir_path:
|
||||
self.download_dir = dir_path
|
||||
self.dir_entry.delete(0, tk.END)
|
||||
self.dir_entry.insert(0, dir_path)
|
||||
|
||||
def open_download_dir(self):
|
||||
os.startfile(self.download_dir)
|
||||
|
||||
def clear_log(self):
|
||||
self.log_text.delete(1.0, tk.END)
|
||||
|
||||
def log(self, message, level="INFO"):
|
||||
self.log_text.insert(tk.END, f"[{level}] {message}\n")
|
||||
self.log_text.see(tk.END)
|
||||
self.root.update_idletasks()
|
||||
|
||||
def extract_url(self, text):
|
||||
match = re.search(r'https?://[^\s<>"{}|\\^`\[\]]+', text)
|
||||
if match:
|
||||
return match.group(0)
|
||||
return text
|
||||
|
||||
def ensure_cookie(self):
|
||||
"""确保有Cookie,如果没有则自动获取"""
|
||||
if self.cookie and len(self.cookie) > 100:
|
||||
return True
|
||||
|
||||
self.log("检测到无Cookie,正在自动获取...", "INFO")
|
||||
|
||||
try:
|
||||
from auto_cookie import get_douyin_cookie_auto
|
||||
|
||||
# 自动获取,使用无头模式(不打扰用户)
|
||||
cookie = get_douyin_cookie_auto(force_refresh=False, headless=True)
|
||||
|
||||
if cookie and len(cookie) > 100:
|
||||
self.cookie = cookie
|
||||
self.root.after(0, lambda: self.update_cookie_status(True))
|
||||
self.log("✓ Cookie自动获取成功", "SUCCESS")
|
||||
return True
|
||||
else:
|
||||
self.log("✗ 自动获取Cookie失败", "ERROR")
|
||||
return False
|
||||
|
||||
except Exception as e:
|
||||
self.log(f"✗ 自动获取Cookie失败: {str(e)}", "ERROR")
|
||||
return False
|
||||
|
||||
def start_download(self):
|
||||
url = self.url_entry.get().strip()
|
||||
if not url:
|
||||
messagebox.showwarning("提示", "请输入分享链接!")
|
||||
return
|
||||
|
||||
# 确保有Cookie
|
||||
if not self.ensure_cookie():
|
||||
messagebox.showerror("错误", "无法获取Cookie,请检查网络或浏览器是否正常")
|
||||
return
|
||||
|
||||
url = self.extract_url(url)
|
||||
self.log(f"解析链接: {url}", "INFO")
|
||||
|
||||
self.is_downloading = True
|
||||
self.download_btn.config(state=tk.DISABLED)
|
||||
self.stop_btn.config(state=tk.NORMAL)
|
||||
self.progress_var.set(0)
|
||||
|
||||
thread = threading.Thread(target=self.download_thread, args=(url,))
|
||||
thread.daemon = True
|
||||
thread.start()
|
||||
|
||||
def download_thread(self, url):
|
||||
try:
|
||||
self.log("开始下载任务...", "INFO")
|
||||
self.status_label.config(text="正在下载...")
|
||||
|
||||
cmd = [PYTHON_PATH, "-m", "f2", "dy"]
|
||||
|
||||
mode = self.mode_var.get()
|
||||
cmd.extend(["-M", mode])
|
||||
cmd.extend(["-u", url])
|
||||
|
||||
download_dir = self.dir_entry.get().strip()
|
||||
cmd.extend(["-p", download_dir])
|
||||
|
||||
# 使用自动获取的Cookie
|
||||
if self.cookie:
|
||||
cmd.extend(["-k", self.cookie])
|
||||
|
||||
if self.download_music.get():
|
||||
cmd.extend(["-m", "true"])
|
||||
if self.download_cover.get():
|
||||
cmd.extend(["-v", "true"])
|
||||
|
||||
limit = self.limit_entry.get().strip()
|
||||
if limit and limit != "0":
|
||||
cmd.extend(["-o", limit])
|
||||
|
||||
self.log("执行下载命令...", "INFO")
|
||||
|
||||
env = os.environ.copy()
|
||||
env["PYTHONIOENCODING"] = "utf-8"
|
||||
|
||||
process = subprocess.Popen(
|
||||
cmd,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.STDOUT,
|
||||
text=True,
|
||||
encoding='utf-8',
|
||||
errors='replace',
|
||||
env=env,
|
||||
bufsize=1
|
||||
)
|
||||
|
||||
download_failed = False
|
||||
|
||||
while self.is_downloading:
|
||||
if process.stdout is None:
|
||||
break
|
||||
|
||||
line = process.stdout.readline()
|
||||
if not line and process.poll() is not None:
|
||||
break
|
||||
|
||||
if line:
|
||||
line = line.strip()
|
||||
if line:
|
||||
self.log(line, "INFO")
|
||||
|
||||
if "下载" in line or "成功" in line or "保存" in line:
|
||||
self.progress_var.set(min(self.progress_var.get() + 10, 90))
|
||||
|
||||
# 检测Cookie相关的错误
|
||||
if "cookie" in line.lower() or "登录" in line or "失败" in line:
|
||||
download_failed = True
|
||||
|
||||
if not self.is_downloading:
|
||||
process.terminate()
|
||||
self.log("下载已停止", "WARNING")
|
||||
elif process.returncode == 0:
|
||||
self.progress_var.set(100)
|
||||
self.log("✓ 下载完成!", "SUCCESS")
|
||||
self.status_label.config(text="下载完成!")
|
||||
self.root.after(0, lambda: messagebox.showinfo("完成", f"下载完成!\n\n保存位置: {download_dir}"))
|
||||
elif download_failed:
|
||||
self.log("检测到Cookie可能过期,尝试刷新...", "WARNING")
|
||||
# 重新获取Cookie
|
||||
from auto_cookie import get_douyin_cookie_auto
|
||||
new_cookie = get_douyin_cookie_auto(force_refresh=True, headless=True)
|
||||
if new_cookie:
|
||||
self.cookie = new_cookie
|
||||
self.log("Cookie已刷新,请重试下载", "INFO")
|
||||
self.status_label.config(text="Cookie已刷新,请重试")
|
||||
else:
|
||||
self.log("下载过程中出现错误", "WARNING")
|
||||
self.status_label.config(text="下载失败")
|
||||
|
||||
except Exception as e:
|
||||
self.log(f"错误: {str(e)}", "ERROR")
|
||||
self.status_label.config(text="下载失败")
|
||||
self.root.after(0, lambda: messagebox.showerror("错误", f"下载失败:\n{str(e)}"))
|
||||
finally:
|
||||
self.is_downloading = False
|
||||
self.download_btn.config(state=tk.NORMAL)
|
||||
self.stop_btn.config(state=tk.DISABLED)
|
||||
|
||||
def stop_download(self):
|
||||
self.is_downloading = False
|
||||
|
||||
def main():
|
||||
root = tk.Tk()
|
||||
app = DouyinDownloaderUI(root)
|
||||
root.mainloop()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,156 @@
|
||||
import requests
|
||||
import re
|
||||
import os
|
||||
import json
|
||||
import time
|
||||
from urllib.parse import unquote
|
||||
|
||||
COOKIE_FILE = r"C:\Users\Administrator\Desktop\TikTokDownload-main\douyin_cookie.txt"
|
||||
|
||||
def get_or_load_cookie():
|
||||
"""Get cookie from file or prompt user"""
|
||||
if os.path.exists(COOKIE_FILE):
|
||||
with open(COOKIE_FILE, 'r', encoding='utf-8') as f:
|
||||
cookie = f.read().strip()
|
||||
if cookie:
|
||||
print(f"Loaded cookie from {COOKIE_FILE}")
|
||||
return cookie
|
||||
|
||||
print("\n" + "="*60)
|
||||
print("需要Cookie才能下载抖音视频!")
|
||||
print("="*60)
|
||||
print("\n获取Cookie步骤:")
|
||||
print("1. 打开Chrome/Edge浏览器,访问 www.douyin.com 并登录")
|
||||
print("2. 按F12打开开发者工具")
|
||||
print("3. 点击'网络'(Network)标签")
|
||||
print("4. 刷新页面")
|
||||
print("5. 点击列表中的任意一个请求")
|
||||
print("6. 在右侧'请求标头'(Request Headers)中找到Cookie")
|
||||
print("7. 复制整个Cookie值(很长的一串)")
|
||||
print("\n" + "="*60)
|
||||
|
||||
cookie = input("\n请粘贴Cookie (直接回车跳过): ").strip()
|
||||
|
||||
if cookie:
|
||||
# Save cookie for future use
|
||||
with open(COOKIE_FILE, 'w', encoding='utf-8') as f:
|
||||
f.write(cookie)
|
||||
print(f"Cookie已保存到 {COOKIE_FILE}")
|
||||
return cookie
|
||||
|
||||
return None
|
||||
|
||||
def download_with_cookie(share_url, cookie, save_dir=r"C:\Users\Administrator\Desktop\TestDownload"):
|
||||
"""Download using provided cookie"""
|
||||
os.makedirs(save_dir, exist_ok=True)
|
||||
|
||||
session = requests.Session()
|
||||
|
||||
headers = {
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
|
||||
'Cookie': cookie,
|
||||
'Referer': 'https://www.douyin.com/',
|
||||
'Accept': 'application/json, text/plain, */*',
|
||||
}
|
||||
session.headers.update(headers)
|
||||
|
||||
# Get video ID
|
||||
print(f"\n获取视频ID...")
|
||||
resp = session.get(share_url, allow_redirects=True)
|
||||
final_url = resp.url
|
||||
print(f"URL: {final_url}")
|
||||
|
||||
match = re.search(r'/video/(\d+)', final_url)
|
||||
if not match:
|
||||
match = re.search(r'video[=/](\d{19})', final_url)
|
||||
|
||||
if not match:
|
||||
print("无法提取视频ID")
|
||||
return False
|
||||
|
||||
video_id = match.group(1)
|
||||
print(f"视频ID: {video_id}")
|
||||
|
||||
# Try using f2 with the cookie
|
||||
print(f"\n使用f2下载...")
|
||||
import subprocess
|
||||
cmd = [
|
||||
r"C:\Program Files\Python311\python.exe",
|
||||
"-m", "f2", "dy",
|
||||
"-M", "one",
|
||||
"-u", share_url,
|
||||
"-p", save_dir,
|
||||
"-k", cookie,
|
||||
]
|
||||
|
||||
result = subprocess.run(cmd, capture_output=True, text=True, encoding='utf-8', errors='replace')
|
||||
print(result.stdout)
|
||||
|
||||
if result.returncode == 0:
|
||||
print("\n✓ 下载完成!")
|
||||
return True
|
||||
else:
|
||||
print(f"\n错误: {result.stderr}")
|
||||
|
||||
# If f2 fails, try direct method
|
||||
print("\n尝试直接下载...")
|
||||
|
||||
# Get video detail API
|
||||
api_url = f"https://www.douyin.com/aweme/v1/web/aweme/detail/?aweme_id={video_id}&aid=6383&cookie_enabled=true"
|
||||
|
||||
resp = session.get(api_url)
|
||||
print(f"API状态: {resp.status_code}")
|
||||
|
||||
if resp.status_code == 200 and resp.text:
|
||||
try:
|
||||
data = resp.json()
|
||||
if 'aweme_detail' in data:
|
||||
aweme = data['aweme_detail']
|
||||
|
||||
# Get video URL
|
||||
video_info = aweme.get('video', {})
|
||||
play_addr = video_info.get('play_addr', {})
|
||||
url_list = play_addr.get('url_list', [])
|
||||
|
||||
if url_list:
|
||||
video_url = url_list[0]
|
||||
desc = aweme.get('desc', 'video')
|
||||
desc = re.sub(r'[\\/:*?"<>|]', '_', desc)[:50]
|
||||
|
||||
print(f"\n下载视频...")
|
||||
video_resp = session.get(video_url)
|
||||
|
||||
if video_resp.status_code == 200 and len(video_resp.content) > 50000:
|
||||
filename = f"{desc}_{video_id}.mp4"
|
||||
filepath = os.path.join(save_dir, filename)
|
||||
|
||||
with open(filepath, 'wb') as f:
|
||||
f.write(video_resp.content)
|
||||
|
||||
print(f"\n✓ 下载成功!")
|
||||
print(f" 文件: {filepath}")
|
||||
print(f" 大小: {len(video_resp.content) / 1024 / 1024:.2f} MB")
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
print(f"解析错误: {e}")
|
||||
|
||||
return False
|
||||
|
||||
def download_douyin_video(share_url, save_dir=r"C:\Users\Administrator\Desktop\TestDownload"):
|
||||
"""Main download function"""
|
||||
|
||||
cookie = get_or_load_cookie()
|
||||
|
||||
if cookie:
|
||||
return download_with_cookie(share_url, cookie, save_dir)
|
||||
else:
|
||||
print("\n未提供Cookie,尝试无Cookie下载...")
|
||||
print("(可能无法成功)\n")
|
||||
|
||||
# Try without cookie as last resort
|
||||
return download_with_cookie(share_url, "", save_dir)
|
||||
|
||||
if __name__ == "__main__":
|
||||
url = "https://v.douyin.com/R5doyi5_cTk/"
|
||||
download_douyin_video(url)
|
||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 29 KiB |
@@ -0,0 +1 @@
|
||||
f2
|
||||
@@ -0,0 +1,2 @@
|
||||
cd Server
|
||||
py Server.py
|
||||
@@ -0,0 +1,2 @@
|
||||
cd Server
|
||||
python3 Server.py
|
||||
@@ -0,0 +1,261 @@
|
||||
import requests
|
||||
import re
|
||||
import os
|
||||
import json
|
||||
import time
|
||||
from urllib.parse import unquote
|
||||
|
||||
def download_douyin_final(share_url, save_dir=r"C:\Users\Administrator\Desktop\TestDownload"):
|
||||
"""
|
||||
Final attempt using multiple approaches
|
||||
"""
|
||||
os.makedirs(save_dir, exist_ok=True)
|
||||
|
||||
session = requests.Session()
|
||||
|
||||
# Step 1: Get video ID
|
||||
print("Step 1: Getting video ID...")
|
||||
headers_mobile = {
|
||||
'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 10 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/046291 Mobile Safari/537.36 MicroMessenger/8.0.1.1841(0x2800015D) Process/app WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64',
|
||||
}
|
||||
session.headers.update(headers_mobile)
|
||||
|
||||
resp = session.get(share_url, allow_redirects=True)
|
||||
final_url = resp.url
|
||||
print(f"Final URL: {final_url}")
|
||||
|
||||
match = re.search(r'/video/(\d+)', final_url)
|
||||
if not match:
|
||||
match = re.search(r'video[=/](\d{19})', final_url)
|
||||
|
||||
if not match:
|
||||
print("Cannot extract video ID")
|
||||
return False
|
||||
|
||||
video_id = match.group(1)
|
||||
print(f"Video ID: {video_id}")
|
||||
|
||||
# Step 2: Try to get video info from iesdouyin HTML
|
||||
print("\nStep 2: Parsing share page...")
|
||||
|
||||
html = resp.text
|
||||
|
||||
# Method 1: Look for ROUTER_DATA
|
||||
router_match = re.search(r'ROUTER_DATA\s*=\s*(\{.+?\})\s*;\s*</script>', html, re.DOTALL)
|
||||
if router_match:
|
||||
try:
|
||||
router_data = json.loads(router_match.group(1))
|
||||
print("Found ROUTER_DATA")
|
||||
|
||||
# Navigate the data structure
|
||||
if 'loaderData' in router_data:
|
||||
for key, val in router_data['loaderData'].items():
|
||||
if 'video' in key.lower() or 'aweme' in key.lower():
|
||||
print(f"Checking {key}...")
|
||||
result = extract_and_download(val, video_id, session, save_dir)
|
||||
if result:
|
||||
return True
|
||||
except Exception as e:
|
||||
print(f"ROUTER_DATA parse error: {e}")
|
||||
|
||||
# Method 2: Try direct video URLs in HTML
|
||||
print("\nMethod 2: Looking for video URLs in HTML...")
|
||||
|
||||
# Look for play_addr patterns
|
||||
patterns = [
|
||||
r'"playAddr"\s*:\s*\[\s*\{\s*"src"\s*:\s*"([^"]+)"',
|
||||
r'"play_addr"\s*:\s*\{\s*"url_list"\s*:\s*\[\s*"([^"]+)"',
|
||||
r'"url_list"\s*:\s*\[\s*"(https?://[^"]+\.douyinvod\.com[^"]*)"',
|
||||
r'"src"\s*:\s*"(https?://[^"]+\.douyinvod\.com[^"]*)"',
|
||||
r'(https?://v[0-9]+-[0-9a-z]+\.douyinvod\.com/[a-f0-9/]+\.mp4[^"\'\s]*)',
|
||||
]
|
||||
|
||||
for pattern in patterns:
|
||||
matches = re.findall(pattern, html)
|
||||
if matches:
|
||||
print(f"Found {len(matches)} matches with pattern: {pattern[:40]}...")
|
||||
for match in matches[:3]:
|
||||
video_url = match.replace('\\u002F', '/').replace('\\/', '/')
|
||||
print(f" URL: {video_url[:80]}...")
|
||||
|
||||
if 'douyinvod' in video_url or '.mp4' in video_url:
|
||||
result = try_download(video_url, video_id, session, save_dir)
|
||||
if result:
|
||||
return True
|
||||
|
||||
# Method 3: Try the aweme iteminfo API with proper headers
|
||||
print("\nMethod 3: Trying aweme iteminfo API...")
|
||||
|
||||
api_url = f"https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids={video_id}&count=1"
|
||||
|
||||
api_headers = {
|
||||
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1',
|
||||
'Referer': f'https://www.iesdouyin.com/share/video/{video_id}',
|
||||
'Accept': 'application/json',
|
||||
}
|
||||
|
||||
resp = session.get(api_url, headers=api_headers)
|
||||
print(f"API status: {resp.status_code}")
|
||||
|
||||
if resp.status_code == 200 and resp.text:
|
||||
try:
|
||||
data = resp.json()
|
||||
if data.get('status_code') == 0 and data.get('item_list'):
|
||||
item = data['item_list'][0]
|
||||
return extract_and_download({'item': item}, video_id, session, save_dir)
|
||||
else:
|
||||
print(f"API response: {json.dumps(data, ensure_ascii=False)[:200]}")
|
||||
except Exception as e:
|
||||
print(f"API parse error: {e}")
|
||||
print(f"Response: {resp.text[:200]}")
|
||||
|
||||
# Method 4: Try embed page
|
||||
print("\nMethod 4: Trying embed page...")
|
||||
|
||||
embed_url = f"https://www.douyin.com/embed/video/{video_id}"
|
||||
embed_headers = {
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
|
||||
'Accept': 'text/html,application/xhtml+xml,application/xml',
|
||||
}
|
||||
|
||||
resp = session.get(embed_url, headers=embed_headers)
|
||||
if resp.status_code == 200:
|
||||
# Look for video src in embed page
|
||||
video_src = re.search(r'<video[^>]*src=["\']([^"\']+)["\']', resp.text)
|
||||
if video_src:
|
||||
video_url = video_src.group(1)
|
||||
print(f"Found video src: {video_url[:80]}...")
|
||||
return try_download(video_url, video_id, session, save_dir)
|
||||
|
||||
print("\nAll methods failed.")
|
||||
print("\nThe video likely requires authentication.")
|
||||
print("Please try the following:")
|
||||
print("1. Open Chrome/Edge and go to www.douyin.com")
|
||||
print("2. Login to your account")
|
||||
print("3. Press F12 -> Network -> Refresh page")
|
||||
print("4. Click any request -> Headers -> Copy Cookie value")
|
||||
print("5. Use that cookie with the download tool")
|
||||
|
||||
return False
|
||||
|
||||
def extract_and_download(data, video_id, session, save_dir):
|
||||
"""Extract video URL from data and download"""
|
||||
|
||||
def find_video_url(obj):
|
||||
if isinstance(obj, dict):
|
||||
# Check common video URL locations
|
||||
for key in ['play_addr', 'playAddr', 'video_url', 'download_addr', 'downloadAddr']:
|
||||
if key in obj:
|
||||
val = obj[key]
|
||||
if isinstance(val, dict):
|
||||
url_list = val.get('url_list') or val.get('urlList') or val.get('url_list', [])
|
||||
if url_list and isinstance(url_list, list):
|
||||
return url_list[0]
|
||||
elif isinstance(val, str):
|
||||
return val
|
||||
elif isinstance(val, list):
|
||||
if val and isinstance(val[0], dict) and 'src' in val[0]:
|
||||
return val[0]['src']
|
||||
|
||||
# Check for video object
|
||||
if 'video' in obj:
|
||||
result = find_video_url(obj['video'])
|
||||
if result:
|
||||
return result
|
||||
|
||||
# Recurse
|
||||
for v in obj.values():
|
||||
result = find_video_url(v)
|
||||
if result:
|
||||
return result
|
||||
|
||||
elif isinstance(obj, list):
|
||||
for item in obj:
|
||||
result = find_video_url(item)
|
||||
if result:
|
||||
return result
|
||||
|
||||
return None
|
||||
|
||||
def find_desc(obj):
|
||||
if isinstance(obj, dict):
|
||||
if 'desc' in obj and isinstance(obj['desc'], str):
|
||||
return obj['desc']
|
||||
for v in obj.values():
|
||||
result = find_desc(v)
|
||||
if result:
|
||||
return result
|
||||
elif isinstance(obj, list):
|
||||
for item in obj:
|
||||
result = find_desc(item)
|
||||
if result:
|
||||
return result
|
||||
return None
|
||||
|
||||
video_url = find_video_url(data)
|
||||
|
||||
if video_url:
|
||||
desc = find_desc(data) or "douyin_video"
|
||||
desc = re.sub(r'[\\/:*?"<>|]', '_', desc)[:50]
|
||||
|
||||
return try_download(video_url, video_id, session, save_dir, desc)
|
||||
|
||||
return False
|
||||
|
||||
def try_download(video_url, video_id, session, save_dir, desc="douyin_video"):
|
||||
"""Attempt to download video from URL"""
|
||||
|
||||
# Clean URL
|
||||
video_url = video_url.replace('\\u002F', '/').replace('\\/', '/')
|
||||
video_url = unquote(video_url)
|
||||
|
||||
# Try to get non-watermarked version
|
||||
video_url = video_url.replace('playwm', 'play')
|
||||
|
||||
print(f"\nAttempting download from: {video_url[:100]}...")
|
||||
|
||||
headers = {
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
|
||||
'Referer': 'https://www.douyin.com/',
|
||||
}
|
||||
|
||||
try:
|
||||
resp = session.get(video_url, headers=headers, stream=True, timeout=30)
|
||||
|
||||
print(f"Response status: {resp.status_code}")
|
||||
print(f"Content-Type: {resp.headers.get('Content-Type', 'unknown')}")
|
||||
print(f"Content-Length: {resp.headers.get('Content-Length', 'unknown')}")
|
||||
|
||||
if resp.status_code == 200:
|
||||
# Check if it's actually a video
|
||||
content_type = resp.headers.get('Content-Type', '')
|
||||
content_length = int(resp.headers.get('Content-Length', 0))
|
||||
|
||||
if 'video' in content_type or content_length > 50000:
|
||||
filename = f"{desc}_{video_id}.mp4"
|
||||
filepath = os.path.join(save_dir, filename)
|
||||
|
||||
downloaded = 0
|
||||
with open(filepath, 'wb') as f:
|
||||
for chunk in resp.iter_content(chunk_size=8192):
|
||||
if chunk:
|
||||
f.write(chunk)
|
||||
downloaded += len(chunk)
|
||||
|
||||
file_size = os.path.getsize(filepath)
|
||||
print(f"\n✓ SUCCESS!")
|
||||
print(f" File: {filepath}")
|
||||
print(f" Size: {file_size / 1024 / 1024:.2f} MB")
|
||||
return True
|
||||
else:
|
||||
print(f"Response doesn't appear to be a video file")
|
||||
print(f"First 200 bytes: {resp.content[:200]}")
|
||||
|
||||
except Exception as e:
|
||||
print(f"Download error: {e}")
|
||||
|
||||
return False
|
||||
|
||||
if __name__ == "__main__":
|
||||
url = "https://v.douyin.com/R5doyi5_cTk/"
|
||||
download_douyin_final(url)
|
||||
@@ -0,0 +1,105 @@
|
||||
import sys
|
||||
import os
|
||||
import time
|
||||
import subprocess
|
||||
|
||||
# 设置UTF-8编码
|
||||
os.environ['PYTHONIOENCODING'] = 'utf-8'
|
||||
|
||||
# 添加项目路径
|
||||
sys.path.insert(0, r"C:\Users\Administrator\Desktop\TikTokDownload-main")
|
||||
|
||||
from auto_cookie import get_douyin_cookie_auto
|
||||
|
||||
def test_auto_download():
|
||||
"""测试完整的自动下载流程"""
|
||||
print("="*60)
|
||||
print("自动下载测试")
|
||||
print("="*60)
|
||||
|
||||
# 步骤1: 自动获取Cookie
|
||||
print("\n[步骤1] 自动获取Cookie")
|
||||
cookie = get_douyin_cookie_auto(force_refresh=True)
|
||||
|
||||
if not cookie:
|
||||
print("错误: Cookie获取失败")
|
||||
return False
|
||||
|
||||
print(f"成功: Cookie长度 {len(cookie)}")
|
||||
print(f"Cookie内容: {cookie}")
|
||||
|
||||
# 步骤2: 使用Cookie下载视频
|
||||
print("\n[步骤2] 使用Cookie下载视频")
|
||||
|
||||
test_url = "https://v.douyin.com/R5doyi5_cTk/"
|
||||
save_dir = r"C:\Users\Administrator\Desktop\TestDownload"
|
||||
|
||||
cmd = [
|
||||
r"C:\Program Files\Python311\python.exe",
|
||||
"-m", "f2", "dy",
|
||||
"-M", "one",
|
||||
"-u", test_url,
|
||||
"-p", save_dir,
|
||||
"-k", cookie,
|
||||
]
|
||||
|
||||
print(f"下载链接: {test_url}")
|
||||
print(f"保存目录: {save_dir}")
|
||||
print("开始下载...\n")
|
||||
|
||||
try:
|
||||
env = os.environ.copy()
|
||||
env['PYTHONIOENCODING'] = 'utf-8'
|
||||
|
||||
process = subprocess.Popen(
|
||||
cmd,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.STDOUT,
|
||||
env=env,
|
||||
text=True,
|
||||
encoding='utf-8',
|
||||
errors='replace'
|
||||
)
|
||||
|
||||
# 实时输出
|
||||
for line in process.stdout:
|
||||
print(line.rstrip())
|
||||
|
||||
process.wait()
|
||||
|
||||
if process.returncode == 0:
|
||||
print("\n成功: 下载完成!")
|
||||
|
||||
# 检查文件是否存在
|
||||
if os.path.exists(save_dir):
|
||||
files = [f for f in os.listdir(save_dir) if f.endswith('.mp4')]
|
||||
if files:
|
||||
print(f"下载的文件: {files}")
|
||||
for f in files:
|
||||
filepath = os.path.join(save_dir, f)
|
||||
size = os.path.getsize(filepath) / 1024 / 1024
|
||||
print(f" - {f} ({size:.2f} MB)")
|
||||
|
||||
return True
|
||||
else:
|
||||
print(f"\n错误: 下载失败,返回码 {process.returncode}")
|
||||
return False
|
||||
|
||||
except subprocess.TimeoutExpired:
|
||||
print("错误: 下载超时")
|
||||
return False
|
||||
except Exception as e:
|
||||
print(f"错误: {e}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
return False
|
||||
|
||||
if __name__ == "__main__":
|
||||
success = test_auto_download()
|
||||
|
||||
print("\n" + "="*60)
|
||||
if success:
|
||||
print("测试结果: 成功 - 自动Cookie功能正常工作")
|
||||
else:
|
||||
print("测试结果: 失败")
|
||||
print("="*60)
|
||||
@@ -0,0 +1,40 @@
|
||||
import browser_cookie3
|
||||
import subprocess
|
||||
import os
|
||||
|
||||
browsers = [
|
||||
("Edge", browser_cookie3.edge),
|
||||
("Chrome", browser_cookie3.chrome),
|
||||
("Firefox", browser_cookie3.firefox),
|
||||
("Chromium", browser_cookie3.chromium),
|
||||
("Opera", browser_cookie3.opera),
|
||||
]
|
||||
|
||||
for name, func in browsers:
|
||||
try:
|
||||
print(f"Try {name}...")
|
||||
cookies = func(domain_name='douyin.com')
|
||||
cookie_str = '; '.join([f'{c.name}={c.value}' for c in cookies])
|
||||
if cookie_str:
|
||||
print(f"SUCCESS from {name}!")
|
||||
print(f"Cookie length: {len(cookie_str)}")
|
||||
|
||||
# Test download
|
||||
url = "https://v.douyin.com/R5doyi5_cTk/"
|
||||
cmd = [
|
||||
r"C:\Program Files\Python311\python.exe",
|
||||
"-m", "f2", "dy",
|
||||
"-M", "one",
|
||||
"-u", url,
|
||||
"-p", r"C:\Users\Administrator\Desktop\TestDownload",
|
||||
"-k", cookie_str,
|
||||
]
|
||||
|
||||
print("Starting download...")
|
||||
result = subprocess.run(cmd, capture_output=True, text=True, encoding='utf-8', errors='replace')
|
||||
print(result.stdout)
|
||||
if result.stderr:
|
||||
print("STDERR:", result.stderr)
|
||||
break
|
||||
except Exception as e:
|
||||
print(f"{name} failed: {e}")
|
||||
@@ -0,0 +1,71 @@
|
||||
import requests
|
||||
import re
|
||||
import json
|
||||
import os
|
||||
|
||||
headers = {
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
|
||||
'Referer': 'https://www.douyin.com/',
|
||||
}
|
||||
|
||||
def get_video_info(share_url):
|
||||
session = requests.Session()
|
||||
session.headers.update(headers)
|
||||
|
||||
# Get redirect URL
|
||||
resp = session.get(share_url, allow_redirects=False)
|
||||
location = resp.headers.get('Location', '')
|
||||
print(f"Redirect to: {location}")
|
||||
|
||||
if location:
|
||||
# Extract video ID from URL
|
||||
match = re.search(r'/video/(\d+)', location)
|
||||
if match:
|
||||
video_id = match.group(1)
|
||||
print(f"Video ID: {video_id}")
|
||||
return video_id
|
||||
|
||||
return None
|
||||
|
||||
def get_douyin_video_direct(share_url):
|
||||
session = requests.Session()
|
||||
session.headers.update({
|
||||
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1'
|
||||
})
|
||||
|
||||
# Follow redirects to get the actual video page
|
||||
resp = session.get(share_url, allow_redirects=True)
|
||||
print(f"Final URL: {resp.url}")
|
||||
|
||||
# Try to find video URL in page source
|
||||
html = resp.text
|
||||
|
||||
# Look for render_data
|
||||
match = re.search(r'ROUTER_DATA\s*=\s*(\{.+?\})\s*</script>', html, re.DOTALL)
|
||||
if match:
|
||||
try:
|
||||
data = json.loads(match.group(1))
|
||||
print("Found router data!")
|
||||
print(json.dumps(data, indent=2, ensure_ascii=False)[:2000])
|
||||
except:
|
||||
pass
|
||||
|
||||
# Try another pattern
|
||||
match = re.search(r'_ROUTER_DATA\s*=\s*({.*?})\s*;', html, re.DOTALL)
|
||||
if match:
|
||||
try:
|
||||
data = json.loads(match.group(1))
|
||||
print("Found _ROUTER_DATA!")
|
||||
# Navigate to video info
|
||||
if 'loaderData' in data:
|
||||
for key, value in data['loaderData'].items():
|
||||
if 'aweme' in key.lower():
|
||||
print(f"Found aweme data in {key}")
|
||||
print(json.dumps(value, indent=2, ensure_ascii=False)[:3000])
|
||||
except Exception as e:
|
||||
print(f"Parse error: {e}")
|
||||
|
||||
# Test
|
||||
url = "https://v.douyin.com/R5doyi5_cTk/"
|
||||
video_id = get_video_info(url)
|
||||
get_douyin_video_direct(url)
|
||||
@@ -0,0 +1,32 @@
|
||||
@echo off
|
||||
chcp 65001 >nul
|
||||
cd /d "%~dp0"
|
||||
|
||||
echo ====================================
|
||||
echo Douyin Downloader v3.0
|
||||
echo Auto Cookie - No Login Required
|
||||
echo ====================================
|
||||
echo.
|
||||
|
||||
if not exist "C:\Program Files\Python311\python.exe" (
|
||||
echo [ERROR] Python not found
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo [CHECK] Checking dependencies...
|
||||
"C:\Program Files\Python311\python.exe" -c "import selenium" 2>nul
|
||||
if errorlevel 1 (
|
||||
echo [INSTALL] Installing dependencies...
|
||||
"C:\Program Files\Python311\python.exe" -m pip install selenium webdriver-manager -q
|
||||
echo [INSTALL] Done
|
||||
)
|
||||
|
||||
echo [START] Launching...
|
||||
"C:\Program Files\Python311\python.exe" douyin_ui.py
|
||||
|
||||
if errorlevel 1 (
|
||||
echo.
|
||||
echo [ERROR] Program error
|
||||
pause
|
||||
)
|
||||
Reference in New Issue
Block a user