一个用于搜索动漫磁力链接与种子的Python库,拥有强大的可扩展性。
支持通过插件系统从不同来源搜索动画资源,并能够处理磁力链接、文件大小转换等功能。
使用过旧版本的用户注意,项目名称发生了改变,请务必重新安装。同时由于2.0版本的重构,部分API可能发生变化,建议查看文档。
- 支持多个资源站点的搜索功能
- 可扩展的插件系统
- 文件大小单位转换
- CSV导出功能
- 磁力链接处理
- 时间格式转换
- 错误处理机制
Animag可以使用pip轻松地安装:
pip install animag
# 导入搜索器类
from animag import Searcher
# 创建搜索器实例
searcher = Searcher(plugin_name='dmhy',
no_search_errors=True)
# 搜索动画(代理仅作为演示)
searcher.search("葬送的芙莉莲",
collected=True,
proxies={'http': 'http://localhost:6666',
'https': 'http://localhost:6666'})
# 打印搜索结果
print(searcher.get_animes())
"""
示例输出(2024年12月22日的结果):
Search completed successfully: 葬送的芙莉莲
[Anime(time='2024/10/20 12:23', title='[7³ACG\u200b] \u200b葬送的芙莉莲/Sousou no Frieren S01 | 01-28 [简繁字幕] BDrip 1080p AV1 OPUS 2.0\u200b\u200b\u200b', size='17.1GB', magnet='magnet:?xt=urn:btih:...
"""
# 转换所有结果的文件大小为GB
searcher.size_format_all('MB')
# 保存结果到CSV文件
searcher.save_csv("search_results.csv")
站点 | 插件参数名称 | 速度 | 季度全集搜索 | size | magnet | torrent | 注意事项 |
---|---|---|---|---|---|---|---|
dmhy.org | dmhy | 适中 | ✅ | ✅ | ✅ | ❎ | 无 |
dmhy.org | dmhy_rss | 极快 | ❎ | ❎ | ✅ | ❎ | 无 |
nyaa.si | nyaa | 极快 | ❎ | ✅ | ✅ | ✅ | 无 |
nyaa.si | nyaa_rss | 极快 | ❎ | ✅ | ✅ | ✅ | 无 |
acg.rip | acgrip | 适中 | ❎ | ✅ | ❎ | ✅ | 无 |
acg.rip | acgrip_rss | 较慢 | ❎ | ❎ | ❎ | ✅ | 设置的最大搜索页数是5页,因为多了会被服务器阻断 可以自行修改模块的 MAX_PAGE ,不建议超过9 |
www.tokyotosho.info | tokyotosho | 适中 | ❎ | ✅ | ✅ | ✅ | 需要英文/日文搜索 |
www.tokyotosho.info | tokyotosho_rss | 较快 | ❎ | ✅ | ✅ | ✅ | 需要英文/日文搜索 |
animetosho.org | animetosho | 快 | ❎ | ✅ | ✅ | ✅ | 需要英文搜索 |
animetosho.org | animetosho_rss | 快 | ❎ | ✅ | ✅ | ✅ | 需要英文搜索 |
以上所有插件都需要代理才能正常工作,确保正确配置代理设置
plugin_name
: 插件名称,默认:'dmhy'parser
: 解析器选项,RSS插件无需提供,默认:'lxml'verify
: 验证选项,是否验证SSL证书,默认:Truetimefmt
: 时间格式,默认:'%Y/%m/%d %H:%M'no_search_errors
: 是否忽略搜索错误,默认:False
keyword
: 搜索关键词collected
: 是否收集结果proxies
: 代理设置system_proxy
: 是否使用系统代理**extra_options
: 额外选项,会并入搜索时的查询字符串
Anime
类用于表示单个动画资源的信息
time
: 发布时间title
: 标题size
: 文件大小magnet
: 磁力链接torrent
: 种子链接hash
: 磁力链接的哈希值,如果不存在magnet则其不存在
size_format()
: 转换文件大小单位set_timefmt()
: 转换时间格式
Searcher
类是搜索功能的核心实现
- 初始化搜索插件
- 执行搜索操作
- 处理搜索结果
- 导出数据
search()
: 搜索动画资源get_anime()
: 获取单个动画资源get_animes()
: 获取所有动画资源size_format_all()
: 批量转换文件大小单位save_csv()
: 将搜索结果保存为CSV文件set_timefmt()
: 设置时间格式
库定义了多种错误类型:
PluginImportError
: 插件导入错误SearchRequestError
: 搜索请求错误SearchParseError
: 搜索结果解析错误SizeFormatError
: 文件大小格式化错误TimeFormatError
: 时间格式化错误HashExtractError
: 磁力链接哈希提取错误SaveCSVError
: CSV保存错误
Animag支持安装自己实现的搜索插件,插件类必须继承BasePlugin
类,并实现search()
方法。
# myplugin.py
# 文件名必须是小写的插件名称
from animag import BasePlugin, Anime
from typing import List, Optional
class MyPlugin(BasePlugin):
abstract = False # 这一行必须设置,否则不会被识别为插件
def __init__(self,
parser: Optional[str] = None,
verify: Optional[bool] = None,
timefmt: Optional[str] = None):
# 插件初始化
pass
def search(self, keyword: str,
collected: Optional[bool] = None,
proxies: Optional[dict] = None,
system_proxy: Optional[bool] = None,
**extra_options) -> List[Anime] | None:
# 实现搜索逻辑
pass
将自定义插件安装到animag/plugins目录后,在搜索器初始化时,指定插件名称为myplugin
即可,如果没有安装至此目录,也可以手动将模块导入至命名空间。
from animag import Searcher
searcher = Searcher(plugin_name='myplugin')
或者是直接导入插件模块
import myplugin
from animag import Searcher
searcher = Searcher(plugin_name='myplugin')
项目附赠了一个CLI工具,使用 Rich 库实现美观的控制台输出,支持交互式选择。
animag [-h] -s SEARCH [-p PLUGIN] [-c]
-s, --search: 搜索关键词
-h
,--help
: 显示帮助信息-p
,--plugin
: 指定搜索插件(默认:'dmhy')-c
,--collected
: 启用季度全集搜索模式
# 基本搜索
animag -s "葬送的芙莉莲"
# 使用特定插件搜索
animag -s "葬送的芙莉莲" -p nyaa
# 搜索季度全集
animag -s "葬送的芙莉莲" -c
- 目前所有的插件都需要代理才能工作,确保正确配置代理设置
- 时间格式必须符合Python的时间格式字符串规范