bilibili-api中send_msg方法发送失败问题分析

bilibili-api中send_msg方法发送失败问题分析

【免费下载链接】bilibili-api 哔哩哔哩常用API调用。支持视频、番剧、用户、频道、音频等功能。原仓库地址:https://github.com/MoyuScript/bilibili-api 【免费下载链接】bilibili-api 项目地址: https://gitcode.com/gh_mirrors/bi/bilibili-api

问题现象

在bilibili-api项目的dev版本中,用户反馈使用send_msg方法发送私信时遇到了一个奇怪的问题。调用代码示例如下:

sync(session.send_msg(credential, 352869824, '1', "nihao"))

从表面看,该方法调用返回了成功状态,但实际上消息并未成功发送,用户在自己的消息列表中也没有看到这条消息。

问题排查

经过技术分析,我们发现这个问题涉及多个潜在因素:

1. 参数类型问题

代码中第三个参数'1'作为消息类型传入,但实际应该使用整数类型。虽然API没有直接报错,但类型不匹配可能导致后续处理异常。

正确的调用方式应该是:

sync(session.send_msg(credential, 352869824, 1, "nihao"))

2. B站私信发送限制

B站对未互动的用户有私信发送限制:

  • 未互动的用户之间最多只能发送1条消息
  • 需要对方回复或关注后才能继续发送

当触发限制时,API会返回明确的错误代码21047和提示信息:"你最多发送1条消息,对方回复或者关注你后可以继续发消息~"

3. 异常处理机制

值得注意的是,虽然参数类型不正确,但API没有抛出预期的"信息类型不支持"错误。这表明项目中可能存在以下情况:

  • 类型检查逻辑不够严格
  • 错误处理机制存在漏洞
  • API对某些错误情况的响应不够明确

解决方案建议

针对这个问题,我们建议采取以下改进措施:

  1. 参数类型强化

    • 在send_msg方法中增加严格的参数类型检查
    • 对不符合要求的参数立即抛出明确的异常
  2. 错误处理优化

    • 完善API返回状态的处理逻辑
    • 确保所有可能的错误情况都有相应的异常抛出
  3. 文档补充

    • 在方法文档中明确说明参数要求
    • 添加关于B站私信限制的说明
  4. 测试用例增强

    • 增加针对各种边界条件的测试用例
    • 特别是要测试参数类型不匹配的情况

最佳实践

开发者在使用send_msg方法时应注意:

  1. 确保参数类型正确:

    • 接收者ID应为整数
    • 消息类型应为整数
    • 消息内容应为字符串
  2. 处理可能的异常:

    try:
        sync(session.send_msg(credential, 352869824, 1, "测试消息"))
    except Exception as e:
        print(f"发送失败: {e}")
    
  3. 了解平台限制:

    • 注意B站对未互动用户的私信限制
    • 考虑在UI层面提前告知用户这些限制

总结

这个案例展示了在API开发中类型安全和错误处理的重要性。作为开发者,我们应当:

  • 严格验证输入参数
  • 明确处理各种边界情况
  • 提供清晰的错误反馈
  • 充分了解第三方平台的限制规则

通过这些措施,可以显著提高API的可靠性和用户体验。

【免费下载链接】bilibili-api 哔哩哔哩常用API调用。支持视频、番剧、用户、频道、音频等功能。原仓库地址:https://github.com/MoyuScript/bilibili-api 【免费下载链接】bilibili-api 项目地址: https://gitcode.com/gh_mirrors/bi/bilibili-api

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

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

抵扣说明:

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

余额充值