Skip to content

About

osu! 谱面批量下载器:按日期 / 玩家 bp / mapper 下载 .osz(Sayobot 镜像)

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

osu!MapsDownloader

一个面向 osu! 的谱面批量下载器,通过 Sayobot 镜像提供的 osu! API 获取谱面信息并下载 .osz,支持按日期区间、玩家 bp、mapper 三种方式收集谱面。

  • 单文件绿色程序,无需安装
  • 支持并发下载、断点续传、暂停/继续、失败重试与下载前查重
  • 当前版本:0.1.0.0
  • 平台:Windows 10 / 11(使用系统自带的 .NET Framework 4.x)
  • 本项目与 osu! 官方无关,谱面数据由 Sayobot 镜像站 提供

功能

三种下载模式

模式 输入 说明
按日期下载 起始日期、结束日期、谱面状态 下载日期区间(含结束日当天)内 Ranked / Qualified / Loved 的谱面
下载玩家 bp 玩家名或 uid、bp 数量 下载该玩家最佳成绩对应的全部谱面(接口上限 100 条,不按状态过滤)
下载 mapper 谱面 mapper 用户名 下载该 mapper 制作的全部谱面(不按状态过滤)

下载能力

  • 并发下载:1–8 路并发,可配置失败重试次数与超时
  • 断点续传:中断后保留 .part 文件,下次自动从已下载位置继续
  • 暂停 / 继续 / 停止:下载过程中可随时暂停或停止,暂停不丢进度
  • 失败重试:失败任务自动进入失败清单,可手动重试选中或全部
  • 下载前查重:扫描输出目录中已有的 .osz、已解压的谱面文件夹,以及非标准命名文件夹里的 .osu(读取 BeatmapSetID),已存在的谱面自动跳过
  • 失败清单:跨重启保留,支持重试、导出 CSV、移除、清空
  • 任务统计:已完成 / 未完成 / 跳过 / 失败 / 取消 / 总数,进度条实时显示百分比
  • 运行日志:页签内查看每一步的收集与下载日志

其他

  • 自动检测谱面目录:优先 osu! stable,找不到时尝试 osu!lazer;也可手动选择任意输出目录
  • 配置持久化:下载模式、游戏模式、线路、并发、重试、超时、状态勾选、输出目录等
  • 下载历史与失败清单:跨会话保留,可在设置中一键重置
  • 手动检查更新:设置里点击“检查更新”,有新版本时可直接更新并自动重启
  • 单实例:避免两个窗口同时写同一个下载目录
  • 高 DPI 感知:缩放比例较高的显示器上界面不再模糊

运行要求

  • Windows 10 / 11(系统自带 .NET Framework 4.x,无需另装运行库)
  • 能访问 api.sayobot.cn 与 txy1.sayobot.cn

下载与运行

  1. 在仓库的 Releases 页面下载最新的单文件 exe;
  2. 双击运行,无需安装;
  3. 首次启动会自动探测 osu! Songs 目录,也可以点“浏览”选择任意文件夹;
  4. 选择下载模式与参数,点击“开始”。

建议把输出目录设为 osu! 的 Songs 文件夹,下载完成后 osu! 会自动识别并导入谱面。


使用说明

顶部参数

参数 说明
下载模式 ① 按日期 ② 玩家 bp ③ mapper 谱面
下载类型 完整版(带视频)/ 无视频 / mini
下载线路 自动 / 中国移动 / 中国电信 / 中国联通
游戏模式 osu! / 太鼓 / 接水果 / mania
谱面状态 Ranked / Qualified / Loved,仅“按日期下载”时显示并生效
起始 / 结束日期 仅“按日期下载”时显示,结束日期包含当天
玩家 / mapper 仅模式 ②③ 显示
BP 数量 仅模式 ② 显示,范围 1–100
输出目录 下载保存位置,可浏览选择

底部按钮

  • 自动检测:重新探测 osu! 谱面目录;
  • 开始:按当前参数开始收集与下载;
  • 暂停 / 继续:暂停或恢复下载;
  • 停止:取消当前批次。

页签

  • 任务列表:每个谱面的 SID、标题、文件名、状态、进度、大小、速度;
  • 失败清单:失败任务列表,可重试选中/全部、导出 CSV、移除、清空、刷新;
  • 运行日志:收集与下载过程的实时日志。

设置

  • 并发数(1–8)、失败重试次数(0–10)、超时(10–600 秒);
  • 清空下载历史与失败清单(不会删除已下载的谱面文件);
  • 检查更新:手动查询是否有新版本,有更新时可一键下载替换并重启。

输出与数据

  • 下载的谱面命名为 {setid} {artist - title}.osz(自动清理 Windows 非法字符并限制长度);
  • 未下载完的文件以 {setid}.osz.part 保存,用于断点续传;
  • 程序数据保存在 %APPDATA%\osu!MapsDownloader:
    • records.txt:已下载记录;
    • failed.txt:失败清单;
    • config.ini:用户配置。
  • 删除程序目录不会影响已下载的谱面;需要重置历史时使用设置中的“清空下载历史与失败清单”。

代码结构

MainForm(界面与流程编排)
   ├─ TaskCollector(收集谱面) ── SayobotApi(镜像 API)
   ├─ Downloader(并发下载/续传/查重/落盘) ── AppStore(记录与失败清单)
   ├─ AppStore(文本持久化)
   └─ UpdateChecker / UpdateApplier(手动检查更新)
文件 职责
Program.cs 程序入口与单实例检查
MainForm.cs 主窗口布局与交互、批次流程编排、统计与自绘进度条
Downloader.cs 下载引擎:任务模型、工作线程、断点续传、完整性校验、失败重试、下载前查重扫描
TaskCollector.cs 三种模式的谱面收集:日期分页与切片、bp 反查、mapper 全量收集与去重
SayobotApi.cs Sayobot API 客户端与数据模型(谱面、玩家成绩)
AppStore.cs 本地持久化:下载记录、失败清单、用户配置
UpdateChecker.cs 检查更新:查询 GitHub Release、版本比较、下载并校验更新包
UpdateApplier.cs 更新落地:替换程序并自动重启
AssemblyInfo.cs 程序集版本信息
app.manifest Windows 清单(DPI 感知、普通权限启动)

数据流

  1. 收集:TaskCollector 按模式向 SayobotApi 请求谱面,得到去重后的谱面集列表;
  2. 查重:Downloader 扫描输出目录并读取历史记录,过滤掉已存在的谱面;
  3. 下载:工作线程解析下载地址、按需续传、流式写入 .part,校验大小后改名为 .osz;
  4. 记录:成功写入下载记录并清除同名失败项;失败写入失败清单;
  5. 展示:任务状态与日志通过回调回到界面线程更新。

已知限制

  • 玩家 bp 最多 100 条(镜像接口限制);
  • 模式 ②③ 会下载全部相关谱面,不按 Ranked / Qualified / Loved 过滤;
  • 依赖 Sayobot 镜像的可用性,离线状态下无法收集或下载;
  • 下载记录以文件路径校验,手动改名或移动谱面后由目录扫描兜底识别;
  • 仅支持 Windows。

致谢

  • Sayobot 镜像站(osu.sayobot.cn)及其开发者 夜妈妈:提供谱面数据与下载镜像;
  • 制作:osuID Michibata

本工具仅用于个人下载与整理谱面,请遵守 osu! 与镜像站的使用条款;项目不提供任何谱面内容。

About

osu! 谱面批量下载器:按日期 / 玩家 bp / mapper 下载 .osz(Sayobot 镜像)

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages