diff --git a/.github/workflows/download_dispatch.yml b/.github/workflows/download_dispatch.yml index 9efad88..f528e02 100644 --- a/.github/workflows/download_dispatch.yml +++ b/.github/workflows/download_dispatch.yml @@ -6,7 +6,12 @@ on: JM_ALBUM_IDS: type: string description: 本子id(多个id用-隔开,如 '123-456-789') - required: true + required: false + + JM_PHOTO_IDS: + type: string + description: 章节id(可以单独下载某个本子的某个章节,多个id用-隔开(同上)) + required: false DIR_RULE: type: string @@ -45,6 +50,7 @@ jobs: env: # 工作流输入 JM_ALBUM_IDS: ${{ github.event.inputs.JM_ALBUM_IDS }} + JM_PHOTO_IDS: ${{ github.event.inputs.JM_PHOTO_IDS }} DIR_RULE: ${{ github.event.inputs.DIR_RULE }} ZIP_NAME: ${{ github.event.inputs.ZIP_NAME }} UPLOAD_NAME: ${{ github.event.inputs.UPLOAD_NAME }} diff --git a/setup.py b/setup.py index 4607c4a..15bdea4 100644 --- a/setup.py +++ b/setup.py @@ -27,7 +27,7 @@ setup( package_dir={"": "src"}, python_requires=">=3.7", install_requires=[ - 'commonX>=0.5.3', + 'commonX>=0.5.6', 'curl_cffi', 'PyYAML', 'Pillow', diff --git a/src/jmcomic/__init__.py b/src/jmcomic/__init__.py index 6a7be5f..87a1de1 100644 --- a/src/jmcomic/__init__.py +++ b/src/jmcomic/__init__.py @@ -2,7 +2,7 @@ # 被依赖方 <--- 使用方 # config <--- entity <--- toolkit <--- client <--- option <--- downloader -__version__ = '2.2.9' +__version__ = '2.2.11' from .api import * from .jm_plugin import * diff --git a/src/jmcomic/cl.py b/src/jmcomic/cl.py index 9c1c616..cf6ec54 100644 --- a/src/jmcomic/cl.py +++ b/src/jmcomic/cl.py @@ -8,7 +8,7 @@ $ jmcomic 123 456 p333 --option="D:/option.yml" """ import os.path -from typing import List +from typing import List, Optional def get_env(name, default): @@ -23,7 +23,7 @@ def get_env(name, default): class JmcomicUI: def __init__(self) -> None: - self.option_path = None + self.option_path: Optional[str] = None self.raw_id_list: List[str] = [] self.album_id_list: List[str] = [] self.photo_id_list: List[str] = [] @@ -42,13 +42,16 @@ class JmcomicUI: parser.add_argument( '--option', help='path to the option file, you can also specify it by env `JM_OPTION_PATH`', - default=get_env('JM_OPTION_PATH', './option.yml'), + default=get_env('JM_OPTION_PATH', None), ) args = parser.parse_args() - self.option_path = os.path.abspath(args.option) - self.raw_id_list = args.id_list + if args.option is not None: + self.option_path = os.path.abspath(args.option) + else: + self.option_path = None + self.raw_id_list = args.id_list self.parse_raw_id() def parse_raw_id(self): @@ -75,18 +78,23 @@ class JmcomicUI: from .api import jm_debug jm_debug('command_line', f'start downloading...\n' - f'- using option: [{self.option_path}]\n' + f'- using option: [{self.option_path or "default"}]\n' f'to be downloaded: \n' f'- album: {self.album_id_list}\n' f'- photo: {self.photo_id_list}') - self.run() - def run(self): - from .api import download_album, download_photo, create_option + from .api import create_option, JmOption + if self.option_path is not None: + option = create_option(self.option_path) + else: + option = JmOption.default() + + self.run(option) + + def run(self, option): + from .api import download_album, download_photo from common import MultiTaskLauncher - option = create_option(self.option_path) - if len(self.album_id_list) == 0: download_photo(self.photo_id_list, option) elif len(self.photo_id_list) == 0: diff --git a/usage/workflow_download.py b/usage/workflow_download.py index f71877d..ec9df01 100644 --- a/usage/workflow_download.py +++ b/usage/workflow_download.py @@ -1,4 +1,5 @@ from jmcomic import * +from jmcomic.cl import get_env, JmcomicUI # 下方填入你要下载的本子的id,一行一个。 # 每行的首尾可以有空白字符 @@ -12,12 +13,18 @@ jm_albums = ''' ''' +# 单独下载章节 +jm_photos = ''' -def get_jm_album_ids(): + +''' + + +def get_id_set(env_name): aid_set = set() for text in [ jm_albums, - (get_env('JM_ALBUM_IDS') or '').replace('-', '\n'), + (get_env(env_name, '')).replace('-', '\n'), ]: aid_set.update(str_to_set(text)) @@ -25,8 +32,14 @@ def get_jm_album_ids(): def main(): - # 下载漫画 - download_album(get_jm_album_ids(), option=get_option()) + album_id_set = get_id_set('JM_ALBUM_IDS') + photo_id_set = get_id_set('JM_PHOTO_IDS') + + helper = JmcomicUI() + helper.album_id_list = list(album_id_set) + helper.photo_id_list = list(photo_id_set) + + helper.run(get_option()) def get_option(): @@ -39,18 +52,14 @@ def get_option(): # 覆盖client实现类,实现把请求错误的html下载到文件,方便GitHub Actions下载查看日志 hook_debug(option) - # 启用 client 的缓存 - client = option.build_jm_client() - client.enable_cache() - # 登录,如果有配置的话 - login_if_configured(client) + login_if_configured(option.build_jm_client()) return option def cover_option_config(option: JmOption): - dir_rule = get_env('DIR_RULE') + dir_rule = get_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) @@ -64,8 +73,8 @@ def login_if_configured(client): # 配置的方式很简单,网页上点一点就可以了 # 具体做法请去看官方教程:https://docs.github.com/en/actions/security-guides/encrypted-secrets # 萌新注意!!!如果你想 `开源` 你的禁漫帐号,你也可以直接把账号密码写到下面的代码😅 - username = get_env('JM_USERNAME') - password = get_env('JM_PASSWORD') + username = get_env('JM_USERNAME', None) + password = get_env('JM_PASSWORD', None) if username is not None and password is not None: client.login(username, password, True) print_eye_catching(f'登录禁漫成功') @@ -73,7 +82,7 @@ def login_if_configured(client): # noinspection PyUnusedLocal def hook_debug(option): - jm_download_dir = get_env('JM_DOWNLOAD_DIR') or workspace() + jm_download_dir = get_env('JM_DOWNLOAD_DIR', workspace()) mkdir_if_not_exists(jm_download_dir) class RaiseErrorAwareClient(JmHtmlClient): @@ -91,15 +100,5 @@ def hook_debug(option): JmModuleConfig.CLASS_CLIENT_IMPL['html'] = RaiseErrorAwareClient -def get_env(name): - import os - value = os.getenv(name, None) - - if value is None or value == '': - return None - - return value - - if __name__ == '__main__': main()