
Security News
NVD Concedes Inability to Keep Pace with Surging CVE Disclosures in 2025
Security experts warn that recent classification changes obscure the true scope of the NVD backlog as CVE volume hits all-time highs.
BGmi 是一个用来追番的命令行程序.
bgmi completion zsh/bash
生成mikan_url
配置,用于配置蜜柑计划镜像站。proxy
设置transmission.rpc_url
重命名为 transmission.rpc_host
.global_include_keywords
,用于设置全局包含关键词。save_path_map
,用于设置不同动画的下载路径。
使用 pipx 安装(推荐):
pipx install bgmi
pip install bgmi
git clone https://github.com/BGmi/BGmi
cd BGmi
git checkout master
python -m pip install -U pip
pip install .
BGmi
bgmi install
pipx upgrade bgmi
bgmi upgrade
pip install bgmi -U
bgmi upgrade
在升级后请确保运行bgmi upgrade
查看可用的命令
bgmi --help
--help
选项同样适用于所有的子命令,readme 仅介绍了一些基础用法。
bgmi completion bash > ~/.bash_completion.d/bgmi
bgmi completion zsh > .oh-my-zsh/completions/_bgmi
我不使用其他的 zsh 插件管理器,具体的安装方法请查询你使用的插件管理器文档
BGmi 提供两种方式配置BGmi的各项运行参数,分别为配置文件与环境变量。
bgmi 的配置文件位于 ${BGMI_PATH}/config.toml
, 在未设置 BGMI_PATH
环境变量时,${BGMI_PATH}
默认为 ~/.bgmi/
。
查看当前 BGmi
设置:
bgmi config # 查看当前各项设置默认值.
data_source = "bangumi_moe" # bangumi source,!!! 请不要手动修改此选项 !!!
download_delegate = "aria2-rpc" # 番剧下载工具 (aria2-rpc, transmission-rpc, deluge-rpc, qbittorrent-webapi)
tmp_path = "tmp/tmp" # tmp dir
save_path = "tmp/bangumi" # 下载番剧保存地址
max_path = 3 # 抓取数据时每个番剧最大抓取页数
bangumi_moe_url = "https://bangumi.moe"
share_dmhy_url = "https://share.dmhy.org"
mikan_url = "https://mikanani.me"
mikan_username = "" # 蜜柑计划的用户名
mikan_password = "" # 蜜柑计划的密码
enable_global_filters = true
global_filters = [
"Leopard-Raws",
"hevc",
"x265",
"c-a Raws",
"U3-Web",
]
proxy = '' # http proxy example: http://127.0.0.1:1080
[save_path_map] # 针对每部番剧设置下载路径
'致不灭的你 第二季' = '/home/trim21/downloads/bangumi/致不灭的你/s2/' # 如果使用绝对路径,可能导致 web-ui 无法正确显示视频文件。
'致不灭的你 第三季' = './致不灭的你/s3/' # 以 save_path 为基础路径的相对路径
[http]
admin_token = "dYMj-Z4bDRoQfd3x" # web ui 的密码
danmaku_api_url = ""
serve_static_files = false
[aria2]
rpc_url = "http://localhost:6800/rpc" # aria2c RPC URL (不是 jsonrpc URL, 如果你的 aria2c 运行在 localhost:6800, 对应的链接为 `http://localhost:6800/rpc`)
rpc_token = "token:" # aria2c RPC token (如果没有设置 token, 留空或者设置为 `token:`)
[transmission]
rpc_host = "127.0.0.1"
rpc_port = 9091
rpc_username = "your_username"
rpc_password = "your_password"
rpc_path = "/transmission/rpc" # transmission http rpc 的请求路径
[qbittorrent]
rpc_host = "127.0.0.1"
rpc_port = 8080
rpc_username = "admin"
rpc_password = "adminadmin"
category = ""
[deluge]
rpc_url = "http://127.0.0.1:8112/json"
rpc_password = "deluge"
当 BGmi 的配置文件还未初始化时,各项运行参数可由环境变量进行配置
环境变量以 BGMI_
开头,全大写命名,且各级配置以 _
进行分割,如:
BGMI_DATA_SOURCE=bangumi_moe # 对应配置文件中的 data_source = "bangumi_moe"
BGMI_HTTP_ADMIN_TOKEN=dYMj-Z4bDRoQfd3x # 对应配置文件 [http] 分段中的 admin_token = "dYMj-Z4bDRoQfd3x"
...
环境变量 暂不支持 配置以下项目
enable_global_include_keywords
enable_global_filters
global_include_keywords
global_filters
[save_path_map]
注: 当配置文件生成完毕后,运行配置将会以配置文件为准,环境变量仅用于生成第一份配置文件。
使用 bgmi config set ...keys --value '...'
命令可以修改配置。
如:
bgmi config set http admin_token --value 'my super secret token'
或者
bgmi config set max_path --value '3'
不能用来修改复杂配置,如 global_filters
,请手动修改配置文件。
更换数据源会清空番剧数据库, 但是 bgmi script 不受影响. 之前下载的视频文件不会删除, 但是不会在前端显示
如果更换的源为 mikan_project
, 请先配置 MIKAN_USERNAME
和 MIKAN_PASSWORD
, 其它源不受影响
bgmi source mikan_project
切换数据源必需使用bgmi source命令,不能手动修改配置文件。手动修改配置文件会导致 bgmi 报错
修改配置文件和对应的配置项
download_delegate = "aria2-rpc" # download delegate
内置可用的选项包括 aria2-rpc
, transmission-rpc
, qbittorrent-webapi
以及 deluge-rpc
。
bgmi cal
订阅番剧:
bgmi add "进击的巨人 第三季" "刃牙" "哆啦A梦"
bgmi add "高分少女" --episode 0
添加番剧的同时设置下载路径:
bgmi add "高分少女" --episode 0 --save-path './高分少女/S1/'
退订:
bgmi delete "Re:CREATORS"
更新番剧列表并且下载番剧:
bgmi update --download # update all
bgmi update "从零开始的魔法书" --download
设置筛选条件:
bgmi list # 列出目前订阅的番剧
bgmi fetch "Re:CREATORS"
# include和exclude会忽略大小写。`720p`和`720P`的效果是相同的
bgmi filter "Re:CREATORS" --subtitle "DHR動研字幕組,豌豆字幕组" --include 720P --exclude BIG5
bgmi fetch "Re:CREATORS"
# 删除subtitle,include和exclude,添加正则匹配
bgmi filter "Re:CREATORS" --subtitle "" --include "" --exclude "" --regex "..."
bgmi filter "Re:CREATORS" --regex "(DHR動研字幕組|豌豆字幕组).*(720P)"
bgmi fetch "Re:CREATORS"
默认不启用全局包含关键词,你可以设置 enable_global_include_keywords = true
启动此功能。
enable_global_include_keywords = true
global_include_keywords = ['1080']
有一些默认定义的全局过滤关键词,默认会排除标题包含以下关键词的种子。
可以使用 enable_global_filters = false
禁止过滤全局关键词,
enable_global_filters = true
global_filters = [
"Leopard-Raws",
"hevc",
"x265",
"c-a Raws",
"U3-Web",
]
最后使用bgmi fetch
来看看筛选的结果.
搜索番剧并下载:
bgmi search '为美好的世界献上祝福!' --regex-filter '.*动漫国字幕组.*为美好的世界献上祝福!].*720P.*'
使用--min-episode
和--max-episode
来根据集数筛选下载结果
bgmi search 海贼王 --min-episode 800 --max-episode 820
# 下载
bgmi search 海贼王 --min-episode 800 --max-episode 820 --download
bgmi search
命令默认不会显示重复的集数, 如果要显示重复的集数来方便过滤, 在命令后加上--dupe
来显示全部的搜索结果
手动修改最近下载的剧集
bgmi list
bgmi mark "Re:CREATORS" 1
bgmi_http
1.先下载所有更新中番剧的封面
bgmi cal --download-cover
2.根据你是否使用 nginx, 设置serve_static_files
(使用 nginx 的情况下使用默认设置false
, 不使用的情况下设置为true
)
3.下载前端的静态文件(你可能在安装的时候已经下载过了):
bgmi install
4.在8888
端口启动 BGmi HTTP 服务器:
bgmi_http --port=8888 --address=0.0.0.0
bgmi_http
参照上面启动服务器, 然后访问http://localhost:8888/.
可以让BGmi
帮助你生成对应的 nginx 配置文件
bgmi gen nginx.conf --server-name bgmi.whatever.com
你也可以手动写一份 nginx 配置, 来满足你的更多需求(比如启用 https), 这是一份例子
server {
listen 80;
server_name bgmi;
autoindex on;
charset utf-8;
location /bangumi {
# ~/.bgmi/bangumi
# alias到你的`SAVE_PATH` 注意以/结尾
alias /path/to/bangumi/;
}
location /api {
proxy_pass http://127.0.0.1:8888;
}
location /resource {
proxy_pass http://127.0.0.1:8888;
}
location / {
# alias到你的`BGMI_PATH/front_static/`注意以/结尾
alias /path/to/front_static/;
}
}
或者添加一个 aria2c 前端之类的, 具体办法百度上有很多,不在此赘述.
macOS launchctl service controller
参照 issue #77自行设置
BGmi 使用DPlayer
做为前端播放器
如果你想要添加弹幕支持, 在这里DPlayer#related-projects选择一个后端自行搭建, 或者使用DPlayer
提供的现成接口https://api.prprpr.me/dplayer/
然后修改配置文件:
[bgmi_http]
danmaku_api_url = "https://api.prprpr.me/dplayer/" # This api is provided by dplayer official
设置你的bgmi_http
, 享受弹幕支援吧.
log 文件位于{BGMI_PATH}/tmp/
由于 pip 的限制, 你需要手动清理BGmi
产生的位于~/.bgmi
的文件
同样, BMmi
添加到你系统的定时任务也不会被自动删除, 请手动删除.
*nix:
请手动清理crontab
windows:
schtasks /Delete /TN 'bgmi updater'
你可以写一个BGmi Script
来解析你自己的想看的番剧或者美剧. BGmi 会加载你的 script, 视作一个番剧来对待. 而你所需要做的只是继承ScriptBase
类, 然后实现特定的方法, 再把你的 script 文件放到BGMI_PATH/script
文件夹内.
Example: ./tests/script_example.py
get_download_url()
返回一个dict
, 以对应集数为键, 对应的下载链接为值
{
1: 'http://example.com/Bangumi/1/1.mp4',
2: 'http://example.com/Bangumi/1/2.torrent',
3: 'http://example.com/Bangumi/1/3.mp4'
}
你可以在下载完成前或下载完成后执行一些操作, 比如移动文件, 重命名文件等等. 将你的 hook 文件放到BGMI_PATH/hooks
文件夹内即可.
from loguru import logger
from bgmi.script import HookBase
# 只需要继承 HookBase 类,实现里面的方法即可,类名字可任意设置
class Hook(HookBase):
# 在添加了下载任务之后执行
def post_add_download(self) -> None:
logger.info('post add download')
# 在更新了状态,下载之前进行执行
def pre_add_download(self) -> None:
logger.info('pre add download')
通过扩展bgmi.website.base.BaseWebsite
类并且实现对应的三个方法,你也可以简单的添加一个数据源
每个方法具体的意义和返回值格式请参照每个方法对应的注释
from typing import List, Optional
from bgmi.website.base import BaseWebsite
from bgmi.website.model import Episode, WebsiteBangumi
class DataSource(BaseWebsite):
def search_by_keyword(
self, keyword: str, count: int
) -> List[Episode]: # pragma: no cover
"""
:param keyword: search key word
:param count: how many page to fetch from website
:return: list of episode search result
"""
raise NotImplementedError
def fetch_bangumi_calendar(self,) -> List[WebsiteBangumi]: # pragma: no cover
"""
return a list of all bangumi and a list of all subtitle group
list of bangumi dict:
update time should be one of ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Unknown']
"""
raise NotImplementedError
def fetch_episode_of_bangumi(
self, bangumi_id: str, max_page: int, subtitle_list: Optional[List[str]] = None
) -> List[Episode]: # pragma: no cover
"""
get all episode by bangumi id
:param bangumi_id: bangumi_id
:param subtitle_list: list of subtitle group
:type subtitle_list: list
:param max_page: how many page you want to crawl if there is no subtitle list
:type max_page: int
:return: list of bangumi
"""
raise NotImplementedError
def fetch_single_bangumi(self, bangumi_id: str) -> WebsiteBangumi:
"""
fetch bangumi info when updating
:param bangumi_id: bangumi_id, or bangumi['keyword']
:type bangumi_id: str
:rtype: WebsiteBangumi
"""
# return WebsiteBangumi(keyword=bangumi_id) if website don't has a page contains episodes and info
FAQs
BGmi is a cli tool for subscribed bangumi.
We found that bgmi demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Security experts warn that recent classification changes obscure the true scope of the NVD backlog as CVE volume hits all-time highs.
Security Fundamentals
Attackers use obfuscation to hide malware in open source packages. Learn how to spot these techniques across npm, PyPI, Maven, and more.
Security News
Join Socket for exclusive networking events, rooftop gatherings, and one-on-one meetings during BSidesSF and RSA 2025 in San Francisco.