bilibili_comics_downloader

bcdown

Bilibili漫画下载器,written in Rust

这个项目用来接替之前的python版

特性

异步高性能

网络相关操作使用了基于`tokio`的`reqwests`,较多线程版有较大的性能提升
更加灵活的登录

工具支持 **扫码登录** 及 **SESSDATA登录** 两种登录方式,且能保存登录结果,无需每次重复登录
更完善的缓存功能

工具会缓存更多的内容以减少网络请求,缓存地址可配置,默认选取用户的*文档*文件夹
更灵活的导出

支持分话导出和合并导出,会自动添加Kindle等阅读器可识别的书签

目前支持**epub**和**pdf**两种格式

使用方法

工具共有如下几个命令:

`bcdown info`  - 显示配置信息,缓存大小,登录状态

使用示例:

- 
    
    `bcdown info`
    
    ```
    ℹ 加载配置文件:D:\\Documents\\bcdown/config.toml
    ℹ 登录信息有效!
    ℹ 用户名:[数据删除]
    ℹ 漫币余额:[数据删除]
    ℹ 缓存目录:D:\\Documents\\bcdown/cache
    ℹ 缓存目录大小:137 MB
    ℹ 默认下载目录:D:\\Download
    
    ```
`bcdown login` - 登录B漫账号,通过二维码或者sessdata

使用示例:

- 
    
    `bcdown login -s [数据删除]` 通过sessdata登录
    
    ```
    ℹ 加载配置文件:D:\\Documents\\bcdown/config.toml
    ℹ 登录信息有效!
    ℹ 用户名:[数据删除]
    ℹ 漫币余额:[数据删除]
    
    ```
    
- 
    
    `bcdown login -q` 通过扫描二维码登录
    
    ```
    ℹ 加载配置文件:D:\\Documents\\bcdown/config.toml
     ▀ ██▀▀▀▄ ▀ ▄▄ █▄ ▀▄▄ ▀█▀█▄▀▄ ██▀▀█▄
     ▀▀ ▄▀ ▀ █ ▀ ▄ ▄▄▄▄▀▄█▀▀██ █ ▄█▀▀█
     █ █▀█▄▄▀██▄ ▄▀▄▄▄▄▀▄▀▀▀▀█▀▀█▀ ▀▀▀
     █▄█▀█▀██ ▄ ██▄ █▄ ██ ▄ ▄▀█▄ ██▀ ██
     █▀ ▀▄▀▀█▀ █▀▄█▄ ▀█▄▄▄▀█▀▀▀ ▄▀▀▄▀ █▄
     █ █▀█ █▄█ █▄ █▄▄ ▄▀ ██▄█▄ ▀▀█
     ▄ ▄▄▀▄▀ █▄▄▄ ▄▄▀▄██▄█▄▀█▀▀▀▀▄█▀ ▀█▀
     █▀█ ▀▀▄███▀█▄▀█ ▀ ▀▄▀▄█ ██ ████▀ █▀
     ▄▄ █ ▀ █▄▄▀█▀█ ▄█▄▄▄ ▄▄▄█▀▀▄█▀█▀ █▀▀
     █ ▄▄▀▄▀▄██▀ █ █▀ ▀ ▀▄█▄▀ ▄██▄▀█ ▀██
     ▀ ▀▀▀ ▀ ▄▀▄▄▀ ▀▀ █▄██▄▀▄▀▀▀ █▀▀▀██▀▀
     █▀▀▀▀▀█ ▄▀ █▀██▀▀▄█▄▀ ▄ ▀ █ ▀ █▄▀█▀
     █ ███ █ █ ▄▄▄█▀▄▄▀█▀ ▄█▄█▀▀███▀█▄▀▀▄
     █ ▀▀▀ █ ▀ ▀▀▀▄ ▀█ █ ██▄█ ▀▀▄▀ ▄ ▀█
     ▀▀▀▀▀▀▀ ▀▀▀ ▀▀▀▀▀ ▀▀▀▀ ▀▀ ▀ ▀▀▀
    
    ✔ 二维码已生成,请扫描二维码登录
    ℹ 如果显示错误,请手动访问:[链接省略]
    ⠇ 等待确认...
    
    ```
    
    > 
    > 
    > 
    > **备注**:建议在支持色彩和符号终端中执行,如*Windows Terminal*
    > 
`bcdown clear` - 清空缓存文件夹
`bcdown search [链接或ID]` - 搜索某个漫画,列出它的全部章节
`bcdown list` - 列出缓存中的漫画
`bcdown fetch [链接或ID] <--range [开始]-[结束],[开始]-,-[结束]>` - 将一个漫画下载到本地

使用示例:

- 
    
    `bcdown fetch mc29911 --range 1-20,40-50,60-`  下载 *mc29911* 第1话到第20话,第40话到第50话 和 第60话之后的所有到本地
    
    ``
`bcdown export [链接或ID] --format [epub或pdf] <--range [开始]-[结束],[开始]-,-[结束]> <-s 单独导出每一话> <--output [输出位置]> <-g [组大小>]`  - 导出一个本地漫画