使用myjdapi删除含.opus后缀链接失败的技术求助
解决myjdapi无法删除.opus后缀下载链接的问题
问题分析
你的脚本能正常遍历下载包和文件名,但删除操作无效,核心原因是JD API通过链接唯一ID而非文件名执行删除操作,如果你的代码仅传递文件名或未正确获取链接ID,就会导致删除失败。
修正方案及代码示例
以下是可直接运行的修正代码,包含两种删除逻辑:删除所有.opus链接,或仅删除对应存在同前缀.m4a文件的.opus链接:
from myjdapi import Myjdapi # 初始化并连接JD账户 jd = Myjdapi() jd.connect('你的JD账户邮箱', '你的JD账户密码') # 获取所有下载包 all_packages = jd.downloads.query_packages() for pkg in all_packages: # 获取当前包内的所有下载链接 links_in_pkg = pkg.query_links() opus_link_ids = [] # 收集包内所有.m4a文件的前缀(用于匹配对应opus) m4a_filename_prefixes = [link.name.rsplit('.', 1)[0] for link in links_in_pkg if link.name.endswith('.m4a')] for link in links_in_pkg: # 判断当前链接是否为opus格式 if link.name.endswith('.opus'): link_prefix = link.name.rsplit('.', 1)[0] # 两种逻辑二选一: # 逻辑1:删除所有opus链接 opus_link_ids.append(link.id) # 逻辑2:仅删除存在对应m4a文件的opus链接(注释掉逻辑1,启用此段) # if link_prefix in m4a_filename_prefixes: # opus_link_ids.append(link.id) # 批量删除目标链接 if opus_link_ids: pkg.remove_links(opus_link_ids) print(f"已清理包「{pkg.name}」中的{len(opus_link_ids)}个opus链接")
关键注意事项
- 必须使用链接ID:JD API的删除操作依赖链接的唯一
id属性,而非文件名,这是你之前操作失败的核心原因。 - 批量删除更高效:通过收集ID列表批量调用
remove_links,比逐个删除更符合API设计逻辑。 - 权限与状态检查:确保你的账户对这些下载链接有管理权限;如果链接处于正在下载状态,部分场景下需要先调用
link.pause()再执行删除。
内容的提问来源于stack exchange,提问作者Alex Doc
相关产品推荐
相关产品推荐

