后端【免费下载链接】baidupcsapi百度网盘api项目地址https://gitcode.com/gh_mirrors/ba/baidupcsapi点击查看免费下载本文以 CHANGELOG.md 为主线完整复盘 baidupcsapi 从 2013 年原作者发布首个版本、到 2014 年 fork 重写、再到 2017 年移植 Python 3 的全部关键变更并逐条对照 baidupcsapi/api.py 中的当前实现帮助读者理解每一个版本号背后对应的登录机制、上传回调、秒传、分片上传、离线下载与服务器选址等核心功能的来龙去脉。CHANGELOG 的组成两套并存的版本序列打开 CHANGELOG.md 可以发现它由两部分组成阅读时需注意区分本项目fork 版的版本序列从0.1.0 (2014-02-04)一路记录到0.9.0 (2017-1-12)记录的是 fork 作者对原项目的修改轨迹——删减了pan.baidu.com上不存在的 API、重写了大部分接口、为了与原项目区分而在 PyPI 上以baidupcsapi之名发布原作者的版本序列文件末尾以“以下是原作者的CHANGELOG”分隔收录0.1.0 (2013-09-09)至0.3.1 (2013-10-25)共四个版本即本项目 fork 的起点。另外需要说明一个版本事实CHANGELOG 最后一条记录停留在0.9.0 (2017-1-12)而当前仓库 setup.py 中声明的版本号已是0.9.3且 README.md 明确声明“本项目仅支持Python3,不提供backporting到Python2”。也就是说CHANGELOG 覆盖了项目的主要演进阶段但最后若干补丁版本的变更没有写入。版本里程碑总览完整时间线如下表日期与变更内容均取自 CHANGELOG.md版本日期归属核心变更0.1.02013-09-09原作者第一版封装所有文件操作 REST API0.2.02013-09-12原作者支持 Python 30.3.02013-09-13原作者添加baidupcs.InvalidToken异常0.3.12013-10-25原作者上传、下载改用加速域名c.pcs.baidu.com和d.pcs.baidu.com0.1.02014-02-04本项目删除 pan.baidu.com 上不可用的 API新增本地种子离线下载、验证码终端可显示新增set_fastest_baidu_server()/set_pcs_server(server)服务器选址0.1.32014-02-05本项目上传支持 stream新增回调函数接口片段完成时通知回调0.1.42014-02-06本项目文档补全修正错误0.1.82014-02-14本项目登录时错误检查0.2.02014-02-25本项目增加秒传、缩略图、文件 meta info、搜索、文件块差别检查接口删除自动设置 pan server 接口新增get_fastest_pcs_server返回最快 pcs 接口0.2.22014-02-26本项目修复发布包残留 pyc 文件导致新接口不可用的问题0.2.42014-02-27本项目增加重命名rename功能0.2.82014-02-28本项目修正 pcs 与 baidupan 服务器地址混淆常量改为BAIDUPCS_SERVER0.2.102014-03-02本项目修正上传中文文件名导致的错误0.2.112014-03-02本项目转换_request中 params 的 unicode 参数0.2.122014-03-21本项目初始化 PCS 类时支持验证码回调函数captcha_callback0.3.02014-09-01本项目彻底更新 PyPI 与 Read the Docs 上的内容0.3.22014-11-12本项目download_url可以获取大文件下载地址0.3.62015-09-05本项目去除 bencode 依赖种子 hash 计算改用网盘 API 实现0.9.02017-01-12本项目开始移植到 Python 3修正一些不合理的行为阶段一原作者时期2013——REST API 封装的起点CHANGELOG 末尾保留的原作者四个版本记录了 baidupcsapi 的前身0.1.0 (2013-09-09)第一版封装了所有文件操作 REST API。这是整个项目的技术底座后续 fork 版本在此基础上做“减法”与“改写”0.2.0 (2013-09-12)支持 Python 3。值得注意的是本项目fork 版直到 2017 年的 0.9.0 才正式移植 Python 3这解释了 CHANGELOG 中两套版本序列长期并行存在的原因0.3.0 (2013-09-13)添加baidupcs.InvalidToken异常。在当前源码中与之职责相近的登录态处理体现在 baidupcsapi/api.py 的check_login装饰器当响应 JSON 中errno -6未登录时删除.{username}.cookies缓存文件并调用_initiate()重新走登录流程。从源码结构看这是“token 失效自动恢复”机制在 fork 版中的落地形态0.3.1 (2013-10-25)上传、下载部分改用加速域名c.pcs.baidu.com与d.pcs.baidu.com。当前代码中上传/下载均通过BAIDUPCS_SERVER常量拼接https://{BAIDUPCS_SERVER}/rest/2.0/pcs/file发起见 upload服务器地址的选择机制则在后续版本中进一步完善。阶段二fork 重写时期2014——登录、上传与批量接口扩张0.1.0 (2014-02-04)登录验证码、离线下载与服务器选址这是 CHANGELOG 中信息量最密集的一条包含四项变更在当前源码中均可找到对应实现1. 删除 pan.baidu.com 上获取不到的 API。README 对此的表述是“删掉了一些原作者在pan.baidu.com上没有的api修改了大部分api和相关的程序部分”这是 fork 项目存在的直接动因。2. 新增本地种子离线下载。对应当前的 add_torrent_task上传种子文件 → 通过_get_torrent_info查询种子信息query_sinfo见 baidupcsapi/api.py→ 组装file_sha1、selected_idx、task_from1、type2等参数调用rest/2.0/services/cloud_dl的create/add_task提交离线任务入口方法 add_download_task 还会根据 URL 前缀自动分发到磁力链add_magnet_task、种子文件add_torrent_task与普通链接add_task三种路径。3. 新增验证码终端下可显示。对应 default_captcha_handler把验证码图片下载到临时文件按操作系统分别调用 Windows 默认程序、Linux 的gio open、macOS 的open打开图片再通过input(Input verify code )读取人工输入。登录流程中当服务端返回err_no257或err_no6时提取codeString并触发该处理器见 baidupcsapi/api.py。4. 服务器选址机制。CHANGELOG 记录了三个要点set_fastest_baidu_server()自动选择最快的 pcs 服务器、set_pcs_server(server)人工设置服务器、调用后在目录下生成.pcs-server文件缓存结果、每次初始化 PCS 类时检查该文件。当前源码保留了其中两项get_fastest_pcs_server 通过pcs.baidu.com/rest/2.0/pcs/file?app_id250528methodlocateupload让百度直接返回推荐节点set_pcs_server 修改全局BAIDUPCS_SERVER文档特别警告“不要加 http:// 和末尾的 /”。两者在PCSBase.__init__中被串联初始化时先set_pcs_server(self.get_fastest_pcs_server())再执行_initiate()见 baidupcsapi/api.py。0.1.3 (2014-02-05)stream 上传与进度回调这一版本为上传增加了流式支持与进度回调其核心实现是 BufferReader——一个继承自requests_toolbelt.MultipartEncoder的 Proxy 类它在read()每读出一块数据后累加self._progress并以size内容总长与progress已传输字节数两个关键字参数调用用户回调。这正是 CHANGELOG 所说“在一个片段完成时可以通知回调函数”的机制README.md 中的ProgressBar示例回调函数参数必须有size和progress两个参数名就是基于它工作的。从源码结构看BufferReader.read()中回调抛出的任何异常都会被捕获并转换为CancelledError(The upload was cancelled.)见 baidupcsapi/api.py即“回调中抛异常 取消上传”这是该版本引入的一个隐含约定。0.1.8 (2014-02-14)登录错误检查对应当前源码的 LoginFailed 异常与 _check_account_exception 方法。后者用正则从登录响应中提取err_no并维护一张错误码到中文提示的映射表例如4您输入的帐号或密码有误16您的帐号因安全问题已被限制登录120019近期登录次数过多请先通过 passport.baidu.com 解除锁定500010登录过于频繁请24小时后再试400031账号异常请在当前网络环境下在百度网页端正常登录一次此外对120021需要外部邮箱认证有专门处理分支提取authtoken与loginproxy后走authwidgetverify流程终端提示输入邮箱验证码见 baidupcsapi/api.py。0.2.0 (2014-02-25)六个新接口的批量扩张CHANGELOG 在此版本一次性记录了五项接口新增和一项接口删除全部可在当前源码中定位CHANGELOG 条目当前实现说明秒传接口rapidupload本地流式计算content-md5、前 256KB 的slice-md5与content-crc32服务端按校验和直接返回已有文件errno 404 表示需要真实上传-8 表示远程文件已存在缩略图接口thumbnail参数含height/width/quality默认100HTTP 404 表示该文件无缩略图文件 meta info 接口meta批量查询文件fs_id、大小、md5、block_list等元信息dlink1时附带直链搜索文件接口search按dirkey关键词分页搜索返回结构与list_files相同文件块差别检查接口check_file_blocks提交path/size/block_list服务器不存在该文件时返回的block_list等于提交值它是分片上传断点续传判断“哪些块需要传”的基础返回最快 pcs 接口get_fastest_pcs_server / set_pcs_serverCHANGELOG 特别注明调用方式“每次初始化的时候调用 set_pcs_server(get_fatest_pcs_server) 即可”同一条还记录了“删除自动设置pan server接口”——与 0.2.8 的服务器地址修正共同构成对“自动服务器选择”逻辑的收敛从自动探测改为初始化时一次性 locate 可手动覆盖。0.2.4 ~ 0.2.11rename、发布修复与地址修正0.2.4增加重命名功能即当前的 rename接收(path, newname)对列表走pan.baidu.com/api/filemanager?operarename。与它同一批filemanager操作的还有 move、copy、delete0.2.2修复 PyPI 发布包中残留.pyc文件导致新接口不可用的问题——这是一条“发布流程”类的变更记录提示早期 sdist 打包参见 MANIFEST.in曾混入编译产物0.2.8修正 pcs 与 baidupan 服务器地址混淆把api.py中的pcs.baidu.com硬编码替换为BAIDUPCS_SERVER常量。当前 baidupcsapi/api.py 顶部清晰保留了两个常量BAIDUPAN_SERVER pan.baidu.comfilemanager、search、cloud_dl 等管理接口与BAIDUPCS_SERVER pcs.baidu.comupload/download/filemetas 等文件传输接口正是这次修正的最终形态0.2.10 / 0.2.11分别修正中文文件名上传错误、转换_request中 params 的 unicode 参数。这两条属于典型的 Python 2 时代编码问题为 2017 年整体移植 Python 3 埋下伏笔。0.2.12 (2014-03-21)captcha_callback 回调机制CHANGELOG 原文“在初始化PCS类的时候可以加入验证码回调函数 captcha_callback若指定该函数则对没有对Image库的需要”——即把验证码识别从“下载图片 人工输入”升级为可插拔回调。当前实现见 PCS.initcaptcha_callback为可选参数未指定时回退到default_captcha_handlerverify_callback则替换安全验证码输入函数默认为input。仓库中的 examples/remote_download.py 是该机制的完整实战示例它用functools.partial把若快ruokuai打码平台的参数绑定进ruokuai_captcha_handler再作为第三个参数传给PCS(...)构造函数实现登录验证码的自动识别随后list_files检查目标目录去重、add_download_task提交离线任务。阶段三2015大文件下载直链与去 bencode 化0.3.2 (2014-11-12)download_url 支持大文件下载地址对应当前的 download_url。其实现链条值得拆解通过 get_sign 从pan.baidu.com/disk/home页面正则提取sign1/sign3/timestamp并用 RC4 类算法sign2计算出dsign先用 meta 批量获取文件dlink对每个dlink发起 stream 请求跟随重定向得到真实下载地址若最终 URL 命中wenxintishi内容提示页即 CHANGELOG 中那句“已经确定了不该下的东西还是不能下”的技术来源则回退到_yunguanjia_format——走 locatedownload 让百度网盘按“云管家”方式返回host path直链。这一版本之后download直接流式下载被标记为 Deprecated注释明确指向 “using download_url to get real download url”见 baidupcsapi/api.py断点下载改为在拿到直链后自行使用Range请求头README 中Range: bytes0-99的示例即此用法。0.3.6 (2015-09-05)去除 bencode 依赖种子 hash 改用网盘 API这是依赖瘦身的关键版本早期版本需要本地解析 torrent 文件依赖 bencode 库计算种子信息此版本起改为把种子上传到网盘后由服务端query_sinfo接口返回 sha1 与文件列表。当前 add_torrent_task 的流程印证了这一点upload(/, torrent_handler, basename)上传种子 →self._get_torrent_info(remote_path)取回torrent_info.sha1与file_info→ 提交add_task。CHANGELOG 同条还解释了一个行为决策“上传种子前删除同名文件实际上并没有必要因为1. 如果存在百度网盘会智能重命名2. 如果使用此种子下载资源则它会被移动到资源同级目录”。对照当前源码add_torrent_task内仍有self.delete([/ basename])的调用baidupcsapi/api.py可见该清理步骤被保留为防御性逻辑而 CHANGELOG 记录的是作者对“该步骤是否必要”的论证结论。阶段四2017移植 Python 3 与 0.9.x0.9.0 (2017-01-12)开始移植到 Python 3修正一些不合理的行为CHANGELOG 对这一版本只留了一句总括但结合仓库其他文件可以还原其具体内容代码层面baidupcsapi/api.py 已全面采用 Python 3 语法——from urllib import parse as urlparse、file_handler.read()返回 bytes、base64.b64encode、print函数、open(..., rb)二进制模式等密码加密登录时改用 RSA 加密传输密码_login 中rsa.PublicKey.load_pkcs1_openssl_pem(pubkey)rsa.encrypt(...)的调用对应 requirements.txt 中新增的rsa3.1.4依赖requests2.0.0、requests_toolbelt0.1.2保持不变定位层面README.md 顶部的“仅支持Python3,不提供backporting到Python2”声明以及 setup.py 中Programming Language :: Python :: 3分类与__version__ 0.9.3共同确认 0.9.x 系列就是 Python 3 版本的发布线。当前 API 速览CHANGELOG 沉淀出的能力面历经上述版本CHANGELOG 中每一项新增最终沉淀为PCS类的方法集合按功能归类如下路径均指向 baidupcsapi/api.py会话与登录quota配额、user_info、cookies 持久化. {username}.cookies、check_login自动重登文件传输upload2G 单文件、upload_tmpfileupload_superfile2G 分片block_list最多1024块、download、download_url、rapidupload秒传、check_file_blocks分块差别检查、meta、thumbnail文件管理mkdir、list_files支持by/order/limit分页排序、move、copy、rename、delete、search、list_streams按 video/audio/image/doc 等分类视图;分享share创建分享链接、save_share_list转存分享支持密码与文件过滤回调、list_shared_folder离线下载add_download_task、add_torrent_task、add_magnet_task、list_download_tasksstatus 0~8 九种任务状态、query_download_tasks、cancel_download_task、delete_download_task回收站list_recycle_bin、restore_recycle_bin、clean_recycle_bin。使用前提pip3 install baidupcsapi安装Python 3 环境登录需要百度账号密码若账号频繁触发验证码可参照 examples/remote_download.py 传入自动打码回调。结语一份 CHANGELOG 如何映射出一次 API 封装的完整生命周期baidupcsapi 的 CHANGELOG.md 虽然只有百余行却完整记录了一个非官方网盘 API 封装的典型演进路径2013 年原作者完成 REST API 全量封装并引入 token 异常与加速域名2014 年 fork 版围绕“可用性”做深——登录错误检查、验证码插拔回调、服务器选址、六个批量新接口2015 年面向大文件与依赖治理download_url直链、去 bencode2017 年完成 Python 3 移植并止步于0.9.x。每条记录都能在 baidupcsapi/api.py 中找到对应实现这也使其成为理解本项目各接口设计取舍的第一手资料文档源文件则位于 source/ 目录可作为接口文档的进一步入口。赞分享后端【免费下载链接】baidupcsapi百度网盘api项目地址https://gitcode.com/gh_mirrors/ba/baidupcsapi点击查看免费下载相关推荐IINA版本历史时间线从首个版本到现在的演进IINA版本历史时间线从首个版本到现在的演进 引言解码现代macOS视频播放体验 你是否还在为macOS上缺乏功能完备、界面现代的视频播放器而困扰作为基于音视频桌面应用终极指南如何用AltStore让非越狱iPhone告别App Store限制终极指南如何用AltStore让非越狱iPhone告别App Store限制 你是否曾经因为某个应用没上架App Store而束手无策或者下载了心仪的.ip移动开发Product Manager Skills 演进全记录从 42 个技能到 77 个技能库的版本路线图Product Manager Skills 演进全记录从 42 个技能到 77 个技能库的版本路线图 Product Manager SkillsPM SAI 技能AI 插件创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考