Skip to content

Commit

Permalink
重构项目代码
Browse files Browse the repository at this point in the history
  • Loading branch information
JoeanAmier committed Mar 19, 2024
1 parent f61afa7 commit 0a87945
Show file tree
Hide file tree
Showing 19 changed files with 221 additions and 59 deletions.
17 changes: 9 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,9 @@
* 🟡 TikTokDownloader 开发计划及进度可前往 [Projects](https://github.com/users/JoeanAmier/projects/2) 查阅
* 🔴 请注意,最新源码可能存在一些不稳定的 Bug
* 🔴 如果在使用过程中发现程序 Bug,请及时告知作者修复
* 🔴 TikTok 平台作品下载功能失效,已修复
* 🔴 某些情况下会下载到错误的 TikTok 作品,未修复
* 🔴 夜晚无法下载高分辨率视频,疑似抖音服务端限制
* 🔴 TikTok 平台作品下载功能失效,已修复

# 📋 项目说明\(Instructions\)

Expand All @@ -110,14 +111,14 @@
</li>
<li>阅读 TikTokDownloader 的免责声明,根据提示输入内容</li>
<li>将 Cookie 信息写入配置文件
<ol><b>手动复制粘贴 Cookie(推荐)</b>
<ol><b>手动复制粘贴 Cookie(推荐)</b>
<li>参考 <a href="https://github.com/JoeanAmier/TikTokDownloader/blob/master/docs/Cookie%E8%8E%B7%E5%8F%96%E6%95%99%E7%A8%8B.md">Cookie 提取教程</a>,复制所需 Cookie 至剪贴板</li>
<li>选择 <code>复制粘贴写入 Cookie</code> 选项,按照提示将 Cookie 写入配置文件</li>
</ol>
<ol><b>从浏览器获取 Cookie(推荐)</b>
<ol><b>从浏览器获取 Cookie(推荐)</b>
<li>选择 <code>从浏览器获取 Cookie</code> 选项,按照提示选择浏览器类型</li>
</ol>
<ol><b>扫码登录获取 Cookie(不推荐)</b>
<ol><b>扫码登录获取 Cookie不推荐</b>
<li>选择 <code>扫码登录获取 Cookie</code> 选项,程序会显示登录二维码图片,并使用默认应用打开图片</li>
<li>使用抖音 APP 扫描二维码并登录账号</li>
<li>按照提示操作,将 Cookie 写入配置文件</li>
Expand Down Expand Up @@ -233,16 +234,16 @@
</table>
<p>如果您愿意,可以考虑提供资助为 <b>TikTokDownloader</b> 提供额外的支持!</p>

# 💡 代码参考\(Refer\)
# 💡 项目参考\(Refer\)

* https://github.com/Johnserf-Seed/f2
* https://github.com/Johnserf-Seed/TikTokDownload
* https://github.com/Evil0ctal/Douyin_TikTok_Download_API
* https://github.com/ihmily/DouyinLiveRecorder
* https://github.com/psf/requests
* https://github.com/pallets/flask
* https://docs.aiohttp.org/en/stable/
* https://github.com/Textualize/rich
* https://github.com/omnilib/aiosqlite
* https://github.com/borisbabic/browser_cookie3
* https://github.com/pyinstaller/pyinstaller
* https://docs.aiohttp.org/en/stable/
* https://ffmpeg.org/ffmpeg-all.html
* https://html5up.net/hyperspace
10 changes: 5 additions & 5 deletions docs/TikTokDownloader文档.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,14 +32,14 @@
</li>
<li>阅读 TikTokDownloader 的免责声明,根据提示输入内容</li>
<li>将 Cookie 信息写入配置文件
<ol><b>手动复制粘贴 Cookie(推荐)</b>
<ol><b>手动复制粘贴 Cookie(推荐)</b>
<li>参考 <a href="https://github.com/JoeanAmier/TikTokDownloader/blob/master/docs/Cookie%E8%8E%B7%E5%8F%96%E6%95%99%E7%A8%8B.md">Cookie 提取教程</a>,复制所需 Cookie 至剪贴板</li>
<li>选择 <code>复制粘贴写入 Cookie</code> 选项,按照提示将 Cookie 写入配置文件</li>
</ol>
<ol><b>从浏览器获取 Cookie(推荐)</b>
<ol><b>从浏览器获取 Cookie(推荐)</b>
<li>选择 <code>从浏览器获取 Cookie</code> 选项,按照提示选择浏览器类型</li>
</ol>
<ol><b>扫码登录获取 Cookie(不推荐)</b>
<ol><b>扫码登录获取 Cookie不推荐</b>
<li>选择 <code>扫码登录获取 Cookie</code> 选项,程序会显示登录二维码图片,并使用默认应用打开图片</li>
<li>使用抖音 APP 扫描二维码并登录账号</li>
<li>按照提示操作,将 Cookie 写入配置文件</li>
Expand Down Expand Up @@ -583,7 +583,7 @@ https://www.douyin.com/note/123456789
<li>设置非法字符替换规则</li>
<li>开启服务器模式局域网访问功能</li>
<li>设置服务器模式主机及端口</li>
<li>设置 Cookie 更新间隔</li>
<li>设置 Cookie 参数更新间隔</li>
<li>设置彩色交互提示颜色</li>
<li>设置请求数据时间间隔</li>
<li>设置作品下载记录数据备份间隔</li>
Expand All @@ -600,7 +600,7 @@ https://www.douyin.com/note/123456789
<p>自动读取本地浏览器的 Cookie 数据,并提取所需 Cookie 写入配置文件,需要完全关闭对应浏览器才能读取 Cookie 数据。</p>
<h2>扫码登录获取 Cookie</h2>
<p>程序自动获取抖音登录二维码,随后会在终端输出二维码,并使用系统默认图片浏览器打开二维码图片,使用者通过抖音 APP 扫码并登录账号,操作后关闭二维码图片窗口,程序会自动检查登录结果并将登录后的 Cookie 写入配置文件。</p>
<p><b>注意:</b>频繁扫码登录容易导致账号被风控,未来可能移除该功能!</p>
<p><b>注意:</b>扫码登录可能会导致抖音账号被风控,未来可能禁用该功能!</p>
<h2>终端交互模式</h2>
<p>功能最全面的模式,支持全部功能。</p>
<h3>批量下载账号作品(TikTok)</h3>
Expand Down
2 changes: 2 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,5 @@ emoji>=2.10.1
rich>=13.7.1
lxml>=5.1.0
browser-cookie3>=0.19.1
aiohttp>=3.9.3
aiosqlite>=0.20.0
6 changes: 5 additions & 1 deletion src/application/TikTokDownloader.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ def inner(self, *args, **kwargs):
class TikTokDownloader:
REDUCED = (1, 1, 1, 1, 0, 1, 0, 0, 1, 1) # 禁用项目部分功能
# REDUCED = False # 启用项目全部功能

PLATFORM = {
"1": "cookie",
"2": "cookie_tiktok",
Expand Down Expand Up @@ -294,7 +295,10 @@ def write_cookie(self):
self.parameter.update_cookie()

def auto_cookie(self):
self.console.print("该功能仅支持抖音平台,未来可能会移除!")
self.console.print(
"警告:该功能可能会导致抖音账号被风控,建议使用其他方式获取 Cookie!",
style=ERROR)
self.console.print("该功能仅支持抖音平台,未来可能会禁用该功能!", style=WARNING)
if cookie := Register(
self.settings,
self.console,
Expand Down
6 changes: 6 additions & 0 deletions src/custom/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@
BLANK_PREVIEW,
TIMEOUT,
PROJECT_NAME,
DATA_HEADERS,
PARAMS_HEADERS,
WID_COOKIE,
)
from .static import (
MAX_WORKERS,
Expand Down Expand Up @@ -74,6 +77,9 @@
"X_BOGUS_CODE",
"DISCLAIMER_TEXT",
"BLANK_PREVIEW",
"WID_COOKIE",
"TIMEOUT",
"PROJECT_NAME",
"PARAMS_HEADERS",
"DATA_HEADERS",
]
31 changes: 31 additions & 0 deletions src/custom/internal.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@
"BLANK_PREVIEW",
"TIMEOUT",
"PROJECT_NAME",
"PARAMS_HEADERS",
"DATA_HEADERS",
"WID_COOKIE",
]

PROJECT_ROOT = Path(__file__).resolve().parent.parent.parent
Expand Down Expand Up @@ -52,6 +55,34 @@
USERAGENT = (
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 "
"Safari/537.36")
PARAMS_HEADERS = {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate, br, zstd",
"Accept-Language": "zh-CN,zh;q=0.9",
"Content-Type": "text/plain;charset=UTF-8",
"Dnt": "1",
"Sec-Ch-Ua": "\"Chromium\";v=\"122\", \"Not(A:Brand\";v=\"24\", \"Google Chrome\";v=\"122\"",
"Sec-Ch-Ua-Mobile": "?0",
"Sec-Ch-Ua-Platform": "\"Windows\"",
"Sec-Fetch-Dest": "empty",
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Site": "cross-site",
"User-Agent": USERAGENT,
}
WID_COOKIE = (
"ttwid=1%7ClUkcrkPthAKpcjH3HGW8U6C7psW4vw1FXnc8qNLQ2d8%7C1710765220"
"%7C425dac317b8203020c14f83c19f1f56bcfaab011da16761c3603320e48d2babd; "
"tt_csrf_token=TNeGw38p-u2UcA7XOJtlrgKZLQAQOoTSJnbk; tt_chain_token=is5ckUq43X20AK+0nwIesw==; "
"ak_bmsc=9C1069BDAC21AD3530A2EC8373560C9E~000000000000000000000000000000"
"~YAAQGRAjF8jlFBiOAQAAgqONURfPY2uMquEui"
"+rNbDyxTmSOq48iWYuL09jkOdEeWeLlHGhcaHFV4cMBsqz4OE1S1kLYMlUNFa4E/kj1SGwrTp8REpvzTwFIgJmZdY/aChw"
"/X9GHH9te6yXD+Ho8+b3AoYeSfyq6lhewyVczKdJU/A6MYsGBJSNtMh7kSzoQ1qIWP/4XrEv"
"+BwnIXRkLwnUbKHiQ5AyjALu3dcwHfzPFdW3ZJFH1ZoHT4/Zs+f4m/QVO16aOPPd2hf/WZdzoXUS7zB0"
"+j0LSZvq69WAdCp9vpLmD/XZ0CqJ/SKzmdeaAvzAOR7cOMRFMklURoDIvzVVg8Isrm75HEPQPqy3rrtjtaL5Oi1LrRsE4zCC3"
"/hULJ2s5+eWK57JS0g==")
DATA_HEADERS = PARAMS_HEADERS | {
"Accept": "application/json, text/plain, */*",
}
X_BOGUS_CODE = (
(147, 136,),
(80, 235,),
Expand Down
2 changes: 2 additions & 0 deletions src/downloader/download.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ def __init__(self, params: "Parameter"):
self.cleaner = params.cleaner
self.cookie = params.cookie
self.PC_headers, self.black_headers = self.init_headers(params.headers)
self.PC_headers_tiktok = params.headers_tiktok
self.log = params.logger
self.xb = params.xb
self.console = params.console
Expand All @@ -55,6 +56,7 @@ def __init__(self, params: "Parameter"):
self.dynamic = params.dynamic_cover
self.original = params.original_cover
self.proxies = params.proxies
self.proxies_tiktok = params.proxies_tiktok
self.download = params.download
self.max_size = params.max_size
self.chunk = params.chunk
Expand Down
15 changes: 13 additions & 2 deletions src/encrypt/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,21 @@
VerifyFp,
)

__all__ = ['XBogus', 'MsToken', 'TtWid', 'VerifyFp']

# from .xBogus import XBogus, XBogusTikTok
# from .msToken import MsToken, MsTokenTikTok
# from .ttWid import TtWid, TtWidTikTok
# from .webID import WebId
# from .verifyFp import VerifyFp

__all__ = ['XBogus', 'MsToken', 'TtWid', 'VerifyFp']
#
# __all__ = [
# "XBogus",
# "XBogusTikTok",
# "MsToken",
# "MsTokenTikTok",
# "TtWid",
# "TtWidTikTok",
# "VerifyFp",
# "WebId",
# ]
68 changes: 61 additions & 7 deletions src/encrypt/msToken.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from typing import TYPE_CHECKING
from typing import Union

from src.custom import USERAGENT
from src.custom import PARAMS_HEADERS
from src.encrypt.ttWid import TtWid
from src.testers import Logger
from src.tools import request_post
Expand All @@ -22,9 +22,8 @@

class MsToken:
NAME = "msToken"
HEADERS = {
"User-Agent": USERAGENT,
"Content-Type": "text/plain;charset=UTF-8"}
REFERER = "https://www.douyin.com/"
HEADERS = PARAMS_HEADERS | {"Origin": REFERER[:-1], "Referer": REFERER}
API = "https://mssdk.bytedance.com/web/report"
DATA = {
"magic": 538969122,
Expand Down Expand Up @@ -91,12 +90,67 @@ async def get_real_ms_token(cls, logger: Union["BaseLogger", "LoggerManager", "L
logger.error(f"获取 {cls.NAME} 参数失败!")


class MsTokenTikTok:
pass
class MsTokenTikTok(MsToken):
REFERER = "https://www.tiktok.com/"
HEADERS = PARAMS_HEADERS | {"Origin": REFERER[:-1], "Referer": REFERER}
API = "https://mssdk.tiktokw.us/web/report"
DATA = {
"magic": 538969122,
"version": 1,
"dataType": 8,
"strData": "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",
}


async def demo():
print(await MsToken.get_real_ms_token(Logger()))
print("抖音", await MsToken.get_real_ms_token(Logger()))
print("TikTok", await MsTokenTikTok.get_real_ms_token(Logger()))


if __name__ == "__main__":
Expand Down
25 changes: 21 additions & 4 deletions src/encrypt/ttWid.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
from typing import TYPE_CHECKING
from typing import Union

from src.custom import PARAMS_HEADERS
from src.custom import WID_COOKIE
from src.testers import Logger
from src.tools import request_post

Expand All @@ -21,8 +23,9 @@ class TtWid:
'{"ticket":"","source":"node"},"cbUrlProtocol":"https","union":true}')

@classmethod
async def get_tt_wid(cls, logger: Union["BaseLogger", "LoggerManager", "Logger"], ) -> dict | None:
if response := await request_post(logger, cls.API, cls.DATA):
async def get_tt_wid(cls, logger: Union["BaseLogger", "LoggerManager", "Logger"],
proxy: str = None, ) -> dict | None:
if response := await request_post(logger, cls.API, cls.DATA, proxy=proxy):
return cls.extract(logger, response, cls.NAME)
logger.error(f"获取 {cls.NAME} 参数失败!")

Expand All @@ -39,11 +42,25 @@ def extract(logger: Union["BaseLogger", "LoggerManager", "Logger"],


class TtWidTikTok(TtWid):
pass
API = "https://www.tiktok.com/ttwid/check/"
DATA = (
'{"aid":1988,"service":"www.tiktok.com","union":false,"unionHost":"","needFid":false,"fid":"",'
'"migrate_priority":0}')

@classmethod
async def get_tt_wid(cls, logger: Union["BaseLogger", "LoggerManager", "Logger"],
proxy: str = None, ) -> dict | None:
if response := await request_post(logger, cls.API, cls.DATA, headers=PARAMS_HEADERS | {
"Cookie": WID_COOKIE,
"Content-Type": "text/plain",
}, proxy=proxy):
return cls.extract(logger, response, cls.NAME)
logger.error(f"获取 {cls.NAME} 参数失败!")


async def demo():
print(await TtWid.get_tt_wid(Logger()))
print("抖音", await TtWid.get_tt_wid(Logger()))
print("TikTok", await TtWidTikTok.get_tt_wid(Logger(), "http://localhost:10809"))


if __name__ == "__main__":
Expand Down
5 changes: 3 additions & 2 deletions src/encrypt/webID.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,11 @@ class WebId:
API = "https://mcs.zijieapi.com/webid"

@classmethod
async def get_web_id(cls, logger: Union["BaseLogger", "LoggerManager", "Logger"], user_agent: str) -> str | None:
async def get_web_id(cls, logger: Union["BaseLogger", "LoggerManager", "Logger"], user_agent: str,
proxy: str = None, ) -> str | None:
data = (f'{{"app_id":6383,"url":"https://www.douyin.com/","user_agent":'
f'"{user_agent}","referer":"https://www.douyin.com/","user_unique_id":""}}')
if response := await request_post(logger, cls.API, data, user_agent, content="json"):
if response := await request_post(logger, cls.API, data, user_agent, content="json", proxy=proxy):
return response.get("web_id")
logger.error(f"获取 {cls.NAME} 参数失败!")

Expand Down
3 changes: 0 additions & 3 deletions src/extend/__init__.py

This file was deleted.

11 changes: 0 additions & 11 deletions src/extend/video.py

This file was deleted.

3 changes: 3 additions & 0 deletions src/link/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from .extractor import Extractor

__all__ = ["Extractor"]

0 comments on commit 0a87945

Please sign in to comment.