百度网盘SDK

实现百度网盘的一些接口,整合后方便快速调用,暂时只支持AES加密。
使用sdk前必须获取授权,内置了简化授权、设备码授权实现。
您也可以自行实现,参考:https://pan.baidu.com/union/doc/ol0rsap9s
官方接口文档地址:https://pan.baidu.com/union/doc/
安装
推荐使用go module进行依赖管理
go get -u github.com/766800551/mopler
快速开始
package main
import (
"fmt"
"github.com/766800551/mopler"
"github.com/766800551/mopler/impl/authorization"
)
func main() {
q := authorization.NewQuickTokenImpl(mopler.Token)
sdk := mopler.New(q)
info, err := sdk.UserInfo()
if err != nil {
fmt.Println(err)
}
fmt.Printf("%+v\n", info)
}
填入正确的信息,此时就可以看到返回了结果:
&{BaiduName:风屿7010 NetdiskName: AvatarUrl:https://dss0.bdstatic.com/7Ls0a8Sm1A5BphGlnYG/sys/portrait/item/netdisk.1.1986fe57.bLBgo-alQv_C54a0d5WkDA.jpg VipType:2 Uk101935704420 Errno:0 RequestId:9089383694159695404 Errmsg:succ}
授权
由于百度不允许在非百度官方网站完成账号的授权,因此需要引导用户完成授权。
示例
快速授权
快速授权是直接将获取到的token进行传入,目前内置了设备码授权和简化授权两种方式可以获取token
设备码授权
设备码授权分两种,第一种为二维码,第二种为设备码,推荐二维码(不用登录账号)
- 设备码:您需要将设备码告知给用户,并且指导用户打开VerificationUrl链接输入设备码和账号密码完成授权
- 二维码:通过QrcodeUrl打开为一张二维码图片,您需要指导用户通过百度类产品扫描完成授权
参数说明:
-
ClientId:您应用的AppKey。
-
ClientSecret:您应用的SecretKey
-
AccessToken:您通过鉴权的方式获取到的access_token, 如果设置了,那么就会跳过获取token的步骤,并且需要您自己实现过期后刷新token的方法。设置此参数后,TokenMode和AuthMethod可以在配置初始化的时候不进行传递
-
TokenMode:token验证方式
-
AuthMethod: 根据授权模式来引导用户授权。是一个回调函数,参数传递一个response.Code,用来指导用户完成授权,response.Code的参数说明如下:
- DeviceCode //设备码,可用于生成单次凭证 Access Token。
- UserCode //用户码。 如果选择让用户输入 user code 方式,来引导用户授权,设备需要展示 user code 给用户。
- VerificationUrl //用户输入 user code 进行授权的 url。
- QrcodeUrl //二维码url,用户用手机等智能终端扫描该二维码完成授权。
- ExpiresIn //deviceCode 的过期时间,单位:秒。 到期后 deviceCode 不能换 Access Token。
- Interval //deviceCode 换 Access Token 轮询间隔时间,单位:秒。 轮询次数限制小于 expire_in/interval。
简化授权
简化授权由于官方并未提交回调,因此需要用户将授权完成后重定向的链接手动拷贝输入,提供了解析链接的函数。
基础接口
(参数更新可能不及时,具体见API文档)
部分接口字段,由于官方Api并未说明含义,但是有返回,这里只做标识,不猜测具体含义。
接口用法见test文件夹里的测试示例,这里只列出来参数说明
获取用户信息
示例
返回参数
| 参数 |
说明 |
| BaiduName |
百度帐号名称 |
| NetdiskName |
网盘帐号 |
| AvatarUrl |
头像地址 |
| VipType |
会员类型,0普通用户、1普通会员、2超级会员 |
| Uk |
用户ID |
| Errno |
错误码 |
| Errmsg |
错误信息 |
| RequestId |
请求Id |
获取网盘容量信息
示例
请求参数
| 参数 |
说明 |
| Checkfree |
是否检查免费信息,0为不查,1为查,默认为0 |
| Checkexpire |
是否检查过期信息,0为不查,1为查,默认为0 |
返回参数
| 参数 |
说明 |
| Total |
总空间大小,单位B |
| Expire |
7天内是否有容量到期 |
| Used |
已使用大小,单位B |
| Free |
剩余大小,单位B |
| Errno |
错误码 |
| Errmsg |
错误信息 |
| RequestId |
请求Id |
获取文件列表信息
示例
请求参数
| 参数 |
说明 |
| Dir |
需要获取文件列表的目录,例如/apps(必填) |
| Order |
排序字段:默认为name; time表示先按文件类型排序,后按修改时间排序; name表示先按文件类型排序,后按文件名称排序; size表示先按文件类型排序,后按文件大小排序。 |
| Desc |
默认为升序,设置为1实现降序 (注:排序的对象是当前目录下所有文件,不是当前分页下的文件) |
| Start |
起始位置,从0开始 |
| Limit |
查询数目,默认为1000,建议最大不超过1000 |
| Web |
值为1时,返回dir_empty属性和缩略图数据 |
| Folder |
是否只返回文件夹,0 返回所有,1 只返回文件夹,且属性只返回path字段 |
响应参数
| 参数 |
说明 |
| Errno |
错误码 |
| GuidInfo |
|
| Guid |
|
| RequestId |
请求id |
| Errmsg |
错误信息 |
| List |
文件信息 |
| List参数 |
说明 |
| FsId |
文件在云端的唯一标识ID |
| Path |
文件的绝对路径 |
| ServerFilename |
文件名称 |
| Size |
文件大小 |
| ServerMtime |
文件在服务器修改时间 |
| ServerCtime |
文件在服务器创建时间 |
| LocalMtime |
文件在客户端修改时间 |
| LocalCtime |
文件在客户端创建时间 |
| Isdir |
是否为目录,0 文件、1 目录 |
| Category |
文件类型,1 视频、2 音频、3 图片、4 文档、5 应用、6 其他、7 种子 |
| Md5 |
云端哈希(非文件真实MD5),只有是文件类型时,该字段才存在 |
| DirEmpty |
该目录是否存在子目录,只有请求参数web=1且该条目为目录时,该字段才存在, 0为存在, 1为不存在 |
| Thumbs |
只有请求参数web=1且该条目分类为图片时,该字段才存在,包含三个尺寸的缩略图URL |
| HasMore |
是否还有下一页,0表示无,1表示有 |
| Cursor |
当还有下一页时,为下一次查询的起点 |
| Privacy |
|
| Unlist |
|
| ServerAtime |
|
| Share |
|
| Empty |
|
| OperId |
|
递归获取文件列表信息
示例
请求参数
| 参数 |
说明 |
| Path |
需要获取文件列表的目录,例如/apps(必填) |
| Order |
排序字段:默认为name; time表示先按文件类型排序,后按修改时间排序; name表示先按文件类型排序,后按文件名称排序; size表示先按文件类型排序,后按文件大小排序。 |
| Desc |
默认为升序,设置为1实现降序 (注:排序的对象是当前目录下所有文件,不是当前分页下的文件) |
| Start |
起始位置,从0开始 |
| Limit |
查询数目,默认为1000,建议最大不超过1000 |
| Web |
值为1时,返回dir_empty属性和缩略图数据 |
响应参数
| 参数 |
说明 |
| Errno |
错误码 |
| GuidInfo |
|
| Guid |
|
| RequestId |
请求id |
| Errmsg |
错误信息 |
| List |
文件信息 |
| List参数 |
说明 |
| FsId |
文件在云端的唯一标识ID |
| Path |
文件的绝对路径 |
| ServerFilename |
文件名称 |
| Size |
文件大小 |
| ServerMtime |
文件在服务器修改时间 |
| ServerCtime |
文件在服务器创建时间 |
| LocalMtime |
文件在客户端修改时间 |
| LocalCtime |
文件在客户端创建时间 |
| Isdir |
是否为目录,0 文件、1 目录 |
| Category |
文件类型,1 视频、2 音频、3 图片、4 文档、5 应用、6 其他、7 种子 |
| Md5 |
云端哈希(非文件真实MD5),只有是文件类型时,该字段才存在 |
| DirEmpty |
该目录是否存在子目录,只有请求参数web=1且该条目为目录时,该字段才存在, 0为存在, 1为不存在 |
| Thumbs |
只有请求参数web=1且该条目分类为图片时,该字段才存在,包含三个尺寸的缩略图URL |
| HasMore |
是否还有下一页,0表示无,1表示有 |
| Cursor |
当还有下一页时,为下一次查询的起点 |
| Privacy |
|
| Unlist |
|
| ServerAtime |
|
| Share |
|
| Empty |
|
| OperId |
|
获取文件信息
示例
请求参数
| 参数 |
说明 |
| Fsids |
需要查询的文件id(必填) |
响应参数
| 参数 |
说明 |
| Errmsg |
错误信息 |
| Errno |
错误码 |
| RequestId |
请求id |
| List |
文件信息集合 |
| Names |
共享目录相关信息 |
| List里的参数 |
说明 |
| Category |
文件类型,含义如下:1 视频, 2 音乐,3 图片,4 文档,5 应用,6 其他,7 种子 |
| Filename |
文件名称 |
| FsId |
文件的id |
| Isdir |
是否为目录 |
| Md5 |
文件的md5 |
| OperId |
|
| Path |
文件的路径 |
| RverCtime |
文件的服务器创建Unix时间戳,单位秒 |
| ServerMtime |
文件的服务器修改Unix时间戳,单位秒 |
| Size |
文件的大小 |
| Dlink |
文件下载地址 |
文件搜索
示例
请求参数
| 参数 |
说明 |
| Key |
搜索关键字(必填) |
| Dir |
搜索目录,默认根目录 |
| Page |
页数,从1开始,缺省则返回所有条目 |
| Num |
默认为500,不能修改 |
| Recursion |
是否递归搜索子目录 1:是,0:否(默认) |
| Web |
默认0,为1时返回缩略图信息 |
响应参数
| 参数 |
说明 |
| Errno |
错误码 |
| RequestId |
请求Id |
| Errmsg |
错误信息 |
| Contentlist |
|
| HasMore |
是否还有下一页,0表示无,1表示有 |
| List |
搜索到的内容 |
| List里面的参数 |
说明 |
| FsID |
文件Id |
| Path |
文件路径 |
| ServerFilename |
服务器文件名称 |
| Size |
文件大小 |
| ServerMtime |
服务器文件修改时间 |
| ServerCtime |
服务器文件创建时间 |
| LocalMtime |
本地文件修改时间 |
| LocalCtime |
本地文件修改时间 |
| Isdir |
是否是目录 |
| Category |
文件类型,含义如下:1 视频, 2 音乐,3 图片,4 文档,5 应用,6 其他,7 种子 |
| Share |
|
| OperID |
|
| ExtentTinyint1 |
|
| Md5 |
文件的md5 |
| Thumbs |
缩略图地址 |
| DeleteType |
|
| OwnerId |
|
| Wpfile |
|
文件上传
文件上传默认会递归上传当前文件夹下面的所有文件,可以同时指定多个文件或文件夹,远程路径必须使用绝对路径
示例
请求参数
| 参数 |
说明 |
| reqs |
上传文件需要传入的参数,切片(必填) |
| superfileStatuFunc |
上传切片的时候触发的回调 |
| Reqs里面的参数 |
说明 |
| SrcPath |
本地需要上传的文件/文件夹路径(必填) |
| BlockSize |
分片大小,当文件大于4MB时,文件需要分片上传,因此这里指定分片大小,普通4M,超级会员32M |
| RemotePath |
网盘的路径,根路径为/,应用的根路径为/apps/应用名(必填) |
| Rtype |
文件冲突时的策略 1 表示当path冲突时,进行重命名 2 表示当path冲突且block_list不同时,进行重命名 3 当云端存在同名文件时,对该文件进行覆盖 默认会对上传文件进行重复检验,如果重复则加上时间戳 |
| Aes |
是否进行aes加密文件后再进行上传 |
| Aes里面的参数 |
说明 |
| Ext |
生成的加密文件的后缀 |
| Key |
密钥,长度只能是16、24、32字节,用以选择AES-128、AES-192、AES-256。 |
| iv |
初始向量,固定为16字节的数组 |
| superfileStatuFunc的参数 |
说明 |
| SuperfileStatu |
切片文件状态信息,结构体 |
| Current |
SuperfileStatu的参数,正在上传的分片编号 |
| Err |
SuperfileStatu的参数,上传失败时的错误信息 |
| Slicing |
SuperfileStatu的参数,正在上传的分片信息,结构体 |
| Slicing的参数 |
说明 |
| Id |
切片的序号 |
| Name |
文件名称 |
| Path |
切片的本地路径 |
| Size |
切片的大小 |
| Md5 |
切片的md5值 |
返回参数
返回的为一个切片,下面为切片内元素的参数
| 参数 |
说明 |
| Errno |
错误码 |
| FsId |
文件在云端的唯一标识ID |
| Md5 |
文件的MD5,只有提交文件时才返回,提交目录时没有该值 |
| ServerFilename |
文件名 |
| Category |
分类类型, 1 视频 2 音频 3 图片 4 文档 5 应用 6 其他 7 种子 |
| Path |
上传后使用的文件绝对路径 |
| Size |
文件大小,单位B |
| Ctime |
文件创建时间 |
| Mtime |
文件修改时间 |
| Isdir |
是否目录,0 文件、1 目录 |
| Name |
|
| FromType |
|
下载文件
下载文件有三种方式:根据文件id,下载指定文件路径(不会下载子目录文件),递归下载指定文件路径
示例
根据文件Id下载文件
请求参数
| 参数 |
说明 |
| downloadDir |
指定存放下载文件的路径 |
| fsids |
需要下载的文件id |
| downloadStatuFunc |
下载时回调 |
| downloadStatuFunc的参数 |
说明 |
| Category |
文件类型,含义如下:1 视频, 2 音乐,3 图片,4 文档,5 应用,6 其他,7 种子 |
| Filename |
文件名称 |
| FsId |
文件的id |
| Isdir |
是否为目录 |
| Md5 |
文件的md5 |
| OperId |
|
| Path |
文件的路径 |
| RverCtime |
文件的服务器创建Unix时间戳,单位秒 |
| ServerMtime |
文件的服务器修改Unix时间戳,单位秒 |
| Size |
文件的大小 |
| Dlink |
文件下载地址 |
响应参数
根据路径下载文件
请求参数
| 参数 |
说明 |
| downloadDir |
指定存放下载文件的路径 |
| path |
需要下载的路径(网盘绝对路径) |
| downloadStatuFunc |
下载时回调 |
| downloadStatuFunc的参数 |
说明 |
| Category |
文件类型,含义如下:1 视频, 2 音乐,3 图片,4 文档,5 应用,6 其他,7 种子 |
| Filename |
文件名称 |
| FsId |
文件的id |
| Isdir |
是否为目录 |
| Md5 |
文件的md5 |
| OperId |
|
| Path |
文件的路径 |
| RverCtime |
文件的服务器创建Unix时间戳,单位秒 |
| ServerMtime |
文件的服务器修改Unix时间戳,单位秒 |
| Size |
文件的大小 |
| Dlink |
文件下载地址 |
响应参数
根据路径递归下载文件
请求参数
| 参数 |
说明 |
| downloadDir |
指定下载目录 |
| path |
需要下载的路径(网盘绝对路径) |
| downloadStatuFunc |
下载时回调 |
| downloadStatuFunc的参数 |
说明 |
| Category |
文件类型,含义如下:1 视频, 2 音乐,3 图片,4 文档,5 应用,6 其他,7 种子 |
| Filename |
文件名称 |
| FsId |
文件的id |
| Isdir |
是否为目录 |
| Md5 |
文件的md5 |
| OperId |
|
| Path |
文件的路径 |
| RverCtime |
文件的服务器创建Unix时间戳,单位秒 |
| ServerMtime |
文件的服务器修改Unix时间戳,单位秒 |
| Size |
文件的大小 |
| Dlink |
文件下载地址 |
响应参数
创建网盘文件夹
示例
请求参数
| 参数 |
说明 |
| dirname |
目录名称 |
| remotePath |
需要在哪个路径下创建 |
响应参数
| 参数 |
说明 |
| Errno |
错误码 |
| FsId |
文件在云端的唯一标识ID |
| Md5 |
文件的MD5,只有提交文件时才返回,提交目录时没有该值 |
| ServerFilename |
文件名 |
| Category |
分类类型, 1 视频 2 音频 3 图片 4 文档 5 应用 6 其他 7 种子 |
| Path |
上传后使用的文件绝对路径 |
| Size |
文件大小,单位B |
| Ctime |
文件创建时间 |
| Mtime |
文件修改时间 |
| Isdir |
是否目录,0 文件、1 目录 |
| Name |
|
| FromType |
|
删除文件/文件夹
示例
请求参数
| 参数 |
说明 |
| Async |
0 同步,1 自适应,2 异步 |
| Ondup |
遇到重复文件的处理策略, fail(默认,直接返回失败)、newcopy(重命名文件)、overwrite(覆盖)、skip(跳过) |
| Filelist |
需要操作的文件/文件夹集合 |
| Filelist里的参数 |
说明 |
| Path |
需要删除的文件/文件夹路径 |
响应参数
| 参数 |
说明 |
| Errno |
错误码 |
| RequestId |
请求id |
| Errmsg |
错误信息 |
| Taskid |
异步任务id |
| Info |
文件信息,结构体切片 |
| Errno |
Info里的参数,错误码 |
| Path |
已经处理的文件路径 |
重命名文件/文件夹
示例
请求参数
| 参数 |
说明 |
| Async |
0 同步,1 自适应,2 异步 |
| Ondup |
遇到重复文件的处理策略, fail(默认,直接返回失败)、newcopy(重命名文件)、overwrite(覆盖)、skip(跳过) |
| Filelist |
需要操作的文件/文件夹集合 |
| Filelist里的参数 |
说明 |
| Path |
需要重命名的文件/文件夹路径 |
| Newname |
新的名称 |
响应参数
| 参数 |
说明 |
| Errno |
错误码 |
| RequestId |
请求id |
| Errmsg |
错误信息 |
| Taskid |
异步任务id |
| Info |
文件信息,结构体切片 |
| Errno |
Info里的参数,错误码 |
| Path |
已经处理的文件路径 |
移动文件/文件夹
示例
请求参数
| 参数 |
说明 |
| Async |
0 同步,1 自适应,2 异步 |
| Ondup |
遇到重复文件的处理策略, fail(默认,直接返回失败)、newcopy(重命名文件)、overwrite(覆盖)、skip(跳过) |
| Filelist |
需要操作的文件/文件夹集合 |
| Filelist里的参数 |
说明 |
| Path |
需要移动的文件/文件夹路径 |
| Newname |
新的文件/文件夹名称 |
| Dest |
移动到此路径下 |
| Ondup |
遇到重复文件的处理策略, fail(默认,直接返回失败)、newcopy(重命名文件)、overwrite(覆盖)、skip(跳过) |
响应参数
| 参数 |
说明 |
| Errno |
错误码 |
| RequestId |
请求id |
| Errmsg |
错误信息 |
| Taskid |
异步任务id |
| Info |
文件信息,结构体切片 |
| Errno |
Info里的参数,错误码 |
| Path |
已经处理的文件路径 |
复制文件/文件夹
示例
请求参数
| 参数 |
说明 |
| Async |
0 同步,1 自适应,2 异步 |
| Ondup |
遇到重复文件的处理策略, fail(默认,直接返回失败)、newcopy(重命名文件)、overwrite(覆盖)、skip(跳过) |
| Filelist |
需要操作的文件/文件夹集合 |
| Filelist里的参数 |
说明 |
| Path |
需要复制的文件/文件夹路径 |
| Newname |
新的文件/文件夹名称 |
| Dest |
复制到此路径下 |
| Ondup |
遇到重复文件的处理策略, fail(默认,直接返回失败)、newcopy(重命名文件)、overwrite(覆盖)、skip(跳过) |
响应参数
| 参数 |
说明 |
| Errno |
错误码 |
| RequestId |
请求id |
| Errmsg |
错误信息 |
| Taskid |
异步任务id |
| Info |
文件信息,结构体切片 |
| Errno |
Info里的参数,错误码 |
| Path |
已经处理的文件路径 |
文件加密、解密
目前实现了Aes方式的加密,加密模式为OFB, 上传文件时, 传入Aes参数则默认启动加密(支持递归),下载默认不解密,需要您手动调用解密方法。
AES
示例
| 参数 |
说明 |
| Ext |
生成的加密文件的后缀 |
| Key |
密钥,长度只能是16、24、32字节,用以选择AES-128、AES-192、AES-256。 |
| iv |
初始向量,固定为16字节的数组 |