Skip to content

Commit

Permalink
重构项目代码
Browse files Browse the repository at this point in the history
  • Loading branch information
JoeanAmier committed Apr 4, 2024
1 parent 0a87945 commit a8775b2
Show file tree
Hide file tree
Showing 18 changed files with 210 additions and 129 deletions.
6 changes: 3 additions & 3 deletions src/DataAcquirer.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ def __init__(self, params: Parameter, cookie: str = None):
self.log = params.logger
self.xb = params.xb
self.console = params.console
self.proxies = params.proxies
self.proxy = params.proxy
self.max_retry = params.max_retry
self.timeout = params.timeout
self.cookie = params.cookie
Expand All @@ -92,7 +92,7 @@ def send_request(
method,
url,
params=params,
proxies=self.proxies,
proxies=self.proxy,
timeout=self.timeout,
headers=headers or self.PC_headers, **kwargs)
wait()
Expand Down Expand Up @@ -232,7 +232,7 @@ class Link:
r"\S*?https://www\.tiktok\.com/@\S+?/(?:video|photo)/(\d{19})\S*?") # 作品链接

def __init__(self, params: Parameter):
self.share = Share(params.logger, params.proxies, params.max_retry)
self.share = Share(params.logger, params.proxy, params.max_retry)

def user(self, text: str) -> list:
urls = self.share.run(text)
Expand Down
11 changes: 4 additions & 7 deletions src/application/TikTokDownloader.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,9 +72,6 @@ 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 @@ -243,7 +240,7 @@ def main_menu(self, default_mode=""):
@start_cookie_task
def complete(self):
"""终端交互模式"""
example = TikTok(self.parameter, self.REDUCED)
example = TikTok(self.parameter)
register(self.blacklist.close)
try:
example.run(self.default_mode)
Expand Down Expand Up @@ -296,9 +293,10 @@ def write_cookie(self):

def auto_cookie(self):
self.console.print(
"警告:该功能可能会导致抖音账号被风控,建议使用其他方式获取 Cookie!",
"该功能为实验性功能,仅适用于学习和研究目的;目前仅支持抖音平台,建议使用其他方式获取 Cookie,未来可能会禁用该功能!",
style=ERROR)
self.console.print("该功能仅支持抖音平台,未来可能会禁用该功能!", style=WARNING)
if self.console.input("是否返回上一级菜单(YES/NO)").upper() == "YES":
return
if cookie := Register(
self.settings,
self.console,
Expand Down Expand Up @@ -334,7 +332,6 @@ def check_settings(self):
console=self.console,
**self.settings.read(),
blacklist=self.blacklist,
reduced=bool(self.REDUCED),
)
self.default_mode = self.parameter.default_mode.copy()
self.parameter.cleaner.set_rule(TEXT_REPLACEMENT, True)
Expand Down
4 changes: 2 additions & 2 deletions src/application/main_api_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@


class APIServer(WebUI):
def __init__(self, parameter, key=None):
super().__init__(parameter, key)
def __init__(self, parameter):
super().__init__(parameter)

def _generate_record_params(self, data: dict, merge=True, **kwargs):
root, params, logger = self.record.run(self.parameter,
Expand Down
9 changes: 2 additions & 7 deletions src/application/main_complete.py
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ class TikTok:
}
ENCODE = "UTF-8-SIG" if system() == "Windows" else "UTF-8"

def __init__(self, parameter, key: tuple = None):
def __init__(self, parameter):
self.default_mode = None
self.parameter = parameter
self.console = parameter.console
Expand All @@ -118,7 +118,7 @@ def __init__(self, parameter, key: tuple = None):
"mark" in parameter.name_format,
"nickname" in parameter.name_format
)
self.__all_function = (
self.__function = (
("批量下载账号作品(TikTok)", self.account_acquisition_interactive_tiktok,),
("批量下载账号作品(抖音)", self.account_acquisition_interactive,),
("批量下载链接作品(通用)", self.works_interactive,),
Expand All @@ -130,11 +130,6 @@ def __init__(self, parameter, key: tuple = None):
("采集抖音热榜数据(抖音)", self.hot_interactive,),
("批量下载收藏作品(抖音)", self.collection_interactive,),
)
self.__function = [
x for x,
y in zip(
self.__all_function,
key) if y] if key else self.__all_function
self.__function_account = (
("使用 accounts_urls 参数的账号链接(推荐)", self.account_works_batch),
("手动输入待采集的账号链接", self.account_works_inquire),
Expand Down
8 changes: 4 additions & 4 deletions src/application/main_monitor.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@


class ClipboardMonitor(TikTok):
def __init__(self, parameter, key=None):
super().__init__(parameter, key)
def __init__(self, parameter):
super().__init__(parameter)


class WorksMonitor(TikTok):
def __init__(self, parameter, key=None):
super().__init__(parameter, key)
def __init__(self, parameter):
super().__init__(parameter)
4 changes: 2 additions & 2 deletions src/application/main_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@


class Server(WebUI):
def __init__(self, parameter, key=None):
super().__init__(parameter, key)
def __init__(self, parameter):
super().__init__(parameter)

def run_server(self, app):
@app.route("/", methods=["GET"])
Expand Down
4 changes: 2 additions & 2 deletions src/application/main_web_UI.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@


class WebUI(TikTok):
def __init__(self, parameter, key=None):
super().__init__(parameter, key)
def __init__(self, parameter):
super().__init__(parameter)
self.cookie = parameter.cookie
self.preview = parameter.preview
self.error_works = {
Expand Down
98 changes: 40 additions & 58 deletions src/config/parameter.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ class Parameter:
"mark",
"type",
)
mode_complete_values = {
mode_values = {
"1",
"2",
"3",
Expand Down Expand Up @@ -72,31 +72,6 @@ class Parameter:
"7",
"8",
}
mode_reduced_values = {
"1",
"2",
"3",
"4",
"4 1",
"4 2",
"4 2 1",
"4 2 2",
"4 2 3",
"4 3",
"4 3 1",
"4 3 2",
"4 4",
"4 5",
"4 5 1",
"4 5 2",
"4 5 3",
"4 6",
"4 7",
"5",
"6",
"7",
"8",
}
cleaner = Cleaner()

def __init__(
Expand All @@ -123,8 +98,8 @@ def __init__(
storage_format: str,
dynamic_cover: bool,
original_cover: bool,
proxies: str,
proxies_tiktok: str,
proxy: str,
proxy_tiktok: str,
download: bool,
max_size: int,
chunk: int,
Expand All @@ -135,7 +110,6 @@ def __init__(
owner_url_tiktok: dict,
ffmpeg: str,
blacklist: "DownloadRecorder",
reduced: bool,
timeout=10,
**kwargs,
):
Expand Down Expand Up @@ -168,8 +142,8 @@ def __init__(
self.dynamic_cover = self.__check_bool(dynamic_cover)
self.original_cover = self.__check_bool(original_cover)
self.timeout = self.__check_timeout(timeout)
self.proxies = self.__check_proxies(proxies)
self.proxies_tiktok = self.__check_proxies_tiktok(proxies_tiktok)
self.proxy = self.__check_proxy(proxy)
self.proxy_tiktok = self.__check_proxy_tiktok(proxy_tiktok)
self.download = self.__check_bool(download)
self.max_size = self.__check_max_size(max_size)
self.chunk = self.__check_chunk(chunk)
Expand All @@ -186,17 +160,16 @@ def __init__(
mix_urls_tiktok)
self.owner_url: SimpleNamespace = Extractor.generate_data_object(
owner_url)
self.__reduced = reduced
self.default_mode = self.__check_default_mode(default_mode)
self.preview = BLANK_PREVIEW
self.ffmpeg = self.__generate_ffmpeg_object(ffmpeg)
self.check_rules = {
"accounts_urls": None,
"mix_urls": None,
"owner_url": None,
"accounts_urls_tiktok": None,
"mix_urls_tiktok": None,
"owner_url_tiktok": None,
"accounts_urls": self.__check_accounts_urls,
"mix_urls": self.__check_mix_urls,
"owner_url": self.__check_owner_url,
"accounts_urls_tiktok": self.__check_accounts_urls,
"mix_urls_tiktok": self.__check_mix_urls,
"owner_url_tiktok": self.__check_owner_url,
"root": self.__check_root,
"folder_name": self.__check_folder_name,
"name_format": self.__check_name_format,
Expand All @@ -207,8 +180,8 @@ def __init__(
"storage_format": self.__check_storage_format,
"dynamic_cover": self.__check_bool,
"original_cover": self.__check_bool,
"proxies": self.__check_proxies,
"proxies_tiktok": self.__check_proxies_tiktok,
"proxy": self.__check_proxy,
"proxy_tiktok": self.__check_proxy_tiktok,
"download": self.__check_bool,
"max_size": self.__check_max_size,
"chunk": self.__check_chunk,
Expand All @@ -234,16 +207,16 @@ def __check_cookie(self, cookie: dict | str, name="cookie") -> [dict, str]:
self.logger.warning(f"{name} 参数格式错误")
return {}, ""

def __get_cookie(self, cookie: dict | str, ):
def __get_cookie(self, cookie: dict, ) -> dict:
return self.__check_cookie(cookie)[0]

def __get_cookie_cache(self, cookie: dict | str, ):
def __get_cookie_cache(self, cookie: str, ) -> str:
return self.__check_cookie(cookie)[1]

def __get_cookie_tiktok(self, cookie: dict | str, ):
def __get_cookie_tiktok(self, cookie: dict, ) -> dict:
return self.__check_cookie_tiktok(cookie)[0]

def __get_cookie_tiktok_cache(self, cookie: dict | str, ):
def __get_cookie_tiktok_cache(self, cookie: str, ) -> str:
return self.__check_cookie_tiktok(cookie)[1]

@staticmethod
Expand Down Expand Up @@ -317,36 +290,36 @@ def __check_split(self, split: str) -> str:
self.logger.info(f"split 参数已设置为 {split}", False)
return split

def __check_proxies_tiktok(self, proxies: str) -> dict:
return self.__check_proxies(proxies, "https://www.google.com/")
def __check_proxy_tiktok(self, proxy: str) -> dict:
return self.__check_proxy(proxy, "https://www.google.com/")

def __check_proxies(
def __check_proxy(
self,
proxies: str,
proxy: str,
url="https://www.baidu.com/") -> dict:
if isinstance(proxies, str) and proxies:
if isinstance(proxy, str) and proxy:
proxies_dict = {
"http": proxies,
"https": proxies,
"ftp": proxies,
"http": proxy,
"https": proxy,
"ftp": proxy,
}
try:
response = get(
url,
proxies=proxies_dict,
timeout=self.timeout)
if response.status_code == 200:
self.logger.info(f"代理 {proxies} 测试成功")
self.logger.info(f"代理 {proxy} 测试成功")
return proxies_dict
except exceptions.ReadTimeout:
self.logger.warning(f"代理 {proxies} 测试超时")
self.logger.warning(f"代理 {proxy} 测试超时")
except (
exceptions.ProxyError,
exceptions.SSLError,
exceptions.ChunkedEncodingError,
exceptions.ConnectionError,
):
self.logger.warning(f"代理 {proxies} 测试失败")
self.logger.warning(f"代理 {proxy} 测试失败")
return {
"http": None,
"https": None,
Expand Down Expand Up @@ -402,7 +375,7 @@ def __check_storage_format(self, storage_format: str) -> str:
return ""

def __check_default_mode(self, default_mode: str) -> list:
if default_mode in self.mode_reduced_values if self.__reduced else self.mode_complete_values:
if default_mode in self.mode_values:
return default_mode.split()[::-1]
if default_mode:
self.logger.warning(f"default_mode 参数 {default_mode} 设置错误")
Expand Down Expand Up @@ -456,8 +429,8 @@ def get_settings_data(self) -> dict:
"cookie_tiktok": self.cookie_tiktok_cache or self.cookie_tiktok,
"dynamic_cover": self.dynamic_cover,
"original_cover": self.original_cover,
"proxies": self.proxies["https"] or "",
"proxies_tiktok": self.proxies_tiktok["https"] or "",
"proxy": self.proxy["https"] or "",
"proxy_tiktok": self.proxy_tiktok["https"] or "",
"download": self.download,
"max_size": self.max_size,
"chunk": self.chunk,
Expand Down Expand Up @@ -489,3 +462,12 @@ def __update_cookie_data(self, data: dict) -> None:
False,
key=i))
self.update_cookie()

def __check_accounts_urls(self, data: list[dict]) -> list[dict]:
pass

def __check_mix_urls(self, data: list[dict]) -> list[dict]:
pass

def __check_owner_url(self, data: list[dict]) -> list[dict]:
pass
4 changes: 2 additions & 2 deletions src/config/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,8 @@ class Settings:
"cookie_tiktok": "",
"dynamic_cover": False,
"original_cover": False,
"proxies": "",
"proxies_tiktok": "",
"proxy": "",
"proxy_tiktok": "",
"download": True,
"max_size": 0,
"chunk": 1024 * 1024, # 每次从服务器接收的数据块大小
Expand Down
2 changes: 1 addition & 1 deletion src/custom/function.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ def suspend(count: int, console: "ColorfulConsole") -> None:
f"程序已经处理了 {batches} 个数据,为了避免请求频率过高导致账号或 IP 被风控,程序已经暂停运行,"
f"在 {rest_time} 秒后继续处理数据!", style=GENERAL)
sleep(rest_time)
# 默认不启用
# 禁用该函数
# pass


Expand Down

0 comments on commit a8775b2

Please sign in to comment.