mirror of
https://github.com/hect0x7/JMComic-Crawler-Python.git
synced 2025-09-26 22:31:30 +08:00
137 lines
3.3 KiB
Python
137 lines
3.3 KiB
Python
from jmcomic import *
|
||
from jmcomic.cl import JmcomicUI
|
||
|
||
# 下方填入你要下载的本子的id,一行一个,每行的首尾可以有空白字符
|
||
jm_albums = '''
|
||
|
||
|
||
|
||
'''
|
||
|
||
# 单独下载章节
|
||
jm_photos = '''
|
||
|
||
|
||
|
||
'''
|
||
|
||
|
||
def env(name, default, trim=('[]', '""', "''")):
|
||
import os
|
||
value = os.getenv(name, None)
|
||
if value is None or value == '':
|
||
return default
|
||
|
||
for pair in trim:
|
||
if value.startswith(pair[0]) and value.endswith(pair[1]):
|
||
value = value[1:-1]
|
||
|
||
return value
|
||
|
||
|
||
def get_id_set(env_name, given):
|
||
aid_set = set()
|
||
for text in [
|
||
given,
|
||
(env(env_name, '')).replace('-', '\n'),
|
||
]:
|
||
aid_set.update(str_to_set(text))
|
||
|
||
return aid_set
|
||
|
||
|
||
def main():
|
||
album_id_set = get_id_set('JM_ALBUM_IDS', jm_albums)
|
||
photo_id_set = get_id_set('JM_PHOTO_IDS', jm_photos)
|
||
|
||
helper = JmcomicUI()
|
||
helper.album_id_list = list(album_id_set)
|
||
helper.photo_id_list = list(photo_id_set)
|
||
|
||
option = get_option()
|
||
helper.run(option)
|
||
option.call_all_plugin('after_download')
|
||
|
||
|
||
def get_option():
|
||
# 读取 option 配置文件
|
||
option = create_option(os.path.abspath(os.path.join(__file__, '../../assets/option/option_workflow_download.yml')))
|
||
|
||
# 支持工作流覆盖配置文件的配置
|
||
cover_option_config(option)
|
||
|
||
# 把请求错误的html下载到文件,方便GitHub Actions下载查看日志
|
||
log_before_raise()
|
||
|
||
return option
|
||
|
||
|
||
def cover_option_config(option: JmOption):
|
||
dir_rule = env('DIR_RULE', None)
|
||
if dir_rule is not None:
|
||
the_old = option.dir_rule
|
||
the_new = DirRule(dir_rule, base_dir=the_old.base_dir)
|
||
option.dir_rule = the_new
|
||
|
||
impl = env('CLIENT_IMPL', None)
|
||
if impl is not None:
|
||
option.client.impl = impl
|
||
|
||
suffix = env('IMAGE_SUFFIX', None)
|
||
if suffix is not None:
|
||
option.download.image.suffix = fix_suffix(suffix)
|
||
|
||
|
||
def log_before_raise():
|
||
jm_download_dir = env('JM_DOWNLOAD_DIR', workspace())
|
||
mkdir_if_not_exists(jm_download_dir)
|
||
|
||
def decide_filepath(e):
|
||
resp = e.context.get(ExceptionTool.CONTEXT_KEY_RESP, None)
|
||
|
||
if resp is None:
|
||
suffix = str(time_stamp())
|
||
else:
|
||
suffix = resp.url
|
||
|
||
name = '-'.join(
|
||
fix_windir_name(it)
|
||
for it in [
|
||
e.description,
|
||
current_thread().name,
|
||
suffix
|
||
]
|
||
)
|
||
|
||
path = f'{jm_download_dir}/【出错了】{name}.log'
|
||
return path
|
||
|
||
def exception_listener(e: JmcomicException):
|
||
"""
|
||
异常监听器,实现了在 GitHub Actions 下,把请求错误的信息下载到文件,方便调试和通知使用者
|
||
"""
|
||
# 决定要写入的文件路径
|
||
path = decide_filepath(e)
|
||
|
||
# 准备内容
|
||
content = [
|
||
str(type(e)),
|
||
e.msg,
|
||
]
|
||
for k, v in e.context.items():
|
||
content.append(f'{k}: {v}')
|
||
|
||
# resp.text
|
||
resp = e.context.get(ExceptionTool.CONTEXT_KEY_RESP, None)
|
||
if resp:
|
||
content.append(f'响应文本: {resp.text}')
|
||
|
||
# 写文件
|
||
write_text(path, '\n'.join(content))
|
||
|
||
JmModuleConfig.register_exception_listener(JmcomicException, exception_listener)
|
||
|
||
|
||
if __name__ == '__main__':
|
||
main()
|