diff --git a/Dockerfile b/Dockerfile index d135e39..c18bf39 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ FROM python:3.12.4-slim -LABEL name="XHS-Downloader" version="2.2" authors="JoeanAmier" +LABEL name="XHS-Downloader" authors="JoeanAmier" repository="https://github.com/JoeanAmier/XHS-Downloader" COPY locale /locale COPY source /source diff --git a/locale/en_GB/LC_MESSAGES/xhs.mo b/locale/en_GB/LC_MESSAGES/xhs.mo index f08fa11..d77fc9a 100644 Binary files a/locale/en_GB/LC_MESSAGES/xhs.mo and b/locale/en_GB/LC_MESSAGES/xhs.mo differ diff --git a/locale/en_GB/LC_MESSAGES/xhs.po b/locale/en_GB/LC_MESSAGES/xhs.po index 177261e..8cf0873 100644 --- a/locale/en_GB/LC_MESSAGES/xhs.po +++ b/locale/en_GB/LC_MESSAGES/xhs.po @@ -217,8 +217,8 @@ msgstr "New version detected: {0}.{1}" msgid "作品 {0} 存在下载记录,跳过下载" msgstr "works {0} has a download record, skip download" -msgid "从指定的浏览器读取小红书网页版 Cookie,支持:1 Arc, 2 Brave, 3 Chrome, 4 Chromium, 5 Edge, 6 Firefox, 7 LibreWolf, 8 Opera, 9 Vivaldi; 输入浏览器名称或序号" -msgstr "To read the Xiaohongshu web version cookie from the specified browser, the corresponding browser needs to be closed. Supports: 1 Arc, 2 Brave, 3 Chrome, 4 Chromium, 5 Edge, 6 Firefox, 7 LibreWolf, 8 Opera, 9 Vivaldi, enter the browser name or serial number" +msgid "从指定的浏览器读取小红书网页版 Cookie,支持:{0}; 输入浏览器名称或序号" +msgstr "Read Xiaohongshu web cookies from the specified browser, supporting: {0}; Enter browser name or serial number" msgid "查看 XHS-Downloader 版本" msgstr "View XHS Downloader Version" diff --git a/locale/zh_CN/LC_MESSAGES/xhs.po b/locale/zh_CN/LC_MESSAGES/xhs.po index eca5426..c0d8fcb 100644 --- a/locale/zh_CN/LC_MESSAGES/xhs.po +++ b/locale/zh_CN/LC_MESSAGES/xhs.po @@ -217,7 +217,7 @@ msgstr "" msgid "作品 {0} 存在下载记录,跳过下载" msgstr "" -msgid "从指定的浏览器读取小红书网页版 Cookie,支持:1 Arc, 2 Brave, 3 Chrome, 4 Chromium, 5 Edge, 6 Firefox, 7 LibreWolf, 8 Opera, 9 Vivaldi; 输入浏览器名称或序号" +msgid "从指定的浏览器读取小红书网页版 Cookie,支持:{0}; 输入浏览器名称或序号" msgstr "" msgid "查看 XHS-Downloader 版本" diff --git a/source/CLI/main.py b/source/CLI/main.py index d68fc7f..1a3c9b0 100644 --- a/source/CLI/main.py +++ b/source/CLI/main.py @@ -138,8 +138,12 @@ class CLI: ("--language", "-l", "choice", _("设置程序语言,目前支持:zh_CN、en_GB")), ("--settings", "-s", "str", _("读取指定配置文件")), ("--browser_cookie", "-bc", "choice", - fill(_("从指定的浏览器读取小红书网页版 Cookie,支持:1 Arc, 2 Brave, 3 Chrome, 4 Chromium, " - "5 Edge, 6 Firefox, 7 LibreWolf, 8 Opera, 9 Vivaldi; 输入浏览器名称或序号"), width=40)), + fill(_("从指定的浏览器读取小红书网页版 Cookie,支持:{0}; 输入浏览器名称或序号").format( + ", ".join(f"{i}: {j}" for i, j in enumerate( + BrowserCookie.SUPPORT_BROWSER.keys(), + start=1, + )) + ), width=40)), ("--update_settings", "-us", "flag", _("是否更新配置文件")), ("--help", "-h", "flag", _("查看详细参数说明")), ("--version", "-v", "flag", _("查看 XHS-Downloader 版本")), diff --git a/source/application/app.py b/source/application/app.py index 22ce060..b4e32d0 100644 --- a/source/application/app.py +++ b/source/application/app.py @@ -372,7 +372,9 @@ class XHS: @staticmethod def read_browser_cookie(value: str | int) -> str: return BrowserCookie.get( - value, domains=["xiaohongshu.com", ]) if value else "" + value, + domains=["xiaohongshu.com", ], + ) if value else "" # @staticmethod # async def index(request): diff --git a/source/expansion/browser.py b/source/expansion/browser.py index 6917550..f000a7d 100644 --- a/source/expansion/browser.py +++ b/source/expansion/browser.py @@ -1,5 +1,7 @@ from contextlib import suppress +from sys import platform +from rich.console import Console from rookiepy import ( arc, brave, @@ -9,8 +11,7 @@ from rookiepy import ( firefox, librewolf, opera, - # opera_gx, - # safari, + opera_gx, vivaldi, ) @@ -19,29 +20,38 @@ __all__ = ["BrowserCookie"] class BrowserCookie: SUPPORT_BROWSER = { - "arc": arc, - "chrome": chrome, - "chromium": chromium, - "opera": opera, - # "opera_gx": opera_gx, - "brave": brave, - "edge": edge, - "vivaldi": vivaldi, - "firefox": firefox, - "librewolf": librewolf, - # "safari": safari, + "Arc": (arc, "Linux, macOS, Windows"), + "Chrome": (chrome, "Linux, macOS, Windows"), + "Chromium": (chromium, "Linux, macOS, Windows"), + "Opera": (opera, "Linux, macOS, Windows"), + "OperaGX": (opera_gx, "macOS, Windows"), + "Brave": (brave, "Linux, macOS, Windows"), + "Edge": (edge, "Linux, macOS, Windows"), + "Vivaldi": (vivaldi, "Linux, macOS, Windows"), + "Firefox": (firefox, "Linux, macOS, Windows"), + "LibreWolf": (librewolf, "Linux, macOS, Windows"), } @classmethod - def get(cls, browser: str | int, domains: list[str]) -> str: + def run(cls, domains: list[str], console: Console = None, ) -> str: + console = console or Console() + options = "\n".join(f"{i}. {k}: {v[1]}" for i, (k, v) in enumerate(cls.SUPPORT_BROWSER.items(), start=1)) + if browser := console.input( + f"读取指定浏览器的 Cookie 并写入配置文件\n{options}\n请输入浏览器名称或序号:", ): + return cls.get(browser, domains, console, ) + console.print("未选择浏览器!") + + @classmethod + def get(cls, browser: str | int, domains: list[str], console: Console = None, ) -> str: + console = console or Console() if not (browser := cls.__browser_object(browser)): - print("浏览器名称或序号输入错误!") + console.print("浏览器名称或序号输入错误!") return "" try: cookies = browser(domains=domains) return "; ".join(f"{i["name"]}={i["value"]}" for i in cookies) except RuntimeError: - print("获取 Cookie 失败,未找到 Cookie 数据!") + console.print("获取 Cookie 失败,未找到 Cookie 数据!") return "" @classmethod @@ -50,12 +60,33 @@ class BrowserCookie: browser = int(browser) - 1 if isinstance(browser, int): try: - return list(cls.SUPPORT_BROWSER.values())[browser - 1] + return list(cls.SUPPORT_BROWSER.values())[browser][0] except IndexError: return None if isinstance(browser, str): try: - return cls.SUPPORT_BROWSER[browser.lower()] + return cls.__match_browser(browser) except KeyError: return None raise TypeError + + @classmethod + def __match_browser(cls, browser: str): + for i, j in cls.SUPPORT_BROWSER.items(): + if i.lower() == browser.lower(): + return j[0] + + +match platform: + case "darwin": + from rookiepy import safari + + BrowserCookie.SUPPORT_BROWSER |= { + "Safari": (safari, "macOS"), + } + case "linux": + BrowserCookie.SUPPORT_BROWSER.pop("OperaGX") + case "win32": + pass + case _: + print("从浏览器读取 Cookie 功能不支持当前平台!") diff --git a/static/Release_Notes.md b/static/Release_Notes.md index 565a277..baf15f6 100644 --- a/static/Release_Notes.md +++ b/static/Release_Notes.md @@ -1,7 +1,8 @@ **项目更新内容:** -1. 优化文件后缀处理逻辑 -2. 优化代理测试逻辑 +1. 优化从浏览器读取 Cookie 功能 +2. 优化文件后缀处理逻辑 +3. 优化代理测试逻辑
旧版本升级后首次运行请删除配置文件 settings.json,删除后重新运行程序会自动生成新的默认配置文件!