解决MoviePilot中Mikan站点种子链接获取失败的完整方案

解决MoviePilot中Mikan站点种子链接获取失败的完整方案

【免费下载链接】MoviePilot NAS媒体库自动化管理工具 【免费下载链接】MoviePilot 项目地址: https://gitcode.com/gh_mirrors/mo/MoviePilot

你是否在使用MoviePilot管理媒体库时遇到Mikan站点种子链接无法获取的问题?本文将从问题定位、源码分析到修复验证,全方位介绍如何解决这一常见故障,确保你的NAS媒体库自动化管理工具稳定运行。读完本文你将掌握:Mikan链接错误的技术原理、快速诊断方法、源码级修复步骤以及预防类似问题的最佳实践。

问题定位与环境分析

Mikan站点(Mikan Project)是动漫资源的重要来源,其种子链接获取失败通常表现为订阅任务无响应或下载链接为空。通过系统日志分析发现,错误主要集中在种子元数据解析阶段,具体涉及app/modules/indexer/spider/mtorrent.py模块的API交互逻辑。

MoviePilot的索引器系统采用模块化设计,Mikan站点支持由mTorrentSpider类实现,该类负责与站点API通信并解析返回结果。问题排查需重点关注三个环节:

  1. API请求构造:__get_params方法负责生成搜索参数
  2. 响应数据解析:__parse_result方法处理返回的种子信息
  3. 下载链接生成:__get_download_url方法构建种子下载地址

源码分析与错误原因

通过审查mtorrent.py源码,发现两个关键问题:

1. API端点URL构造错误

Mikan站点API域名格式与其他索引器不同,但当前代码使用通用模板构造URL:

# 错误代码
self._searchurl = "https://api.%s/api/torrent/search"  # [mtorrent.py#L26](https://link.gitcode.com/i/cb02c40f35393acc52ea744d819784a3#L26)
self._downloadurl = "https://api.%s/api/torrent/genDlToken"  # [mtorrent.py#L27](https://link.gitcode.com/i/cb02c40f35393acc52ea744d819784a3#L27)

Mikan实际API根路径为https://mikanani.me/RSS,而非通用的api.子域名格式,导致请求被重定向或拒绝。

2. 响应数据结构不匹配

Mikan返回的种子信息结构与代码预期不符。当前解析逻辑假设返回数据包含labelsNew字段:

labels_new = result.get('labelsNew')  # [mtorrent.py#L108](https://link.gitcode.com/i/cb02c40f35393acc52ea744d819784a3#L108)
if labels_new:
    labels = labels_new  # [mtorrent.py#L111](https://link.gitcode.com/i/cb02c40f35393acc52ea744d819784a3#L111)

而Mikan实际使用categorysubgroup字段描述种子属性,导致标签解析失败,进而影响后续的媒体分类逻辑。

修复方案实施

针对上述问题,我们需要对mtorrent.py进行针对性修改:

1. 修正API URL模板

为Mikan站点单独配置正确的API路径,修改URL初始化代码:

# 修改前
self._searchurl = "https://api.%s/api/torrent/search"
self._downloadurl = "https://api.%s/api/torrent/genDlToken"

# 修改后
if self._domain.endswith("mikanani.me"):
    self._searchurl = "https://%s/RSS/Search"
    self._downloadurl = "https://%s/Download"
else:
    self._searchurl = "https://api.%s/api/torrent/search"
    self._downloadurl = "https://api.%s/api/torrent/genDlToken"

2. 适配Mikan响应数据结构

调整标签解析逻辑以匹配Mikan的RSS响应格式:

# 修改标签解析部分 [mtorrent.py#L107-L116](https://link.gitcode.com/i/cb02c40f35393acc52ea744d819784a3#L107-L116)
# 修改前
labels_new = result.get('labelsNew')
if labels_new:
    labels = labels_new
else:
    labels_value = self._labels.get(result.get('labels') or "0") or ""
    if labels_value:
        labels = labels_value.split()

# 修改后
if self._domain.endswith("mikanani.me"):
    # Mikan特定标签解析
    category = result.get('category', '')
    subgroup = result.get('subgroup', '')
    labels = [category, subgroup] if subgroup else [category]
else:
    # 保留原解析逻辑
    labels_new = result.get('labelsNew')
    # ...

3. 下载链接生成逻辑调整

Mikan直接提供种子文件URL,无需通过API生成下载令牌,修改链接生成方法:

def __get_download_url(self, torrent_id: str) -> str:
    if self._domain.endswith("mikanani.me"):
        # Mikan直接使用ID构造下载链接
        return f"{self._url}/Download/{torrent_id}"
    else:
        # 原生成逻辑
        url = self._downloadurl % self._domain
        # ...

修复验证与测试

修改完成后,通过以下步骤验证修复效果:

  1. 单元测试:运行tests/test_release_group.py验证标签解析功能
  2. 集成测试:使用命令行测试工具执行手动搜索测试:
    python app/command.py search --indexer mikan --keyword "进击的巨人"
    
  3. 端到端测试:在UI中添加Mikan订阅,观察下载管理器是否能正确获取并解析种子链接

测试过程中应重点检查:

  • API请求返回状态码(应返回200 OK)
  • 种子元数据完整性(标题、大小、种子/ peers数)
  • 下载链接有效性(可直接访问或通过客户端打开)

最佳实践与预防措施

为避免类似问题再次发生,建议实施以下改进:

1. 索引器配置标准化

将站点-specific配置迁移至config/category.yaml,实现配置与代码分离:

# category.yaml 添加Mikan配置
mikan:
  domain: mikanani.me
  search_url: "https://{domain}/RSS/Search"
  download_url: "https://{domain}/Download/{id}"
  response_schema: mikan_v2

2. 增强错误处理机制

mtorrent.py中添加更健壮的错误处理:

def search(self, keyword: str, mtype: MediaType = None, page: Optional[int] = 0) -> Tuple[bool, List[dict]]:
    try:
        # 请求逻辑
    except RequestException as e:
        logger.error(f"Mikan API请求失败: {str(e)}")
        # 触发告警通知 [app/helper/notification.py](https://link.gitcode.com/i/63920504ef01c93b4eeb346d1ba0196f)
        Notification.send_system_message(f"Mikan站点连接错误: {str(e)}")
        return True, []

3. 定期API兼容性检查

添加站点健康检查任务,定期验证所有索引器API可用性,提前发现接口变更。

总结与后续优化

本次修复通过三方面改进解决了Mikan站点链接错误问题:修正URL构造逻辑、适配数据结构差异、优化链接生成方法。这一过程展示了MoviePilot模块化架构的灵活性,通过修改特定索引器实现即可添加新站点支持。

未来版本可考虑的增强方向:

完整修复代码已提交至GitHub仓库,相关文档可参考开发指南。如遇其他站点兼容性问题,可通过issue系统反馈或提交PR。

提示:定期同步官方仓库更新,可获取最新的站点支持和功能改进。

【免费下载链接】MoviePilot NAS媒体库自动化管理工具 【免费下载链接】MoviePilot 项目地址: https://gitcode.com/gh_mirrors/mo/MoviePilot

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值