bilibili-api项目实现TV端登录功能的技术解析

bilibili-api项目实现TV端登录功能的技术解析

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

背景介绍

bilibili-api是一个用于与哔哩哔哩平台交互的Python库,近期该项目实现了TV端登录功能,这一功能扩展为用户提供了更多样化的登录方式选择。本文将深入解析这一功能的实现原理和技术细节。

传统登录方式的问题

在实现TV端登录功能之前,bilibili-api主要依赖Web端的Cookie方式进行身份验证。这种方式存在几个明显问题:

  1. 登录状态容易失效,通常2天左右就需要重新登录
  2. 当用户在浏览器同时登录B站时,会导致脚本的登录状态被踢出
  3. 需要频繁维护登录状态,增加了使用复杂度

TV端登录的优势

TV端登录相比传统Web端登录具有以下优势:

  1. 登录凭证有效期长达180天(15552000秒)
  2. 可以与Web端登录共存,互不干扰
  3. 提供了更稳定的长期运行保障

技术实现细节

登录流程

TV端登录采用了二维码扫描方式,核心流程如下:

  1. 客户端请求生成TV端登录二维码
  2. 用户使用哔哩哔哩APP扫描二维码
  3. 服务器返回包含access_key的凭证信息
  4. 客户端使用这些凭证进行后续API调用

凭证处理

登录成功后,系统会返回包含以下关键信息的凭证:

  • access_key:APP登录Token,用于身份验证
  • cookie_info:包含SESSDATA等传统Cookie信息
  • expires_in:凭证有效期,默认为180天

签名机制

对于需要使用APP端API的请求,系统实现了专门的签名机制:

  1. 将请求参数按字典序排序
  2. 添加appkey参数
  3. 使用MD5算法生成签名
  4. 将签名附加到请求参数中

签名算法核心代码如下:

def app_signature(params: dict) -> dict:
    appkey = "4409e2ce8ffd12b8"
    appsec = "59b43e04ad6965f34319062b478f83dd"
    params["appkey"] = appkey
    params = dict(sorted(params.items()))
    params["sign"] = hashlib.md5(
        (urllib.parse.urlencode(params) + appsec).encode("utf-8")
    ).hexdigest()
    return params

接口兼容性考虑

在实现过程中,开发团队注意到Web端和APP端的API存在差异:

  1. 部分接口仅支持Cookie验证
  2. 部分接口仅支持access_key验证
  3. 部分接口两者都支持但参数不同

当前实现优先保证TV登录获取的凭证能够兼容大多数现有接口,对于仅支持APP验证的接口,系统会自动使用access_key和签名机制;对于仅支持Web验证的接口,则使用cookie_info中的信息。

使用示例

开发者可以通过以下简单代码使用TV端登录功能:

from bilibili_api import login, user

# TV端二维码登录
c = login.login_with_tv_qrcode_term()

# 获取用户信息
print(await user.get_self_info(credential=c))

未来优化方向

虽然当前实现已经解决了核心问题,但仍有一些潜在的优化空间:

  1. 实现APP凭证的自动刷新机制
  2. 完善仅支持APP验证的特殊接口
  3. 优化签名机制的性能和安全性
  4. 提供更友好的登录状态管理

总结

bilibili-api项目通过实现TV端登录功能,为用户提供了更稳定、更持久的身份验证方案。这一改进不仅解决了频繁掉线的问题,还增强了库的健壮性和易用性。随着后续的持续优化,这一功能将为开发者带来更好的使用体验。

【免费下载链接】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、付费专栏及课程。

余额充值