Skip to content

Latest commit

 

History

History
410 lines (364 loc) · 22 KB

File metadata and controls

410 lines (364 loc) · 22 KB
KS-Downloader

KS-Downloader

简体中文 | English

GitHub GitHub forks GitHub Repo stars GitHub code size in bytes GitHub all releases
Static Badge GitHub release (with filter) Docker Pulls

🔥 快手作品下载工具:完全免费开源,基于 curl_cffi 库实现,下载快手视频、图片文件!


📑 项目功能

  • ✅ 下载快手作品文件
  • ☑️ 下载快手作品封面图片
  • ☑️ 下载快手作品音乐文件
  • ✅ 自动跳过已下载的作品文件
  • ✅ 作品文件完整性处理机制
  • ✅ 持久化储存作品信息至文件
  • ✅ 记录已下载作品 ID
  • ✅ 支持文件断点续传下载
  • ✅ 作品文件储存至单独文件夹
  • ✅ 自定义作品文件名称格式
  • ☑️ 从浏览器读取 Cookie
  • ✅ 支持设置作者别名
  • ✅ 按作者归档保存作品
  • ✅ 自动更新作者昵称
  • ✅ 支持 API 调用功能
  • ☑️ 后台监听剪贴板下载作品

📸 程序截图

前往 bilibili 观看演示;前往 YouTube 观看演示

🥣 使用方法

🖱 程序运行

⭐ Mac OS、Windows 10 及以上用户可前往 Releases 或者 Actions 下载程序压缩包,解压后打开程序文件夹,双击运行 main 即可使用!

⭐ 本项目包含自动构建可执行文件的 GitHub Actions,使用者可以随时使用 GitHub Actions 将最新源码构建为可执行文件!

⭐ 自动构建可执行文件教程请查阅本文档的 构建可执行文件指南 部分;如果需要更加详细的图文教程,请 查阅文章!

注意:由于 Mac OS 平台的可执行文件 main 未经过代码签名,首次运行时会受到系统安全限制。请先在终端执行 xattr -cr 项目文件夹路径 命令移除安全标记,执行一次后即可正常运行。

若通过此方式使用程序,文件默认下载路径为:.\_internal\Volume\Download;配置文件路径为:.\_internal\Volume\config.yaml

程序更新

方案一:下载并解压文件,将旧版本的 _internal\Volume 文件夹复制到新版本的 _internal 文件夹。

方案二:下载并解压文件(不要运行程序),复制全部文件,直接覆盖旧版本文件。

⌨️ 源码运行

  1. 安装不低于 3.12 版本的 Python 解释器
  2. 下载最新的源码或 Releases 发布的源码至本地
    1. 使用 pip 安装项目依赖
    2. 运行 python -m venv venv 命令创建虚拟环境(可选)
    3. 运行 .\venv\Scripts\activate.ps1 或者 venv\Scripts\activate 命令激活虚拟环境(可选)
    4. 运行 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt 命令安装程序所需模块
    5. 运行 python .\main.py 或者 python main.py 命令启动 KS-Downloader
      使用 uv 安装项目依赖(推荐)
    1. 运行 uv sync --no-dev 命令同步环境依赖
    2. 运行 uv run main.py 命令启动 KS-Downloader

⌨️ Docker 运行

  1. 获取镜像
    • 方式一:使用 Dockerfile 文件构建镜像
    • 方式二:使用 docker pull joeanamier/ks-downloader 命令拉取镜像
    • 方式三:使用 docker pull ghcr.io/joeanamier/ks-downloader 命令拉取镜像
  2. 创建容器
    • TUI 模式:docker run --name 容器名称(可选) -p 主机端口号:5557 -v ks_downloader_volume:/app/Volume -it <镜像名称>
    • API 模式:docker run --name 容器名称(可选) -p 主机端口号:5557 -v ks_downloader_volume:/app/Volume -it <镜像名称> python main.py api

    • 注意:此处的 <镜像名称> 需与您在第一步中使用的镜像名称保持一致(joeanamier/ks-downloader 或 ghcr.io/joeanamier/ks-downloader)
  3. 运行容器
    • 启动容器:docker start -i 容器名称/容器 ID
    • 重启容器:docker restart -i 容器名称/容器 ID

Docker 运行项目时不支持 从浏览器读取 Cookie,无法使用 监听剪贴板 功能,可以正常粘贴内容,其他功能如有异常请反馈!

🖥 服务器模式

启动:运行命令:python .\main.py api

关闭:按下 Ctrl + C 关闭服务器

访问 http://127.0.0.1:5557/docs 或者 http://127.0.0.1:5557/redoc;你会看到自动生成的交互式 API 文档!

🔗 支持链接

  • https://www.kuaishou.com/f/分享码
  • https://v.kuaishou.com/分享码
  • https://www.kuaishou.com/short-video/作品ID
  • https://kuaishou.cn/short-video/作品ID
  • https://live.kuaishou.com/u/作者ID/作品ID

  • 推荐使用分享链接;支持单次输入多个作品链接,链接之间使用空格分隔。

🪟 关于终端

⭐ 推荐使用 Windows 终端 (Windows 11 默认终端)运行程序以便获得最佳显示效果!

📜 其他说明

  • Windows 系统需要以管理员身份运行程序才能读取 Chromium、Chrome、Edge 浏览器 Cookie
  • 从浏览器读取 Cookie 功能依赖的第三方模块已长期未更新,可能无法正常支持最新浏览器版本。若功能出现异常,请尝试手动获取 Cookie
  • 如果开启保存作品数据至文件功能,作品数据默认储存至 ./Volume/Data/DetailData.db 文件
  • 程序设置、下载记录数据储存至 ./Volume/KS-Downloader.db 文件
  • 项目内置请求延时机制,以避免请求频率过快,代码位置:./source/tools/sleep.py

⚙️ 配置文件

项目根目录下的 config.yaml 文件,首次运行自动生成,可以自定义部分运行参数。

如果项目功能无法正常使用,请尝试配置 Cookie 后再使用!

参数 类型 含义 默认值
mapping_data str: str #作者别名映射表,格式:作者ID: 作者别名 无
work_path str 作品数据 / 文件保存根路径 项目根路径/Volume
folder_name str 作品文件储存文件夹名称 Download
name_format str 作品文件名称格式,使用空格分隔字段;支持字段:作品类型、作者昵称、作者ID、作品描述、作品ID、发布日期 发布日期 作者昵称 作品描述
name_length int 作品文件名称长度限制,超出限制的文本将被截断,设置过大的值时请确保系统支持此长度 128
cookies str 快手网页版 Cookie,无需登录 动态获取
proxy str 设置程序代理 null
data_record bool 是否保存作品数据至文件,文件类型:SQLite false
max_workers int 同时下载作品文件的最大任务数 4
download_cover(停用) str 作品封面下载格式,支持:JPEG、WEBP;设置为空字符串代表不下载 空字符串
download_music(停用) bool 是否下载作品音乐 false
max_retry int 请求数据失败时,重试的最大次数,单位:秒 5
timeout int 请求数据超时限制,单位:秒 10
impersonate str 浏览器信息,设置时参考 curl_cffi 文档 chrome146
download_chunk int 下载文件时,每次从服务器获取的数据块大小,单位:字节 2097152(2 MB)
folder_mode bool 是否将每个作品的文件储存至单独的文件夹;文件夹名称与文件名称保持一致 false
author_archive bool #是否将每个作者的作品储存至单独的文件夹;文件夹名称格式:作者ID_作者昵称 false

如果 author_archive 参数设置为 true,程序会把每个作者的作品储存至单独的文件夹;当作者的昵称发生变化时,程序会自动更新已下载作品文件名称中的作者昵称部分!

除此之外,你还可以通过设置 mapping_data 参数为某个作者设置别名;如果对某个作者设置了别名,程序会使用你设置的作者别名去替代作者昵称!

📦 构建可执行文件指南

本指南将引导您通过 Fork 本仓库并执行 GitHub Actions 自动完成基于最新源码的程序构建和打包!


使用步骤

1. Fork 本仓库

  1. 点击项目仓库右上角的 Fork 按钮,将本仓库 Fork 到您的个人 GitHub 账户中
  2. 您的 Fork 仓库地址将类似于:https://github.com/your-username/this-repo

2. 启用 GitHub Actions

  1. 前往您 Fork 的仓库页面
  2. 点击顶部的 Settings 选项卡
  3. 点击右侧的 Actions 选项卡
  4. 点击 General 选项
  5. 在 Actions permissions 下,选择 Allow all actions and reusable workflows 选项,点击 Save 按钮

3. 手动触发打包流程

  1. 在您 Fork 的仓库中,点击顶部的 Actions 选项卡
  2. 找到名为 构建可执行文件 的工作流
  3. 点击右侧的 Run workflow 按钮:
    • 选择 master 或者 develop 分支
    • 点击 Run workflow

4. 查看打包进度

  1. 在 Actions 页面中,您可以看到触发的工作流运行记录
  2. 点击运行记录,查看详细的日志以了解打包进度和状态

5. 下载打包结果

  1. 打包完成后,进入对应的运行记录页面
  2. 在页面底部的 Artifacts 部分,您将看到打包的结果文件
  3. 点击下载并保存到本地,即可获得打包好的程序

注意事项

  1. 资源使用:

    • Actions 的运行环境由 GitHub 免费提供,普通用户每月有一定的免费使用额度(2000 分钟)
  2. 代码修改:

    • 您可以自由修改 Fork 仓库中的代码以定制程序打包流程
    • 修改后重新触发打包流程,您将得到自定义的构建版本
  3. 与主仓库保持同步:

    • 如果主仓库更新了代码或工作流,建议您定期同步 Fork 仓库以获取最新功能和修复

Actions 常见问题

Q1: 为什么我无法触发工作流?

A: 请确认您已按照步骤 启用 Actions,否则 GitHub 会禁止运行工作流

Q2: 打包流程失败怎么办?

A:

  • 检查运行日志,了解失败原因
  • 确保代码没有语法错误或依赖问题
  • 如果问题仍未解决,可以在本仓库的 Issues 页面 提出问题

Q3: 我可以直接使用主仓库的 Actions 吗?

A: 由于权限限制,您无法直接触发主仓库的 Actions。请通过 Fork 仓库的方式执行打包流程

🌟 贡献指南

欢迎对本项目做出贡献!为了保持代码库的整洁、高效和易于维护,请仔细阅读以下指南,以确保您的贡献能够顺利被接受和整合。

  • 在开始开发前,请从 develop 分支拉取最新的代码,以此为基础进行修改;这有助于避免合并冲突并保证您的改动基于最新的项目状态。
  • 如果您的更改涉及多个不相关的功能或问题,请将它们分成多个独立的提交或拉取请求。
  • 每个拉取请求应尽可能专注于单一功能或修复,以便于代码审查和测试。
  • 遵循现有的代码风格;请确保您的代码与项目中已有的代码风格保持一致;建议使用 Ruff 工具保持代码格式规范。
  • 编写可读性强的代码;添加适当的注释帮助他人理解您的意图。
  • 每个提交都应该包含一个清晰、简洁的提交信息,以描述所做的更改。提交信息应遵循以下格式:<类型>: <简短描述>
  • 当您准备提交拉取请求时,请优先将它们提交到 develop 分支;这是为了给维护者一个缓冲区,在最终合并到 master 分支之前进行额外的测试和审查。
  • 建议在开发前或遇到疑问时与作者沟通,确保开发方向一致,避免重复劳动或无效提交。

参考资料:

✉️ 联系作者

  • 作者邮箱:yonglelolu@foxmail.com
  • 作者微信: Downloader_Tools
  • 微信公众号: Downloader Tools
  • Discord 社区: 点击加入社区

✨ 作者的其他开源项目:

♥️ 支持项目

如果 KS-Downloader 对您有帮助,请考虑为它点个 Star ⭐,感谢您的支持!

微信(WeChat) 支付宝(Alipay)
微信赞助二维码 支付宝赞助二维码

如果您愿意,可以考虑提供资助为 KS-Downloader 提供额外的支持!

⚠️ 免责声明

  1. 使用者对本项目的使用由使用者自行决定,并自行承担风险。作者对使用者使用本项目所产生的任何损失、责任、或风险概不负责。
  2. 本项目的作者提供的代码和功能是基于现有知识和技术的开发成果。作者按现有技术水平努力确保代码的正确性和安全性,但不保证代码完全没有错误或缺陷。
  3. 本项目依赖的所有第三方库、插件或服务各自遵循其原始开源或商业许可,使用者需自行查阅并遵守相应协议,作者不对第三方组件的稳定性、安全性及合规性承担任何责任。
  4. 使用者在使用本项目时必须严格遵守 GNU General Public License v3.0 的要求,并在适当的地方注明使用了 GNU General Public License v3.0 的代码。
  5. 使用者在使用本项目的代码和功能时,必须自行研究相关法律法规,并确保其使用行为合法合规。任何因违反法律法规而导致的法律责任和风险,均由使用者自行承担。
  6. 使用者不得使用本工具从事任何侵犯知识产权的行为,包括但不限于未经授权下载、传播受版权保护的内容,开发者不参与、不支持、不认可任何非法内容的获取或分发。
  7. 本项目不对使用者涉及的数据收集、存储、传输等处理活动的合规性承担责任。使用者应自行遵守相关法律法规,确保处理行为合法正当;因违规操作导致的法律责任由使用者自行承担。
  8. 使用者在任何情况下均不得将本项目的作者、贡献者或其他相关方与使用者的使用行为联系起来,或要求其对使用者使用本项目所产生的任何损失或损害负责。
  9. 本项目的作者不会提供 KS-Downloader 项目的付费版本,也不会提供与 KS-Downloader 项目相关的任何商业服务。
  10. 基于本项目进行的任何二次开发、修改或编译的程序与原创作者无关,原创作者不承担与二次开发行为或其结果相关的任何责任,使用者应自行对因二次开发可能带来的各种情况负全部责任。
  11. 本项目不授予使用者任何专利许可;若使用本项目导致专利纠纷或侵权,使用者自行承担全部风险和责任。未经作者或权利人书面授权,不得使用本项目进行任何商业宣传、推广或再授权。
  12. 作者保留随时终止向任何违反本声明的使用者提供服务的权利,并可能要求其销毁已获取的代码及衍生作品。
  13. 作者保留在不另行通知的情况下更新本声明的权利,使用者持续使用即视为接受修订后的条款。
在使用本项目的代码和功能之前,请您认真考虑并接受以上免责声明。如果您对上述声明有任何疑问或不同意,请不要使用本项目的代码和功能。如果您使用了本项目的代码和功能,则视为您已完全理解并接受上述免责声明,并自愿承担使用本项目的一切风险和后果。

⭐ Star 趋势

Star History Chart

💡 项目参考