commit 0f3dd8f2871d5171437cb1723a86c082f5940ba2
Author: 237899745 <237899745@qq.com>
Date: Mon Mar 2 21:42:52 2026 +0800
Add Douyin video downloader with auto-cookie feature
diff --git a/.github/ISSUE_TEMPLATE/--------.md b/.github/ISSUE_TEMPLATE/--------.md
new file mode 100644
index 0000000..22b4ac8
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/--------.md
@@ -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`。
+
+
+**详细描述错误**
+简明扼要地描述遇到的错误。
+
+**系统平台**
+
+单击展开
+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]
+
+
+
+**错误重现**
+
+单击展开
+Q: 请你复制并粘贴出错时运行的命令和配置文件内容,以及重现该行为的步骤。如果你一次性就提供完整信息,就会节省很多解决问题的时间。
+
+A:
+
+1.
+2.
+3.
+
+Q: 请添加调试命令`f2 -d DEBUG`重新运行出错的命令并提供日志目录下的日志文件。
+
+A:
+
+Q: 如果是开发者请提供最小的代码示例
+
+A:
+
+```python
+
+```
+
+
+
+**预期行为**
+简明扼要地描述期望发生的事情。
+
+**屏幕截图**
+请添加截图以帮助解释你的问题。
+
+**日志文件**
+请添加调试日志文件以帮助解释你的问题。
+
+**其他**
+如有,可以添加有关问题的其他信息。
diff --git a/.github/ISSUE_TEMPLATE/-------.md b/.github/ISSUE_TEMPLATE/-------.md
new file mode 100644
index 0000000..0a47b90
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/-------.md
@@ -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:
+
+**其他**
+如有,请添加有关功能请求的任何其他内容或截图。
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..8a440f2
--- /dev/null
+++ b/.gitignore
@@ -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
\ No newline at end of file
diff --git a/API/TikTokTool.txt b/API/TikTokTool.txt
new file mode 100644
index 0000000..ade4452
--- /dev/null
+++ b/API/TikTokTool.txt
@@ -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])])
+ ]
+)
\ No newline at end of file
diff --git a/API/user_base_info.json b/API/user_base_info.json
new file mode 100644
index 0000000..2f9352d
--- /dev/null
+++ b/API/user_base_info.json
@@ -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"
+ }
+}
\ No newline at end of file
diff --git a/API/user_post_delete.json b/API/user_post_delete.json
new file mode 100644
index 0000000..954ac99
--- /dev/null
+++ b/API/user_post_delete.json
@@ -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
+}
\ No newline at end of file
diff --git a/API/user_post_detail.json b/API/user_post_detail.json
new file mode 100644
index 0000000..c024729
--- /dev/null
+++ b/API/user_post_detail.json
@@ -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
+}
\ No newline at end of file
diff --git a/API/user_post_info_image.json b/API/user_post_info_image.json
new file mode 100644
index 0000000..66aeaa3
--- /dev/null
+++ b/API/user_post_info_image.json
@@ -0,0 +1,743 @@
+{
+ "status_code": 0,
+ "min_cursor": 1689909551000,
+ "max_cursor": 1689909551000,
+ "has_more": 1,
+ "aweme_list": [
+ {
+ "aweme_id": "7232626237586312485",
+ "desc": "辣妹统治世界٩(˃̶͈̀௰˂̶͈́)و。#ootd穿搭 #氛围感 #女友穿搭#辣妹穿搭 #生活碎片",
+ "create_time": 1683977029,
+ "author": {
+ "uid": "64115698134",
+ "ky_only_predict": 0,
+ "nickname": "肥牛卷儿(我爱吴世勋",
+ "data_label_list": null,
+ "user_not_show": 1,
+ "homepage_bottom_toast": null,
+ "avatar_thumb": {
+ "uri": "100x100/aweme-avatar/tos-cn-avt-0015_0f0f760731f3a659ad557fb9718a7019",
+ "url_list": [
+ "https://p3-pc.douyinpic.com/aweme/100x100/aweme-avatar/tos-cn-avt-0015_0f0f760731f3a659ad557fb9718a7019.jpeg?from=116350172"
+ ],
+ "width": 720,
+ "height": 720
+ },
+ "cf_list": null,
+ "is_ban": false,
+ "show_nearby_active": false,
+ "follow_status": 0,
+ "aweme_count": 208,
+ "following_count": 4,
+ "follower_count": 457352,
+ "favoriting_count": 133,
+ "total_favorited": 14192407,
+ "link_item_list": null,
+ "hide_search": true,
+ "constellation": 10,
+ "not_seen_item_id_list_v2": null,
+ "offline_info_list": null,
+ "weibo_verify": "",
+ "custom_verify": "",
+ "sec_uid": "MS4wLjABAAAA-hFsLR8fSnbmWhrmAEnGvYgG6rM2txNpNm2oT9WSrIQ",
+ "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": "6709002b0726ba37852d",
+ "url_list": [
+ "https://p9-pc-sign.douyinpic.com/obj/6709002b0726ba37852d?x-expires=1691017200&x-signature=N5pryQ1sD408IDBdB1G0HOL4gzs%3D&from=116350172",
+ "https://p3-pc-sign.douyinpic.com/obj/6709002b0726ba37852d?x-expires=1691017200&x-signature=4%2FKt4LGxET25WkvDLMLld0wrUoc%3D&from=116350172",
+ "https://p6-pc-sign.douyinpic.com/obj/6709002b0726ba37852d?x-expires=1691017200&x-signature=CdxAS1ooJ2O%2FDcJkvdCQQgRwYLw%3D&from=116350172"
+ ],
+ "width": 720,
+ "height": 720
+ },
+ "share_title_myself": "",
+ "share_title_other": "",
+ "share_desc_info": ""
+ },
+ "aweme_hotsoon_auth": 1,
+ "user_tags": null,
+ "need_points": null,
+ "enterprise_verify_reason": "",
+ "user_permissions": null,
+ "follower_list_secondary_information_struct": null,
+ "display_info": null,
+ "account_region": "",
+ "enable_nearby_visible": false,
+ "im_role_ids": null,
+ "live_agreement": 0,
+ "follower_request_status": 0,
+ "with_shop_entry": false,
+ "search_impr": {
+ "entity_id": "64115698134"
+ },
+ "user_not_see": 0,
+ "has_orders": false,
+ "prevent_download": false,
+ "show_image_bubble": false,
+ "is_blocking_v2": false,
+ "unique_id_modify_time": 1690995606,
+ "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": true,
+ "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_0f0f760731f3a659ad557fb9718a7019",
+ "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://p9-pc-sign.douyinpic.com/obj/c8510002be9a3a61aad2?x-expires=1692205200&x-signature=UFlvC%2FAJrGf9iYLQR1OJLJVURQM%3D&from=116350172",
+ "https://p6-pc-sign.douyinpic.com/obj/c8510002be9a3a61aad2?x-expires=1692205200&x-signature=6PNBiaCXEae1yyR%2BHUIVfF2Vh%2BY%3D&from=116350172",
+ "https://p3-pc-sign.douyinpic.com/obj/c8510002be9a3a61aad2?x-expires=1692205200&x-signature=Wq6LxfQKvmy1b6kAA2srRciA%2BMw%3D&from=116350172"
+ ],
+ "width": 720,
+ "height": 720
+ }
+ ],
+ "card_entries_not_display": null,
+ "has_insights": false,
+ "share_qrcode_uri": "6709002b0726ba37852d",
+ "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
+ },
+ "music": {
+ "id": 7203284398119225346,
+ "id_str": "7203284398119225346",
+ "title": "BABYDOLL (新版)",
+ "author": "星野新一",
+ "album": "多秋",
+ "cover_hd": {
+ "uri": "tos-cn-v-2774c002/oofuwAByVBRVAxCAhPWBCsNAoSoNE9pAWtuwEz",
+ "url_list": [
+ "https://p26.douyinpic.com/aweme/1080x1080/tos-cn-v-2774c002/oofuwAByVBRVAxCAhPWBCsNAoSoNE9pAWtuwEz.jpeg",
+ "https://p6.douyinpic.com/aweme/1080x1080/tos-cn-v-2774c002/oofuwAByVBRVAxCAhPWBCsNAoSoNE9pAWtuwEz.jpeg"
+ ],
+ "width": 720,
+ "height": 720
+ },
+ "cover_large": {
+ "uri": "tos-cn-v-2774c002/oofuwAByVBRVAxCAhPWBCsNAoSoNE9pAWtuwEz",
+ "url_list": [
+ "https://p26.douyinpic.com/aweme/720x720/tos-cn-v-2774c002/oofuwAByVBRVAxCAhPWBCsNAoSoNE9pAWtuwEz.jpeg",
+ "https://p6.douyinpic.com/aweme/720x720/tos-cn-v-2774c002/oofuwAByVBRVAxCAhPWBCsNAoSoNE9pAWtuwEz.jpeg"
+ ],
+ "width": 720,
+ "height": 720
+ },
+ "cover_medium": {
+ "uri": "tos-cn-v-2774c002/oofuwAByVBRVAxCAhPWBCsNAoSoNE9pAWtuwEz",
+ "url_list": [
+ "https://p26.douyinpic.com/aweme/200x200/tos-cn-v-2774c002/oofuwAByVBRVAxCAhPWBCsNAoSoNE9pAWtuwEz.jpeg",
+ "https://p6.douyinpic.com/aweme/200x200/tos-cn-v-2774c002/oofuwAByVBRVAxCAhPWBCsNAoSoNE9pAWtuwEz.jpeg"
+ ],
+ "width": 720,
+ "height": 720
+ },
+ "cover_thumb": {
+ "uri": "tos-cn-v-2774c002/oofuwAByVBRVAxCAhPWBCsNAoSoNE9pAWtuwEz",
+ "url_list": [
+ "https://p26.douyinpic.com/aweme/100x100/tos-cn-v-2774c002/oofuwAByVBRVAxCAhPWBCsNAoSoNE9pAWtuwEz.jpeg",
+ "https://p6.douyinpic.com/aweme/100x100/tos-cn-v-2774c002/oofuwAByVBRVAxCAhPWBCsNAoSoNE9pAWtuwEz.jpeg"
+ ],
+ "width": 720,
+ "height": 720
+ },
+ "play_url": {
+ "uri": "https://sf3-cdn-tos.douyinstatic.com/obj/tos-cn-ve-2774/oM6Jt8KtDYaQgWr6OsbuyqcCZefYknQ6BdZ6BT",
+ "url_list": [
+ "https://sf3-cdn-tos.douyinstatic.com/obj/tos-cn-ve-2774/oM6Jt8KtDYaQgWr6OsbuyqcCZefYknQ6BdZ6BT",
+ "https://sf86-cdn-tos.douyinstatic.com/obj/tos-cn-ve-2774/oM6Jt8KtDYaQgWr6OsbuyqcCZefYknQ6BdZ6BT"
+ ],
+ "width": 720,
+ "height": 720,
+ "url_key": "7203284398119225346"
+ },
+ "schema_url": "",
+ "source_platform": 10033,
+ "start_time": 0,
+ "end_time": 0,
+ "duration": 60,
+ "extra": "{\"reviewed\":0,\"review_unshelve_reason\":0,\"douyin_beats_info\":{},\"music_label_id\":6,\"loudness\":\"-7.497722\",\"cover_colors\":{\"rgb\":[246,219,243]},\"music_tagging\":{\"Languages\":[\"English\"],\"Moods\":null,\"Genres\":null,\"Themes\":[\"Low\"],\"AEDs\":[\"Vocal\"],\"SingingVersions\":null,\"Instruments\":null},\"is_red\":0,\"is_aed_music\":0,\"dsp_switch\":0,\"has_edited\":0,\"beats\":{\"audio_effect_onset\":\"https://sf86-cdn-tos.douyinstatic.com/obj/tos-cn-v-2774c002/7f97e721f8574d09b6ba1aa178874707\",\"beats_tracker\":\"https://sf6-cdn-tos.douyinstatic.com/obj/tos-cn-v-2774c002/3b29238855df486ca79a7bf6aa8681bf\",\"energy_trace\":\"https://sf3-cdn-tos.douyinstatic.com/obj/tos-cn-v-2774c002/235edc65924b4d7cb1c8a557650d4a60\",\"merged_beats\":\"https://sf86-cdn-tos.douyinstatic.com/obj/tos-cn-v-2774c002/d94342cd4ef64905b5bd57c00921c36a\"},\"schedule_search_time\":0,\"aggregate_exempt_conf\":[],\"with_aed_model\":0,\"peak\":\"1.0452917\",\"hotsoon_review_time\":-1,\"is_subsidy_exp\":false}",
+ "user_count": 0,
+ "position": null,
+ "collect_stat": 0,
+ "status": 1,
+ "offline_desc": "",
+ "owner_nickname": "",
+ "is_original": false,
+ "mid": "7203284398119225346",
+ "binded_challenge_id": 0,
+ "redirect": false,
+ "is_restricted": false,
+ "author_deleted": false,
+ "is_del_video": false,
+ "is_video_self_see": false,
+ "owner_handle": "",
+ "author_position": null,
+ "prevent_download": false,
+ "strong_beat_url": {
+ "uri": "https://sf86-cdn-tos.douyinstatic.com/obj/tos-cn-v-2774c002/c8c23d5034ba4559b2eab9065b1339c1",
+ "url_list": [
+ "https://sf86-cdn-tos.douyinstatic.com/obj/tos-cn-v-2774c002/c8c23d5034ba4559b2eab9065b1339c1",
+ "https://sf6-cdn-tos.douyinstatic.com/obj/tos-cn-v-2774c002/c8c23d5034ba4559b2eab9065b1339c1"
+ ],
+ "width": 720,
+ "height": 720
+ },
+ "unshelve_countries": null,
+ "prevent_item_download_status": 0,
+ "external_song_info": [],
+ "preview_start_time": 0,
+ "preview_end_time": 0,
+ "is_commerce_music": false,
+ "is_original_sound": false,
+ "audition_duration": 60,
+ "shoot_duration": 60,
+ "reason_type": 0,
+ "artists": [],
+ "lyric_short_position": null,
+ "mute_share": false,
+ "tag_list": null,
+ "dmv_auto_show": false,
+ "is_pgc": true,
+ "is_matched_metadata": false,
+ "is_audio_url_with_cookie": false,
+ "music_chart_ranks": null,
+ "can_background_play": true,
+ "music_status": 1,
+ "video_duration": 60,
+ "pgc_music_type": 2,
+ "cover_color_hsv": {
+ "h": -52,
+ "s": 11,
+ "v": 96
+ },
+ "search_impr": {
+ "entity_id": "7203284398119225346"
+ },
+ "song": {
+ "id": 7203284393765537793,
+ "id_str": "7203284393765537793",
+ "title": "BABYDOLL (新版)",
+ "artists": null,
+ "chorus": {
+ "start_ms": 21504,
+ "duration_ms": 23232
+ },
+ "chorus_v3_infos": null
+ },
+ "artist_user_infos": null,
+ "dsp_status": 10,
+ "musician_user_infos": null,
+ "luna_info": {
+ "is_luna_user": false,
+ "has_copyright": false
+ },
+ "music_collect_count": 0,
+ "music_cover_atmosphere_color_value": ""
+ },
+ "slides_music_beats": null,
+ "video": {
+ "play_addr": {
+ "uri": "https://sf3-cdn-tos.douyinstatic.com/obj/tos-cn-ve-2774/oM6Jt8KtDYaQgWr6OsbuyqcCZefYknQ6BdZ6BT",
+ "url_list": [
+ "https://sf3-cdn-tos.douyinstatic.com/obj/tos-cn-ve-2774/oM6Jt8KtDYaQgWr6OsbuyqcCZefYknQ6BdZ6BT",
+ "https://sf86-cdn-tos.douyinstatic.com/obj/tos-cn-ve-2774/oM6Jt8KtDYaQgWr6OsbuyqcCZefYknQ6BdZ6BT"
+ ],
+ "width": 720,
+ "height": 720,
+ "url_key": "7203284398119225346"
+ },
+ "cover": {
+ "uri": "tos-cn-i-0813c001/6daa91f096d9487394e8345858769ba2",
+ "url_list": [
+ "https://p9-pc-sign.douyinpic.com/tos-cn-i-0813c001/6daa91f096d9487394e8345858769ba2~noop.jpeg?x-expires=1692205200&x-signature=Yv%2BgEKcE10bTwft3GIluKjVivMo%3D&from=3213915784&s=PackSourceEnum_PUBLISH&se=false&biz_tag=pcweb_cover&l=20230803010005712927738F4143360D62",
+ "https://p6-pc-sign.douyinpic.com/tos-cn-i-0813c001/6daa91f096d9487394e8345858769ba2~noop.jpeg?x-expires=1692205200&x-signature=vJ4RkrzNXP4xL0cza7kRrgtru00%3D&from=3213915784&s=PackSourceEnum_PUBLISH&se=false&biz_tag=pcweb_cover&l=20230803010005712927738F4143360D62",
+ "https://p3-pc-sign.douyinpic.com/tos-cn-i-0813c001/6daa91f096d9487394e8345858769ba2~noop.jpeg?x-expires=1692205200&x-signature=91qKVf%2Buz4fDjIArCjlYWi1jjeo%3D&from=3213915784&s=PackSourceEnum_PUBLISH&se=false&biz_tag=pcweb_cover&l=20230803010005712927738F4143360D62"
+ ],
+ "width": 720,
+ "height": 720
+ },
+ "height": 1918,
+ "width": 1440,
+ "origin_cover": {
+ "uri": "tos-cn-i-0813c001/6daa91f096d9487394e8345858769ba2",
+ "url_list": [
+ "https://p3-pc-sign.douyinpic.com/tos-cn-i-0813c001/6daa91f096d9487394e8345858769ba2~noop.jpeg?x-expires=1692205200&x-signature=91qKVf%2Buz4fDjIArCjlYWi1jjeo%3D&from=3213915784&s=PackSourceEnum_PUBLISH&se=false&biz_tag=pcweb_cover&l=20230803010005712927738F4143360D62",
+ "https://p9-pc-sign.douyinpic.com/tos-cn-i-0813c001/6daa91f096d9487394e8345858769ba2~noop.jpeg?x-expires=1692205200&x-signature=Yv%2BgEKcE10bTwft3GIluKjVivMo%3D&from=3213915784&s=PackSourceEnum_PUBLISH&se=false&biz_tag=pcweb_cover&l=20230803010005712927738F4143360D62",
+ "https://p6-pc-sign.douyinpic.com/tos-cn-i-0813c001/6daa91f096d9487394e8345858769ba2~noop.jpeg?x-expires=1692205200&x-signature=vJ4RkrzNXP4xL0cza7kRrgtru00%3D&from=3213915784&s=PackSourceEnum_PUBLISH&se=false&biz_tag=pcweb_cover&l=20230803010005712927738F4143360D62"
+ ],
+ "width": 720,
+ "height": 720
+ },
+ "ratio": "default",
+ "meta": "",
+ "bit_rate": [],
+ "duration": 0,
+ "bit_rate_audio": null,
+ "big_thumbs": null
+ },
+ "share_url": "https://www.iesdouyin.com/share/video/7232626237586312485/?region=CN&mid=7203284398119225346&u_code=l1j9bkbd&did=MS4wLjABAAAAtqpCx0hpOERbdSzQdjRZw-wFPxaqdbAzsKDmbJMUI3KWlMGQHC-n6dXAqa-dM2EP&iid=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&with_sec_did=1&titleType=title&schema_type=37&share_sign=wjgkFzHXh6p.xcQ.fS.Ficm9.QSyu256DJAsxMt1IGI-&share_version=170400&ts=1690995606&from_ssr=1",
+ "user_digged": 0,
+ "statistics": {
+ "admire_count": 1,
+ "comment_count": 166,
+ "digg_count": 20629,
+ "collect_count": 1572,
+ "play_count": 0,
+ "share_count": 406
+ },
+ "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": 27,
+ "type": 1,
+ "hashtag_name": "ootd穿搭",
+ "hashtag_id": "1645837370349579",
+ "is_commerce": false
+ },
+ {
+ "start": 29,
+ "end": 33,
+ "type": 1,
+ "hashtag_name": "氛围感",
+ "hashtag_id": "1640936621124619",
+ "is_commerce": false
+ },
+ {
+ "start": 34,
+ "end": 39,
+ "type": 1,
+ "hashtag_name": "女友穿搭",
+ "hashtag_id": "1621254417954830",
+ "is_commerce": false
+ },
+ {
+ "start": 39,
+ "end": 44,
+ "type": 1,
+ "hashtag_name": "辣妹穿搭",
+ "hashtag_id": "1661587378647047",
+ "is_commerce": false
+ },
+ {
+ "start": 45,
+ "end": 50,
+ "type": 1,
+ "hashtag_name": "生活碎片",
+ "hashtag_id": "1605855447219300",
+ "is_commerce": false
+ }
+ ],
+ "is_top": 0,
+ "preview_video_status": 1,
+ "share_info": {
+ "share_url": "https://www.iesdouyin.com/share/video/7232626237586312485/?region=CN&mid=7203284398119225346&u_code=l1j9bkbd&did=MS4wLjABAAAAtqpCx0hpOERbdSzQdjRZw-wFPxaqdbAzsKDmbJMUI3KWlMGQHC-n6dXAqa-dM2EP&iid=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&with_sec_did=1&titleType=title&schema_type=37&share_sign=wjgkFzHXh6p.xcQ.fS.Ficm9.QSyu256DJAsxMt1IGI-&share_version=170400&ts=1690995606&from_ssr=1",
+ "share_link_desc": "8.74 Jvs:/ 辣妹统治世界٩(˃̶͈̀௰˂̶͈́)و。# ootd穿搭 # 氛围感 # 女友穿搭# 辣妹穿搭 # 生活碎片 %s 复制此链接,打开Dou音搜索,直接观看视频!"
+ },
+ "distribute_circle": {
+ "distribute_type": 0,
+ "campus_block_interaction": false,
+ "is_campus": false
+ },
+ "video_labels": [],
+ "user_recommend_status": 0,
+ "media_type": 2,
+ "duration": 0,
+ "aweme_type": 68,
+ "book_bar": {},
+ "image_crop_ctrl": 0,
+ "image_infos": null,
+ "main_arch_common": "{\"music_detail_fail_reason\":\"no_sound\",\"music_detail_fail_type\":1,\"music_detail_fail_toast\":\"该作品没有声音\"}",
+ "collection_corner_mark": 0,
+ "seo_info": {},
+ "position": null,
+ "uniqid_position": null,
+ "comment_list": null,
+ "author_user_id": 64115698134,
+ "jump_tab_info_list": null,
+ "geofencing": [],
+ "voice_modify_id_list": null,
+ "image_comment": {},
+ "region": "CN",
+ "video_text": [],
+ "dislike_dimension_list": null,
+ "collect_stat": 0,
+ "label_top_text": null,
+ "promotions": [],
+ "group_id": "7232626237586312485",
+ "prevent_download": false,
+ "nickname_position": null,
+ "challenge_position": null,
+ "author_mask_tag": 0,
+ "is_image_beat": false,
+ "chapter_list": null,
+ "long_video": null,
+ "vtag_search": {
+ "vtag_enable": true,
+ "vtag_delay_ts": 4
+ },
+ "packed_clips": null,
+ "should_open_ad_report": false,
+ "super_like_status": 0,
+ "interaction_stickers": null,
+ "preview_title": "辣妹统治世界٩(˃̶͈̀௰˂̶͈́)و。#ootd穿搭 #氛围感 #女友穿搭#辣妹穿搭 #生活碎片",
+ "origin_comment_ids": null,
+ "commerce_config_data": null,
+ "dislike_dimension_list_v2": null,
+ "standard_bar_info_list": null,
+ "aweme_control": {
+ "can_forward": true,
+ "can_share": true,
+ "can_comment": true,
+ "can_show_comment": true
+ },
+ "video_game_data_channel_config": {},
+ "mix_info": {
+ "mix_id": "7238089454588528701",
+ "mix_name": "穿搭图文(⁎⁍̴̛ᴗ⁍̴̛⁎)",
+ "cover_url": {
+ "uri": "douyin-user-image-file/da2d54a80674cd272dce92735d73068c",
+ "url_list": [
+ "https://p5-a-sign.douyinpic.com/obj/douyin-user-image-file/da2d54a80674cd272dce92735d73068c?x-expires=1692205200&x-signature=OgOZOAC7yg3yJjjiJGD7r2zBEqA%3D&from=116350172",
+ "https://p3-sign.douyinpic.com/obj/douyin-user-image-file/da2d54a80674cd272dce92735d73068c?x-expires=1692205200&x-signature=EpF94BNwjOB7SwjzFGstDe%2FsEIM%3D&from=116350172",
+ "https://p9-sign.douyinpic.com/obj/douyin-user-image-file/da2d54a80674cd272dce92735d73068c?x-expires=1692205200&x-signature=Lh6hMXBNsum7TNK4BClTA%2Bh%2BWSE%3D&from=116350172"
+ ],
+ "width": 720,
+ "height": 720
+ },
+ "status": {
+ "status": 2,
+ "is_collected": 0
+ },
+ "statis": {
+ "play_vv": 0,
+ "collect_vv": 0,
+ "current_episode": 1,
+ "updated_to_episode": 9
+ },
+ "desc": "",
+ "extra": "{\"create_source\":0,\"douyin_search_mix_copyright_block_area\":\"\",\"douyin_search_mix_lvideo_actors\":\" \",\"douyin_search_mix_lvideo_cid\":\"\",\"douyin_search_mix_lvideo_name\":\"\",\"douyin_search_mix_lvideo_tags\":\"\",\"douyin_search_mix_lvideo_type\":\"\",\"douyin_search_ocr_content\":\"\",\"douyin_search_user_generated_title\":\" \",\"enter_from\":\"app\",\"first_reviewed\":1,\"is_conflict\":false,\"last_added_item_time\":1685249026,\"mix_ad_info\":{\"copy_right_item_count\":9,\"music_physical_game_count\":0,\"risk_copy_right_item_count\":0},\"mix_earliest_video_creation_time\":0,\"mix_latest_video_creation_time\":0,\"mix_lvideo_quality_match\":0,\"mix_lvideo_quality_text\":0,\"mix_movie_commentary_type\":0,\"mix_ocr_mining_terms\":\"\",\"mix_pic_type\":2,\"mix_title_mining_terms\":\"\",\"next_info\":{\"cover\":\"douyin-user-image-file/da2d54a80674cd272dce92735d73068c\",\"desc\":\"\",\"name\":\"穿搭图文(⁎⁍̴̛ᴗ⁍̴̛⁎)\"},\"pic_item_count\":8,\"segmentation\":\"穿 搭 图文 ( ⁎ ⁍ ̴ ̛ ᴗ ⁍ ̴ ̛ ⁎ )\",\"top_item_content_label\":{\"2001\":1,\"2003\":1,\"2014\":3,\"2029\":4}}",
+ "share_info": {
+ "share_url": "https://www.iesdouyin.com/share/mix/detail/7238089454588528701/?schema_type=24&object_id=7238089454588528701&from_ssr=1",
+ "share_weibo_desc": "4.15 Duf:/ 我正在看【穿搭图文(⁎⁍̴̛ᴗ⁍̴̛⁎)】长按复制此条消息,打开抖音搜索,一起看合集~",
+ "share_desc": "3.58 Atr:/ 我正在看【穿搭图文(⁎⁍̴̛ᴗ⁍̴̛⁎)】长按复制此条消息,打开抖音搜索,一起看合集~",
+ "share_title": "这么有趣的合集,不能只有我一个人知道吧",
+ "share_title_myself": "",
+ "share_title_other": "",
+ "share_desc_info": "4.15 Duf:/ 我正在看【穿搭图文(⁎⁍̴̛ᴗ⁍̴̛⁎)】长按复制此条消息,打开抖音搜索,一起看合集~"
+ },
+ "mix_type": 0,
+ "create_time": 1685249026,
+ "update_time": 1685252084,
+ "ids": null,
+ "watched_item": "",
+ "is_serial_mix": 0,
+ "mix_pic_type": 2
+ },
+ "comment_words_recommend": {
+ "zero_comment": null
+ },
+ "anchor_info": {
+ "type": 2,
+ "id": "6601123594271459336",
+ "icon": {
+ "uri": "",
+ "url_list": [],
+ "width": 720,
+ "height": 720,
+ "url_key": "https://p9-pc-sign.douyinpic.com/obj/33a2200013bb98733b01e?x-expires=1691168400&x-signature=1M12aMUABYvSi4qTtvKt55zFCMI%3D&from=2788469086"
+ },
+ "title": "",
+ "open_url": "",
+ "web_url": "",
+ "mp_url": "",
+ "title_tag": "",
+ "content": "{}",
+ "style_info": {
+ "scene_icon": "{\"feed\":\"https://p9-pc-sign.douyinpic.com/obj/33a2200013bb98733b01e?x-expires=1691168400&x-signature=1M12aMUABYvSi4qTtvKt55zFCMI%3D&from=2788469086\"}",
+ "extra": "{}"
+ },
+ "extra": "{\"poi_id\":\"6601123594271459336\",\"poi_name\":\"武汉市\",\"type_code\":\"190104\",\"user_count\":232583541,\"item_count\":36452424,\"share_info\":{\"share_url\":\"https://aweme.snssdk.com/falcon/poi_mwa/poi_detail?poi_id=B001B16JYH\",\"share_weibo_desc\":\"武汉市附近超多有趣的抖音视频,一起来玩,戳这里\",\"share_desc\":\"\",\"share_title\":\"武汉市附近超多有趣的抖音视频,一起来玩,戳这里\",\"bool_persist\":0,\"share_title_myself\":\"\",\"share_title_other\":\"\",\"share_desc_info\":\"武汉市附近超多有趣的抖音视频,一起来玩,戳这里\",\"life_share_ext\":\"{\\\"life_share_id\\\":\\\"a932354e1c6a44ddb62fe45d6a3d9ab2\\\",\\\"from_user_id\\\":71774324045}\"},\"cover_hd\":{\"uri\":\"42dd001cf2907be11106\",\"url_list\":[\"https://p9-pc-sign.douyinpic.com/obj/42dd001cf2907be11106?x-expires=1691168400\\u0026x-signature=fa68Vvp5geTmDIMgII8SMUMeSGo%3D\\u0026from=2788469086\",\"https://p3-pc-sign.douyinpic.com/obj/42dd001cf2907be11106?x-expires=1691168400\\u0026x-signature=h6fyUI6AwWLYRmwflAaG83Rr6xA%3D\\u0026from=2788469086\",\"https://p6-pc-sign.douyinpic.com/obj/42dd001cf2907be11106?x-expires=1691168400\\u0026x-signature=LfwKv5CluheoPJCW8TTFd1RtNgM%3D\\u0026from=2788469086\"],\"width\":720,\"height\":720},\"cover_large\":{\"uri\":\"42dd001cf2907be11106\",\"url_list\":[\"https://p9-pc-sign.douyinpic.com/obj/42dd001cf2907be11106?x-expires=1691168400\\u0026x-signature=fa68Vvp5geTmDIMgII8SMUMeSGo%3D\\u0026from=2788469086\",\"https://p3-pc-sign.douyinpic.com/obj/42dd001cf2907be11106?x-expires=1691168400\\u0026x-signature=h6fyUI6AwWLYRmwflAaG83Rr6xA%3D\\u0026from=2788469086\",\"https://p6-pc-sign.douyinpic.com/obj/42dd001cf2907be11106?x-expires=1691168400\\u0026x-signature=LfwKv5CluheoPJCW8TTFd1RtNgM%3D\\u0026from=2788469086\"],\"width\":720,\"height\":720},\"cover_medium\":{\"uri\":\"42dd001cf2907be11106\",\"url_list\":[\"https://p9-pc-sign.douyinpic.com/obj/42dd001cf2907be11106?x-expires=1691168400\\u0026x-signature=fa68Vvp5geTmDIMgII8SMUMeSGo%3D\\u0026from=2788469086\",\"https://p3-pc-sign.douyinpic.com/obj/42dd001cf2907be11106?x-expires=1691168400\\u0026x-signature=h6fyUI6AwWLYRmwflAaG83Rr6xA%3D\\u0026from=2788469086\",\"https://p6-pc-sign.douyinpic.com/obj/42dd001cf2907be11106?x-expires=1691168400\\u0026x-signature=LfwKv5CluheoPJCW8TTFd1RtNgM%3D\\u0026from=2788469086\"],\"width\":720,\"height\":720},\"cover_thumb\":{\"uri\":\"42dd001cf2907be11106\",\"url_list\":[\"https://p9-pc-sign.douyinpic.com/obj/42dd001cf2907be11106?x-expires=1691168400\\u0026x-signature=fa68Vvp5geTmDIMgII8SMUMeSGo%3D\\u0026from=2788469086\",\"https://p3-pc-sign.douyinpic.com/obj/42dd001cf2907be11106?x-expires=1691168400\\u0026x-signature=h6fyUI6AwWLYRmwflAaG83Rr6xA%3D\\u0026from=2788469086\",\"https://p6-pc-sign.douyinpic.com/obj/42dd001cf2907be11106?x-expires=1691168400\\u0026x-signature=LfwKv5CluheoPJCW8TTFd1RtNgM%3D\\u0026from=2788469086\"],\"width\":720,\"height\":720},\"distance\":\"\",\"address_info\":{\"province\":\"湖北省\",\"city\":\"武汉市\",\"district\":\"\",\"address\":\"\",\"simple_addr\":\"武汉市\",\"city_code\":\"420100\",\"country\":\"中国\",\"country_code\":\"CN\",\"ad_code_v2\":\"420102\",\"city_code_v2\":\"420100\"},\"icon_type\":8,\"collect_stat\":0,\"poi_longitude\":114.298972,\"poi_latitude\":30.59573,\"expand_type\":0,\"icon_on_map\":{\"uri\":\"a098001211c7e534f72c\",\"url_list\":[\"https://p9-pc-sign.douyinpic.com/obj/a098001211c7e534f72c?x-expires=1691168400\\u0026x-signature=%2FsT%2ByvBszjpvTSMtlbHN4yPbcJ8%3D\\u0026from=2788469086\",\"https://p6-pc-sign.douyinpic.com/obj/a098001211c7e534f72c?x-expires=1691168400\\u0026x-signature=Tnom2CBjZS3X9HspqgPyfag7p1c%3D\\u0026from=2788469086\",\"https://p3-pc-sign.douyinpic.com/obj/a098001211c7e534f72c?x-expires=1691168400\\u0026x-signature=0SpYU5iYIzL%2BlSx0ROHlvWYJsPQ%3D\\u0026from=2788469086\"],\"width\":720,\"height\":720},\"icon_on_entry\":{\"uri\":\"33a2200013bb98733b01e\",\"url_list\":[\"https://p9-pc-sign.douyinpic.com/obj/33a2200013bb98733b01e?x-expires=1691168400\\u0026x-signature=1M12aMUABYvSi4qTtvKt55zFCMI%3D\\u0026from=2788469086\",\"https://p6-pc-sign.douyinpic.com/obj/33a2200013bb98733b01e?x-expires=1691168400\\u0026x-signature=vSeSa8WlOHf8R6C1jXbaGo4YKj4%3D\\u0026from=2788469086\",\"https://p3-pc-sign.douyinpic.com/obj/33a2200013bb98733b01e?x-expires=1691168400\\u0026x-signature=FSNW2NUvlbPIsi6Ld0MnP%2Bw%2BoKo%3D\\u0026from=2788469086\"],\"width\":720,\"height\":720},\"icon_on_info\":{\"uri\":\"9b960001e92e97c77951\",\"url_list\":[\"https://p6-pc-sign.douyinpic.com/obj/9b960001e92e97c77951?x-expires=1691168400\\u0026x-signature=gqz%2F99tCE0wFfZe%2FCiwY0%2BUrcgc%3D\\u0026from=2788469086\",\"https://p9-pc-sign.douyinpic.com/obj/9b960001e92e97c77951?x-expires=1691168400\\u0026x-signature=5i1eOMl2jdrx82TyrORruh%2FwlXY%3D\\u0026from=2788469086\",\"https://p3-pc-sign.douyinpic.com/obj/9b960001e92e97c77951?x-expires=1691168400\\u0026x-signature=UWpT1uh50y8g%2FFepdZ0v5WEGmUc%3D\\u0026from=2788469086\"],\"width\":720,\"height\":720},\"poi_subtitle\":\"\",\"show_type\":4,\"poi_subtitle_type\":0,\"voucher_release_areas\":null,\"poi_frontend_type\":null,\"poi_backend_type\":{\"code\":\"130205\",\"name\":\"地名地址;普通地点;地市级地名\"},\"is_admin_area\":true,\"collected_count\":\"685687\",\"view_count\":\"248123419471\",\"icon_service_type_list\":null,\"ext_json\":\"{\\\"item_ext\\\":{\\\"anchor_info\\\":{\\\"exist_relation_poi\\\":false,\\\"anchor_content_json\\\":\\\"{\\\\\\\"log_id\\\\\\\":\\\\\\\"20230803010005712927738F4143360D62\\\\\\\",\\\\\\\"poi_anchor_text_strategy\\\\\\\":\\\\\\\"0\\\\\\\",\\\\\\\"poi_anchor_text_type\\\\\\\":\\\\\\\"0\\\\\\\"}\\\",\\\"log_extra\\\":{\\\"has_delivery_product\\\":\\\"0\\\",\\\"has_favourite_product_tips\\\":\\\"0\\\",\\\"is_poi_live\\\":\\\"0\\\",\\\"poi_id\\\":\\\"6601123594271459336\\\"},\\\"is_commerce_intention\\\":false},\\\"anchor_comment\\\":{\\\"poi_anchor\\\":{\\\"primary_tags\\\":[{\\\"content\\\":\\\"武汉市\\\",\\\"type\\\":2,\\\"style\\\":0,\\\"priority\\\":1}],\\\"minor_tags\\\":[{\\\"content\\\":\\\"2481.2亿次看过\\\",\\\"type\\\":7,\\\"style\\\":0,\\\"priority\\\":-1,\\\"ExtraJson\\\":\\\"{\\\\\\\"cta_text\\\\\\\":\\\\\\\"2481.2亿\\\\\\\",\\\\\\\"final_text\\\\\\\":\\\\\\\"2481.2亿次看过\\\\\\\",\\\\\\\"text\\\\\\\":\\\\\\\"次看过\\\\\\\",\\\\\\\"type\\\\\\\":100001}\\\",\\\"ContentKey\\\":\\\"content1\\\"}]},\\\"anchor_content_json\\\":\\\"{\\\\\\\"content1\\\\\\\":\\\\\\\"{\\\\\\\\\\\\\\\"cta_text\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"2481.2亿\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"final_text\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"2481.2亿次看过\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"text\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"次看过\\\\\\\\\\\\\\\",\\\\\\\\\\\\\\\"type\\\\\\\\\\\\\\\":100001}\\\\\\\",\\\\\\\"log_id\\\\\\\":\\\\\\\"20230803010005712927738F4143360D62\\\\\\\",\\\\\\\"poi_anchor_text_info_comment\\\\\\\":0,\\\\\\\"poi_anchor_text_strategy_comment\\\\\\\":\\\\\\\"0\\\\\\\",\\\\\\\"poi_anchor_text_type_comment\\\\\\\":\\\\\\\"0\\\\\\\"}\\\",\\\"log_extra\\\":{\\\"text_type\\\":\\\"100005,100001\\\"}},\\\"poi_popularity\\\":\\\"148.9w人想去\\\"},\\\"distance_meters_bury\\\":-1}\\n\",\"effect_ids\":null,\"poi_detail_tags\":null,\"is_food_group_buy\":false,\"popularity\":\"148.9w人想去\",\"is_at_call_back_collect\":false,\"quality_score\":0,\"service_type_list\":null,\"poi_ranks\":null,\"is_red_poi\":false,\"is_life_service\":false,\"fulfill_task_list\":null,\"poi_search_tags\":null,\"life_extra\":{\"delivery_info\":{},\"is_ad_life_promote\":false,\"visit_history\":{\"never_poi_anchor\":true}}}",
+ "log_extra": "{\"has_delivery_product\":\"0\",\"has_favourite_product_tips\":\"0\",\"is_poi_live\":\"0\",\"life_anchor_type\":\"poi\",\"life_publish_type\":\"position\",\"poi_backend_type\":\"130205\",\"poi_id\":\"6601123594271459336\",\"use_lab_text\":0}"
+ },
+ "item_warn_notification": {
+ "type": 0,
+ "show": false,
+ "content": ""
+ },
+ "is_share_post": false,
+ "anchors": null,
+ "hybrid_label": null,
+ "geofencing_regions": null,
+ "authentication_token": "MS4wLjAAAAAACDLXxWSjHm-E6xSNKL2-QMEfb6vitxgSaOcZ3rIzGTwknHkpqxn-_hK4AEuj0kXVEU_dCTK9JgZC6NZU3T61nppQGF-IXCq50yLiHVpgiBcxzpbJ9pPa3upxzNHGXeHbQTLC7VxX5UtBxeceQFjx4PzgAcLxROu-T5jtbQvQBNAMkUwaoDZKMKZDEaj-eq8fa4dFCnPhQQN7ijtFOP_FzTN7OEoe_xAHowNBIj5DJSA2ezVtMEOdJdhoqGNwL5--I2LdTJkLJM10dVriM17rEg",
+ "aweme_acl": {
+ "download_mask_panel": {
+ "code": 1,
+ "show_type": 0
+ }
+ },
+ "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": ""
+ },
+ "is_life_item": true,
+ "yumme_recreason": null,
+ "cover_labels": null,
+ "ref_voice_modify_id_list": null,
+ "origin_text_extra": [],
+ "guide_btn_type": 0,
+ "ref_tts_id_list": null,
+ "common_bar_info": "[]",
+ "images": [
+ {
+ "uri": "tos-cn-i-0813c001/6daa91f096d9487394e8345858769ba2",
+ "url_list": [
+ "https://p3-pc-sign.douyinpic.com/tos-cn-i-0813c001/6daa91f096d9487394e8345858769ba2~tplv-dy-aweme-images:q75.webp?x-expires=1693587600&x-signature=ggkrFgYjN6KC%2Bs%2FVZG4gMHyuXYY%3D&from=3213915784&s=PackSourceEnum_PUBLISH&se=false&sc=image&biz_tag=aweme_images&l=20230803010005712927738F4143360D62",
+ "https://p9-pc-sign.douyinpic.com/tos-cn-i-0813c001/6daa91f096d9487394e8345858769ba2~tplv-dy-aweme-images:q75.webp?x-expires=1693587600&x-signature=Vpzp%2B58jT6if6k8negKdFHjG6sI%3D&from=3213915784&s=PackSourceEnum_PUBLISH&se=false&sc=image&biz_tag=aweme_images&l=20230803010005712927738F4143360D62",
+ "https://p6-pc-sign.douyinpic.com/tos-cn-i-0813c001/6daa91f096d9487394e8345858769ba2~tplv-dy-aweme-images:q75.webp?x-expires=1693587600&x-signature=4XYaIAgZ%2B9Y0sGhqwDDp6%2F1A4qI%3D&from=3213915784&s=PackSourceEnum_PUBLISH&se=false&sc=image&biz_tag=aweme_images&l=20230803010005712927738F4143360D62",
+ "https://p3-pc-sign.douyinpic.com/tos-cn-i-0813c001/6daa91f096d9487394e8345858769ba2~tplv-dy-aweme-images:q75.jpeg?x-expires=1693587600&x-signature=GnBL4m34wmcN7aCN4rUoS3PThag%3D&from=3213915784&s=PackSourceEnum_PUBLISH&se=false&sc=image&biz_tag=aweme_images&l=20230803010005712927738F4143360D62"
+ ],
+ "download_url_list": [
+ "https://p3-pc-sign.douyinpic.com/tos-cn-i-0813c001/6daa91f096d9487394e8345858769ba2~tplv-dy-water-v2:5oqW6Z-z5Y-377yaMzc1NTIzMTM5:1440:1918.webp?x-expires=1693587600&x-signature=0gOpYZNtDiXhxxQYj5nd38vA8dM%3D&sig=X_15vWgUDAxoAaaDkDIHxsx90DI%3D&from=3213915784&s=PackSourceEnum_PUBLISH&se=false&sc=image&biz_tag=aweme_images&l=20230803010005712927738F4143360D62",
+ "https://p9-pc-sign.douyinpic.com/tos-cn-i-0813c001/6daa91f096d9487394e8345858769ba2~tplv-dy-water-v2:5oqW6Z-z5Y-377yaMzc1NTIzMTM5:1440:1918.webp?x-expires=1693587600&x-signature=yl8CI3SSPA%2Fb3x3O6mSwwVN0f90%3D&sig=X_15vWgUDAxoAaaDkDIHxsx90DI%3D&from=3213915784&s=PackSourceEnum_PUBLISH&se=false&sc=image&biz_tag=aweme_images&l=20230803010005712927738F4143360D62",
+ "https://p6-pc-sign.douyinpic.com/tos-cn-i-0813c001/6daa91f096d9487394e8345858769ba2~tplv-dy-water-v2:5oqW6Z-z5Y-377yaMzc1NTIzMTM5:1440:1918.webp?x-expires=1693587600&x-signature=wlO1NNnFszuIlCbGVCPCYCi5k%2FU%3D&sig=X_15vWgUDAxoAaaDkDIHxsx90DI%3D&from=3213915784&s=PackSourceEnum_PUBLISH&se=false&sc=image&biz_tag=aweme_images&l=20230803010005712927738F4143360D62",
+ "https://p3-pc-sign.douyinpic.com/tos-cn-i-0813c001/6daa91f096d9487394e8345858769ba2~tplv-dy-water-v2:5oqW6Z-z5Y-377yaMzc1NTIzMTM5:1440:1918.jpeg?x-expires=1693587600&x-signature=qxOfzIYfvUopQtlNMbbsoH5LvgA%3D&sig=9W6hhDRU2ZPLHkEXQyl7zdJfnjA%3D&from=3213915784&s=PackSourceEnum_PUBLISH&se=false&sc=image&biz_tag=aweme_images&l=20230803010005712927738F4143360D62"
+ ],
+ "height": 1918,
+ "width": 1440,
+ "mask_url_list": null,
+ "interaction_stickers": null
+ },
+ {
+ "uri": "tos-cn-i-0813/45bb5491af38446e9b4671ec06a76a5a",
+ "url_list": [
+ "https://p3-pc-sign.douyinpic.com/tos-cn-i-0813/45bb5491af38446e9b4671ec06a76a5a~tplv-dy-aweme-images:q75.webp?x-expires=1693587600&x-signature=M%2B1%2FTFrRATaYQ3m9g1Xy2QTSlzE%3D&from=3213915784&s=PackSourceEnum_PUBLISH&se=false&sc=image&biz_tag=aweme_images&l=20230803010005712927738F4143360D62",
+ "https://p9-pc-sign.douyinpic.com/tos-cn-i-0813/45bb5491af38446e9b4671ec06a76a5a~tplv-dy-aweme-images:q75.webp?x-expires=1693587600&x-signature=99cYHpuNFAlgdOgx%2Bbl4o%2FvmBKc%3D&from=3213915784&s=PackSourceEnum_PUBLISH&se=false&sc=image&biz_tag=aweme_images&l=20230803010005712927738F4143360D62",
+ "https://p6-pc-sign.douyinpic.com/tos-cn-i-0813/45bb5491af38446e9b4671ec06a76a5a~tplv-dy-aweme-images:q75.webp?x-expires=1693587600&x-signature=DtTHqOFgL76eBzF5UDudk%2F2Kk%2FY%3D&from=3213915784&s=PackSourceEnum_PUBLISH&se=false&sc=image&biz_tag=aweme_images&l=20230803010005712927738F4143360D62",
+ "https://p3-pc-sign.douyinpic.com/tos-cn-i-0813/45bb5491af38446e9b4671ec06a76a5a~tplv-dy-aweme-images:q75.jpeg?x-expires=1693587600&x-signature=OX09kair5Emnbh7inwhee3%2FfcVw%3D&from=3213915784&s=PackSourceEnum_PUBLISH&se=false&sc=image&biz_tag=aweme_images&l=20230803010005712927738F4143360D62"
+ ],
+ "download_url_list": [
+ "https://p3-pc-sign.douyinpic.com/tos-cn-i-0813/45bb5491af38446e9b4671ec06a76a5a~tplv-dy-water-v2:5oqW6Z-z5Y-377yaMzc1NTIzMTM5:1440:1920.webp?x-expires=1693587600&x-signature=dPKWUoBBNxtwtyngzMHUoDcs%2BO4%3D&sig=leAHHKvV0O9CuO3J2MFB6SX0bPs%3D&from=3213915784&s=PackSourceEnum_PUBLISH&se=false&sc=image&biz_tag=aweme_images&l=20230803010005712927738F4143360D62",
+ "https://p9-pc-sign.douyinpic.com/tos-cn-i-0813/45bb5491af38446e9b4671ec06a76a5a~tplv-dy-water-v2:5oqW6Z-z5Y-377yaMzc1NTIzMTM5:1440:1920.webp?x-expires=1693587600&x-signature=txR35%2BnzUU1VWE70kh491kd1hKs%3D&sig=leAHHKvV0O9CuO3J2MFB6SX0bPs%3D&from=3213915784&s=PackSourceEnum_PUBLISH&se=false&sc=image&biz_tag=aweme_images&l=20230803010005712927738F4143360D62",
+ "https://p6-pc-sign.douyinpic.com/tos-cn-i-0813/45bb5491af38446e9b4671ec06a76a5a~tplv-dy-water-v2:5oqW6Z-z5Y-377yaMzc1NTIzMTM5:1440:1920.webp?x-expires=1693587600&x-signature=ccQaVpkHJd%2B%2Bro%2B1Br4yZWFUJzw%3D&sig=leAHHKvV0O9CuO3J2MFB6SX0bPs%3D&from=3213915784&s=PackSourceEnum_PUBLISH&se=false&sc=image&biz_tag=aweme_images&l=20230803010005712927738F4143360D62",
+ "https://p3-pc-sign.douyinpic.com/tos-cn-i-0813/45bb5491af38446e9b4671ec06a76a5a~tplv-dy-water-v2:5oqW6Z-z5Y-377yaMzc1NTIzMTM5:1440:1920.jpeg?x-expires=1693587600&x-signature=6Bh3%2F0ADP8mkG0HJsskWX9c35AA%3D&sig=iX_rk0P9cAymCtUmwMFOLTZaj_Q%3D&from=3213915784&s=PackSourceEnum_PUBLISH&se=false&sc=image&biz_tag=aweme_images&l=20230803010005712927738F4143360D62"
+ ],
+ "height": 1920,
+ "width": 1440,
+ "mask_url_list": null,
+ "interaction_stickers": null
+ },
+ {
+ "uri": "tos-cn-i-0813c001/367fbd724765454dab3cdc1fe48cf8fc",
+ "url_list": [
+ "https://p9-pc-sign.douyinpic.com/tos-cn-i-0813c001/367fbd724765454dab3cdc1fe48cf8fc~tplv-dy-aweme-images:q75.webp?x-expires=1693587600&x-signature=sTJnOym%2FnjXAaCZ3UyxmyO7stxM%3D&from=3213915784&s=PackSourceEnum_PUBLISH&se=false&sc=image&biz_tag=aweme_images&l=20230803010005712927738F4143360D62",
+ "https://p6-pc-sign.douyinpic.com/tos-cn-i-0813c001/367fbd724765454dab3cdc1fe48cf8fc~tplv-dy-aweme-images:q75.webp?x-expires=1693587600&x-signature=gymyaIG1n09AJ9EwxF1BIVBFPOE%3D&from=3213915784&s=PackSourceEnum_PUBLISH&se=false&sc=image&biz_tag=aweme_images&l=20230803010005712927738F4143360D62",
+ "https://p3-pc-sign.douyinpic.com/tos-cn-i-0813c001/367fbd724765454dab3cdc1fe48cf8fc~tplv-dy-aweme-images:q75.webp?x-expires=1693587600&x-signature=BQYvHqT%2BkGaiBuTW%2Fvnj%2FmBHje8%3D&from=3213915784&s=PackSourceEnum_PUBLISH&se=false&sc=image&biz_tag=aweme_images&l=20230803010005712927738F4143360D62",
+ "https://p9-pc-sign.douyinpic.com/tos-cn-i-0813c001/367fbd724765454dab3cdc1fe48cf8fc~tplv-dy-aweme-images:q75.jpeg?x-expires=1693587600&x-signature=kv4oYu7xPA7Mu5snPK%2FeDxDnQKA%3D&from=3213915784&s=PackSourceEnum_PUBLISH&se=false&sc=image&biz_tag=aweme_images&l=20230803010005712927738F4143360D62"
+ ],
+ "download_url_list": [
+ "https://p9-pc-sign.douyinpic.com/tos-cn-i-0813c001/367fbd724765454dab3cdc1fe48cf8fc~tplv-dy-water-v2:5oqW6Z-z5Y-377yaMzc1NTIzMTM5:1440:1918.webp?x-expires=1693587600&x-signature=hs9hAcqiRUxxc3SmbJfJLjMQrko%3D&sig=RnPWS2PjylfuurgQV2ABt1gyDds%3D&from=3213915784&s=PackSourceEnum_PUBLISH&se=false&sc=image&biz_tag=aweme_images&l=20230803010005712927738F4143360D62",
+ "https://p6-pc-sign.douyinpic.com/tos-cn-i-0813c001/367fbd724765454dab3cdc1fe48cf8fc~tplv-dy-water-v2:5oqW6Z-z5Y-377yaMzc1NTIzMTM5:1440:1918.webp?x-expires=1693587600&x-signature=jd9G5EEylcLJZVo88GelP6sTA%2B0%3D&sig=RnPWS2PjylfuurgQV2ABt1gyDds%3D&from=3213915784&s=PackSourceEnum_PUBLISH&se=false&sc=image&biz_tag=aweme_images&l=20230803010005712927738F4143360D62",
+ "https://p3-pc-sign.douyinpic.com/tos-cn-i-0813c001/367fbd724765454dab3cdc1fe48cf8fc~tplv-dy-water-v2:5oqW6Z-z5Y-377yaMzc1NTIzMTM5:1440:1918.webp?x-expires=1693587600&x-signature=oAJgYc28tnj0XEgfRjEo9Bv2O80%3D&sig=RnPWS2PjylfuurgQV2ABt1gyDds%3D&from=3213915784&s=PackSourceEnum_PUBLISH&se=false&sc=image&biz_tag=aweme_images&l=20230803010005712927738F4143360D62",
+ "https://p9-pc-sign.douyinpic.com/tos-cn-i-0813c001/367fbd724765454dab3cdc1fe48cf8fc~tplv-dy-water-v2:5oqW6Z-z5Y-377yaMzc1NTIzMTM5:1440:1918.jpeg?x-expires=1693587600&x-signature=8iv2uW71zA7sVwHtJSMva2RXdHc%3D&sig=ECD3VXX9zE7C7rdBuCgt_YhUZdY%3D&from=3213915784&s=PackSourceEnum_PUBLISH&se=false&sc=image&biz_tag=aweme_images&l=20230803010005712927738F4143360D62"
+ ],
+ "height": 1918,
+ "width": 1440,
+ "mask_url_list": null,
+ "interaction_stickers": null
+ }
+ ],
+ "relation_labels": null,
+ "tts_id_list": null,
+ "impression_data": {
+ "group_id_list_a": [],
+ "group_id_list_b": [],
+ "similar_id_list_a": null,
+ "similar_id_list_b": null,
+ "group_id_list_c": [
+ 7232626237586312485
+ ]
+ },
+ "disable_relation_bar": 0,
+ "photo_search_entrance": {
+ "ecom_type": 2
+ },
+ "social_tag_list": null,
+ "suggest_words": {
+ "suggest_words": [
+ {
+ "words": [
+ {
+ "word": "吴世勋",
+ "word_id": "6538738270849733901",
+ "info": "{\"qrec_for_search\":\"{\\\"video_ecom\\\":\\\"1\\\"}\"}"
+ }
+ ],
+ "scene": "comment_top_rec",
+ "icon_url": "",
+ "hint_text": "大家都在搜:",
+ "extra_info": "{}"
+ },
+ {
+ "words": [
+ {
+ "word": "吴世勋",
+ "word_id": "6538738270849733901",
+ "info": "{\"qrec_for_search\":\"{\\\"video_ecom\\\":\\\"1\\\"}\"}"
+ }
+ ],
+ "scene": "detail_inbox_rex",
+ "icon_url": "",
+ "hint_text": "",
+ "extra_info": "{}"
+ }
+ ]
+ },
+ "show_follow_button": {},
+ "duet_aggregate_in_music_tab": false,
+ "is_duet_sing": false,
+ "search_impr": {
+ "entity_id": "7232626237586312485",
+ "entity_type": "IMAGE_PUBLISH"
+ },
+ "comment_permission_info": {
+ "comment_permission_status": 0,
+ "can_comment": true,
+ "item_detail_entry": false,
+ "press_entry": false,
+ "toast_guide": false
+ },
+ "original_images": null,
+ "is_multi_content": 1,
+ "series_paid_info": {
+ "series_paid_status": 0,
+ "item_price": 0
+ },
+ "img_bitrate": null,
+ "comment_gid": 7232626237586312485,
+ "digg_lottie": {
+ "lottie_id": "",
+ "can_bomb": 0
+ },
+ "image_album_music_info": {
+ "begin_time": 0,
+ "end_time": 60046,
+ "volume": 100
+ },
+ "video_tag": [
+ {
+ "tag_id": 2003,
+ "tag_name": "时尚",
+ "level": 1
+ },
+ {
+ "tag_id": 2003007,
+ "tag_name": "穿搭",
+ "level": 2
+ },
+ {
+ "tag_id": 2003007011,
+ "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
+}
\ No newline at end of file
diff --git a/API/user_post_info_video.json b/API/user_post_info_video.json
new file mode 100644
index 0000000..584c829
--- /dev/null
+++ b/API/user_post_info_video.json
@@ -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
+}
\ No newline at end of file
diff --git a/API/user_profile_info.json b/API/user_profile_info.json
new file mode 100644
index 0000000..13c8755
--- /dev/null
+++ b/API/user_profile_info.json
@@ -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": ""
+ }
+}
\ No newline at end of file
diff --git a/Banner.png b/Banner.png
new file mode 100644
index 0000000..0d6f3bb
Binary files /dev/null and b/Banner.png differ
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
new file mode 100644
index 0000000..f48afaf
--- /dev/null
+++ b/CODE_OF_CONDUCT.md
@@ -0,0 +1,49 @@
+# 贡献者守则
+
+本项目欢迎所有人的贡献。为了保证这个社区的友好和专业的环境,我们制定了以下守则,所有的贡献者和维护者都应当遵守。
+
+## 我们的承诺
+
+为了促进一个开放和欢迎的环境,我们承诺让参与这个项目的每个人无论年龄、体型、身体健康状况、种族、性别认同与表达、经验水平、教育程度、社会经济地位、国籍、个人外貌、种族、宗教信仰或者性取向等,都不会感到被歧视。
+
+## 我们的标准
+
+以下行为可以帮助我们构建一个友好的环境:
+
+* 使用友好和包容的语言
+* 尊重不同的观点和经验
+* 接纳建设性的批评
+* 关注对社区最有利的事情
+* 对其他社区成员表现出同情和善意
+
+以下行为是不被接受的:
+
+* 使用侮辱性/贬低性的语言或图像,以及人身攻击
+* 喷子行为或恶意批评
+* 公开或私下骚扰他人
+* 发布他人的私人信息,例如实际地址或电子邮件,未经其明确许可
+* 其他可能被认为不合适或不专业的行为
+
+## 我们的责任
+
+项目维护者有责任解释行为标准,并且应当采取适当和公正的纠正措施回应任何违反这些标准的行为。
+
+项目维护者有权利和责任删除、修改或拒绝不符合本守则的评论(comments)、提交(commits)、代码、wiki 编辑、问题(issues)和其他贡献,他们也可以因为以下行为封禁一个人的参与,包括但不限于:
+
+* 有骚扰行为
+* 发表侮辱性或贬损性的评论
+* 人身攻击
+* 发布他人的私人信息
+* 其他不道德的行为
+
+## 适用范围
+
+此行为守则适用于项目空间和公共空间,当个体代表项目或其社区时也同样适用。例如,使用官方电子邮件地址、在官方的社交媒体账号发表的,或在公开的在线或离线事件中担任的代表角色等。项目维护者也可能进一步定义和澄清代表项目行为的规范。
+
+## 执行
+
+无论是恶劣的行为公开或私下发生,项目维护者都有权进行调查并采取适当的行动,这可能包括警告、暂时禁止或永久禁止对项目的贡献等。
+
+## 版本历史
+
+此行为准则版本基于 [Contributor Covenant](https://www.contributor-covenant.org) 版本 2.1。欢迎在此基础上进行修改和适应。
\ No newline at end of file
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..e43dbc7
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,5 @@
+FROM python:3.7-slim-bullseye
+WORKDIR /app
+COPY . .
+RUN pip3 install -r requirements.txt
+CMD ["python3", "TikTokMulti.py"]
\ No newline at end of file
diff --git a/GUI/Main.ui b/GUI/Main.ui
new file mode 100644
index 0000000..98329b4
--- /dev/null
+++ b/GUI/Main.ui
@@ -0,0 +1,346 @@
+
+
+ Dialog
+
+
+
+ 0
+ 0
+ 1111
+ 711
+
+
+
+ Dialog
+
+
+
+
+
+
+
+ 0
+ 0
+ 230
+ 600
+
+
+
+ background-color: #060716;
+border-bottom-left-radius: 25px;
+border-top-left-radius: 25px;
+font: 10pt "微软雅黑";
+color: #FFFFFF;
+
+
+
+
+
+
+
+
+ 230
+ 0
+ 851
+ 600
+
+
+
+ background-color: rgb(255, 255, 255);
+border-top-right-radius: 25px;
+border-bottom-right-radius: 25px;
+
+
+
+
+
+
+
+
+ 30
+ 50
+ 161
+ 41
+
+
+
+ background: url(:/img/logo-horizontal.svg) no-repeat;
+
+
+
+
+
+
+
+
+ 180
+ 90
+ 54
+ 12
+
+
+
+ color: rgb(255, 255, 255);
+font: 9pt "華康布丁體";
+
+
+ v2.1.1
+
+
+
+
+
+ 1030
+ 20
+ 21
+ 21
+
+
+
+ border-radius: 10px;
+background-color: rgb(255, 81, 53);
+
+
+
+
+
+
+
+
+ 1000
+ 20
+ 21
+ 21
+
+
+
+ border-radius: 10px;
+background-color: #FFC32D;
+
+
+
+
+
+
+
+
+ 970
+ 20
+ 21
+ 21
+
+
+
+ border-radius: 10px;
+background-color: #37C847;
+
+
+
+
+
+
+
+
+ 260
+ 90
+ 651
+ 41
+
+
+
+ false
+
+
+ background-color: #292B35;
+border-radius: 10px;
+font: 12pt "華康布丁體";
+color: rgb(255, 255, 255);
+qproperty-alignment:AlignHCenter;
+
+
+ QFrame::StyledPanel
+
+
+ Qt::ScrollBarAsNeeded
+
+
+ QAbstractScrollArea::AdjustIgnored
+
+
+ QPlainTextEdit::WidgetWidth
+
+
+
+
+
+ false
+
+
+ false
+
+
+
+
+
+ 930
+ 90
+ 121
+ 41
+
+
+
+ #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;
+}
+
+
+
+ 咻咻
+
+
+
+
+
+ 260
+ 140
+ 71
+ 16
+
+
+
+ 全部下载
+
+
+
+
+
+ 50
+ 390
+ 131
+ 61
+
+
+
+ border-radius: 25px;
+font: 16pt "華康布丁體";
+color: rgb(255, 255, 255);
+background-color: rgb(22, 23, 34);
+
+
+ 设置
+
+
+
+
+
+ 50
+ 490
+ 131
+ 61
+
+
+
+ border-radius: 25px;
+font: 16pt "華康布丁體";
+color: rgb(255, 255, 255);
+background-color: rgb(22, 23, 34);
+
+
+ 关于
+
+
+
+
+
+ 350
+ 140
+ 101
+ 16
+
+
+
+ 全部封面下载
+
+
+
+
+
+ 460
+ 140
+ 101
+ 16
+
+
+
+ 全部配乐下载
+
+
+
+
+
+ 230
+ 0
+ 851
+ 60
+
+
+
+ background-color: rgb(199, 199, 199);
+border-top-right-radius: 25px;
+
+
+
+
+
+
+
+
+ 260
+ 170
+ 791
+ 401
+
+
+
+ Qt::ScrollBarAlwaysOff
+
+
+ Qt::ScrollBarAlwaysOff
+
+
+ QTextEdit::NoWrap
+
+
+ Label_Right
+ Label_Background
+ Label_Left
+ Label_Logo
+ Label_Version
+ Button_Close
+ Button_Max
+ Button_Min
+ plainTextEdit
+ Button_Go
+ Check_All
+ pushButton
+ pushButton_2
+ Check_Cover
+ Check_Music
+ textBrowser
+
+
+
+
+
+
diff --git a/GUI/README-EN.md b/GUI/README-EN.md
new file mode 100644
index 0000000..0aad290
--- /dev/null
+++ b/GUI/README-EN.md
@@ -0,0 +1,9 @@
+# TKMGUI V2.1.1
+**Currently, only for the development of the preview version**
+
+
+
+[English](README-EN.md) [简体中文](README.md)
+
+
+
diff --git a/GUI/README.md b/GUI/README.md
new file mode 100644
index 0000000..dcb98ae
--- /dev/null
+++ b/GUI/README.md
@@ -0,0 +1,9 @@
+# TKMGUI V2.1.1
+**目前仅为开发预览版**
+
+
+
+[English](README-EN.md) [简体中文](README.md)
+
+
+
diff --git a/GUI/Resource.qrc b/GUI/Resource.qrc
new file mode 100644
index 0000000..bb03f7e
--- /dev/null
+++ b/GUI/Resource.qrc
@@ -0,0 +1,6 @@
+
+
+ 背景.svg
+ logo-horizontal.svg
+
+
diff --git a/GUI/preview.png b/GUI/preview.png
new file mode 100644
index 0000000..da9a75c
Binary files /dev/null and b/GUI/preview.png differ
diff --git a/GUI/requirements.txt b/GUI/requirements.txt
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/GUI/requirements.txt
@@ -0,0 +1 @@
+
diff --git a/GUI/resource.py b/GUI/resource.py
new file mode 100644
index 0000000..fcec3d7
--- /dev/null
+++ b/GUI/resource.py
@@ -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()
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..ee42c85
--- /dev/null
+++ b/LICENSE
@@ -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.
diff --git a/README-EN.md b/README-EN.md
new file mode 100644
index 0000000..88b992c
--- /dev/null
+++ b/README-EN.md
@@ -0,0 +1,324 @@
+
+
+
✨ TikTok Watermark-Free Video Downloader ✨
+
+
+[简体中文](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)
+
+
+## 🚀 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.
+
+ ⚙ Windows Terminal Settings (Must-read)
+
+
+
+
+
+## 🧰 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
+
+
+ List of Operating Systems supported by version 1.5.0.0
+
+- 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
+
+
+
+## 📸 Running Process
+
+
+ 🎬 Running without configuration file and scan code login
+
+https://user-images.githubusercontent.com/40727745/fc1e6c46-d0c3-4f2a-a4a5-ca3d781e7d11
+
+
+
+
+ 🎬 Downloading from the homepage
+
+https://user-images.githubusercontent.com/40727745/12c21d55-b629-485a-b904-54d86341c371
+
+
+
+## 📥 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
+
+
+📁 directory
+
+```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
+
+```
+
+
+
+## 💖 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.
+
+
+
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..0d7ec17
--- /dev/null
+++ b/README.md
@@ -0,0 +1,370 @@
+
+
+
+✨ 抖音去水印作品下载 ✨
+
+
+[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)
+
+
+
+
+## 🚀 环境准备/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前的最后一个发行版下载
+
+ ⚙ Windows Terminal 设置(必看)
+
+
+
+
+
+
+## 🧰 功能/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
+
+
+ TikTokDownload 1.6 / F2 0.0.1.6-pw2 支持的操作系统列表
+
+- 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 或更高版本
+
+
+
+
+## 📥 安装与运行/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
+
+
+ 🎬 无配置文件扫码登录
+
+https://user-images.githubusercontent.com/40727745/fc1e6c46-d0c3-4f2a-a4a5-ca3d781e7d11
+
+
+
+
+ 🎬 主页作品下载
+
+https://user-images.githubusercontent.com/40727745/12c21d55-b629-485a-b904-54d86341c371
+
+
+
+ 更多运行过程请查阅 [「F2 readme」](https://github.com/Johnserf-Seed/f2/blob/main/README.md)
+
+
+## 🗂️ 项目结构/Folder
+
+
+📁 目录
+
+```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
+
+```
+
+
+
+
+## 💖 赞赏/Sponsor
+
+
+
+[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
+
+我们欢迎任何形式的贡献,无论是提交错误报告,提出改进意见,或者是提供代码和文档。我们都欣赏你的帮助。
+
+
diff --git a/Server/Server.py b/Server/Server.py
new file mode 100644
index 0000000..63270dd
--- /dev/null
+++ b/Server/Server.py
@@ -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')
diff --git a/Server/Server.txt b/Server/Server.txt
new file mode 100644
index 0000000..fea3c60
--- /dev/null
+++ b/Server/Server.txt
@@ -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])])
+ ]
+)
\ No newline at end of file
diff --git a/Server/build-win.bat b/Server/build-win.bat
new file mode 100644
index 0000000..bf70424
--- /dev/null
+++ b/Server/build-win.bat
@@ -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
\ No newline at end of file
diff --git a/Server/package.json b/Server/package.json
new file mode 100644
index 0000000..6f31807
--- /dev/null
+++ b/Server/package.json
@@ -0,0 +1,6 @@
+{
+ "dependencies": {
+ "crypto-js": "^4.1.1",
+ "md5": "^2.3.0"
+ }
+}
diff --git a/Server/requirements.txt b/Server/requirements.txt
new file mode 100644
index 0000000..6da2898
--- /dev/null
+++ b/Server/requirements.txt
@@ -0,0 +1,2 @@
+Flask==2.2.5
+PyExecJS==1.5.1
\ No newline at end of file
diff --git a/Server/s_v_web_id.js b/Server/s_v_web_id.js
new file mode 100644
index 0000000..6d620ac
--- /dev/null
+++ b/Server/s_v_web_id.js
@@ -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())
\ No newline at end of file
diff --git a/Server/s_v_web_id.py b/Server/s_v_web_id.py
new file mode 100644
index 0000000..c93d99f
--- /dev/null
+++ b/Server/s_v_web_id.py
@@ -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())
\ No newline at end of file
diff --git a/Server/x-bogus.js b/Server/x-bogus.js
new file mode 100644
index 0000000..6e73604
--- /dev/null
+++ b/Server/x-bogus.js
@@ -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
+};
\ No newline at end of file
diff --git a/Server/x-tt-params.js b/Server/x-tt-params.js
new file mode 100644
index 0000000..8522576
--- /dev/null
+++ b/Server/x-tt-params.js
@@ -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
+};
\ No newline at end of file
diff --git a/TikTokTool.py b/TikTokTool.py
new file mode 100644
index 0000000..5081fb2
--- /dev/null
+++ b/TikTokTool.py
@@ -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]()
diff --git a/_config.yml b/_config.yml
new file mode 100644
index 0000000..b4fb3bc
--- /dev/null
+++ b/_config.yml
@@ -0,0 +1 @@
+theme: jekyll-theme-architect
diff --git a/auto_cookie.py b/auto_cookie.py
new file mode 100644
index 0000000..73416df
--- /dev/null
+++ b/auto_cookie.py
@@ -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")
diff --git a/auto_cookie_selenium.py b/auto_cookie_selenium.py
new file mode 100644
index 0000000..73416df
--- /dev/null
+++ b/auto_cookie_selenium.py
@@ -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")
diff --git a/douyin_cookie.txt b/douyin_cookie.txt
new file mode 100644
index 0000000..351c2d8
--- /dev/null
+++ b/douyin_cookie.txt
@@ -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
\ No newline at end of file
diff --git a/douyin_ui.py b/douyin_ui.py
new file mode 100644
index 0000000..f5fa6c9
--- /dev/null
+++ b/douyin_ui.py
@@ -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('', 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()
diff --git a/download_with_cookie.py b/download_with_cookie.py
new file mode 100644
index 0000000..5719a3e
--- /dev/null
+++ b/download_with_cookie.py
@@ -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)
diff --git a/f2-logo.ico b/f2-logo.ico
new file mode 100644
index 0000000..453da51
Binary files /dev/null and b/f2-logo.ico differ
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 0000000..70f80fc
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1 @@
+f2
\ No newline at end of file
diff --git a/run-server.bat b/run-server.bat
new file mode 100644
index 0000000..497226d
--- /dev/null
+++ b/run-server.bat
@@ -0,0 +1,2 @@
+cd Server
+py Server.py
\ No newline at end of file
diff --git a/run-server.sh b/run-server.sh
new file mode 100644
index 0000000..db662fe
--- /dev/null
+++ b/run-server.sh
@@ -0,0 +1,2 @@
+cd Server
+python3 Server.py
\ No newline at end of file
diff --git a/simple_download.py b/simple_download.py
new file mode 100644
index 0000000..46bc4c2
--- /dev/null
+++ b/simple_download.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*', 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'