共计 4316 个字符,预计需要花费 11 分钟才能阅读完成。
我的项目地址: https://github.com/foyoux/aligo
这个我的项目起源于我的一个简略需要, 我有 25000 个文件, 曾经上传了 9000 个, 然而当初我把这些文件重新整理了, 最初我不晓得哪些文件曾经上传了, 哪些没有, 并且有些文件的文件名也曾经改了, 可能惟一确定一个文件的就是文件名中含有的一串数字 id. 而我不想反复或者从新上传这些文件. 于是我就抽筋地😅做了这个我的项目 aligo 👍🔥🚀
基本功能
- [x] 扫码登录
- [x] refresh_token 登录
- [x] 长久化登录
- [x] 获取用户信息
- [x] 获取云盘信息
- [x] 获取文件信息
- [x] 批量获取文件下载地址
- [x] 依据门路获取文件
- [x] 获取文件列表
- [x] 批量下载 / 上传文件 (夹)
- [x] 秒传文件
- [x] 批量重命名 / 挪动 / 复制文件 (夹)
- [x] 批量珍藏 / 勾销珍藏文件 (夹)
- [x] 批量挪动文件到回收站
- [x] 批量复原回收站文件
- [x] 获取回收站文件列表
- [x] 搜寻文件 / 标签
- [x] 创立官网分享,反对设置明码,有效期
- [x] 更新分享 (官网)
- [x] 批量勾销分享 (官网)
- [x] 批量保留别人分享文件
- [x] 自定义分享,冲破官网限度
- [x] 自定义分享保留
- [x] 反对自定义性能
疾速入门
环境要求
为了欠缺代码提醒, 不便大家代码书写, aligo 引入了一些 python 3.8 的新个性, 所以要求 python >= 3.8. *
装置
pip install aligo
或
pip install aligo -i https://pypi.org/simple
必要时能够加个 --upgrade
参数
举个栗子
from aligo import Aligo | |
ali = Aligo() | |
# 获取用户信息 | |
user = ali.get_user() | |
# 获取网盘根目录文件列表 | |
root_file_list = ali.get_file_list() |
扫码登录
from aligo import Auth, Aligo | |
auth = Auth() |
第一次应用 aligo 时, 执行上述代码
- 如果是 Windows 零碎, 则调用默认看图工具显示二维码
- 如果是非 Windows 零碎 (Linux), 则间接将二维码打印在终端中
之后你应用挪动端阿里云盘扫描受权即可实现登录, aligo 会主动将身份验证信息保留到用户目录下的 .aligo 目录下, 默认文件名是 aligo, 你能够应用 name
参数进行指定.
auth = Auth('小号')
或 auth = Auth(name='小号')
也能够应用 show
参数指定显示二维码的形式, 详情请返回 aligo 我的项目地址
refresh_token 登录
auth = Auth(name='refresh_token', refresh_token='<refresh_token>')
refresh_token 参数可在 Chrome -> F12 -> Application -> Local Storage -> token 中寻找
应用 Auth 对象创立 Aligo 对象
咱们所有的操作都是基于 Aligo
对象的, 它有一个可选的结构参数 auth
, 默认为 Auth()
所有 Aligo()
, Aligo(Auth())
是没有区别的
ali = Aligo()
获取网盘信息
info = ali.get_personal_info() | |
# 总容量 | |
total_size = info.personal_space_info.total_size | |
# 已用容量 | |
used_size = info.personal_space_info.used_size |
依据门路获取文件
# 此办法默认以根目录 root 为根底, 也能够应用 parent_file_id 指定 | |
# 即默认 parent_file_id = 'root' | |
# 必须以 斜杠 / 为门路分隔符 | |
# 会疏忽头尾 斜杠 /, 所有 'aligo/tests', '/aligo/tests', '/aligo/tests/' 是没有区别的. | |
# 如果找到, 只返回一个 BaseFile 对象, 它能够代表 file, 也能够代表 folder | |
# 如果没有找到, 只返回 None | |
file = ali.get_file_by_path('/aligo/tests') | |
# 咱们能够查看 file 的一些属性 | |
file_type = file.type | |
name = file.name | |
download_url = file.download_url | |
... |
获取文件列表
- 阿里云盘和百度不同, 百度网盘应用的是 门路 形式定位文件, 而阿里云盘应用的是 drive_id / share_id + file_id 定位文件
- 在 aligo 中, 所有默认 drive_id 都可省略, 所以个别只需提供 file_id 参数即可
- 以前阿里云盘时容许同名文件的, 但当初已更改了此策略, 文件名辨别大小写
file_list = ali.get_file_list('<file_id>') | |
assert isinstance(file_list, list) |
重命名文件
new_file = ali.rename_file('新名字.jpg', '<file_id>', check_name_mode='refuse', drive_id=ali.default_drive_id) | |
# 批量重命名 | |
# batch_rename_files |
挪动文件
# 挪动默认 drive_id 下的 file_id 文件到 默认 drive_id 的 'root' 下 | |
move_file = ali.move_file('<file_id>', 'root') | |
# 批量可应用 batch_move_files 办法 | |
# 复制文件 | |
# ali.copy_file() | |
# ali.batch_copy_files() |
挪动文件到回收站
trash_file = ali.move_file_to_trash('<file_id>') | |
# 批量 batch_move_to_trash |
获取回收站文件列表
recyclebin_list = ali.get_recyclebin_list()
从回收站复原文件
restore_file = ali.restore_file('<file_id>') | |
# 批量 batch_restore_files |
珍藏 / 勾销珍藏
ali.starred_file('<file_id>', starred=True) | |
# starred=True 示意珍藏 | |
# starred=False 示意勾销珍藏 | |
# 获取珍藏列表, 具体参数用法, 请查看 代码提醒 或 源码 | |
starred_list = ali.ali.get_starred_list() |
秒传文件
# 具体参数看源码 | |
# 必须参数, 取个 name, 随便 | |
# content_hash, size 这两个就是惟一确定一个文件的参数, 即秒传所需参数 | |
ali.create_by_hash(...) |
下载文件 (夹)
# ali.download_file() | |
# ali.download_files() | |
# ali.download_folder() |
上传文件 (夹)
# ali.upload_file() | |
# ali.upload_files() | |
# ali.upload_folder() |
分享文件, 可设置明码, 有效期
# 官网分享办法 | |
# ali.share_file() |
保留别人分享文件
在阿里云盘分享中, 链接开端那一段, 代表 share_id, 即代表一个分享的惟一识别码, 例如: https://www.aliyundrive.com/s…, 此分享明码 share_pwd=’w652′
其中 nDtTamX9vTP 即为 share_id
share_id = 'nDtTamX9vTP' | |
# 如果一个分享是公开分享, 那么 share_pwd = '', 默认就是此值, 所以没有明码时, 间接疏忽此参数即可. | |
# 具体情况你能够在开发工具中查看源码 | |
share_pwd = 'w652' | |
# 1. 如果想获取 此 share_id 对应分享信息, 能够这样做 | |
info = ali.get_share_info(share_id) | |
# 2. 当初你想拜访 此分享, 首先你须要获取 share_token | |
share_token = ali.get_share_token(share_id, share_pwd) | |
# 3. 当初你能够获取分享文件列表了 | |
share_file_list = ali.get_share_file_list(share_id, share_token.share_token) | |
# 4. 这里还有一个 get_share_file 办法 | |
file = ali.get_share_file(share_id, file_id=share_file_list[0].file_id, share_token=share_token.share_token) | |
# 5. 当初咱们能够进行保留了, 比方咱们保留到网盘根目录, 此时 to_parent_file_id 能够省略 | |
save_file = ali.share_file_saveto_drive(share_id, file_id=share_file_list[0].file_id, share_token=share_token.share_token, to_parent_file_id='root') | |
# 6. 批量保留 | |
batch_save_file = ali.batch_share_file_saveto_drive(share_id, [i.file_id for i in share_file_list], share_token.share_token, 'root') |
自定义分享, 冲破官网限度
# ali.share_files_by_aligo() | |
# ali.share_folder_by_aligo() |
保留自定义分享
# ali.save_files_by_aligo()
搜寻文件 / 标签
# ali.search_file() | |
# ali.searech_aims() |
自定义性能
这里以删除文件为例, 自定义性能
其余例子我想不进去了, 因为基本上都实现了
"""...""" | |
from aligo import Aligo | |
class CustomAligo(Aligo): | |
"""自定义 aligo""" | |
V2_FILE_DELETE = '/v2/file/delete' | |
def delete_file(self, file_id: str): | |
"""删除文件""" | |
response = self._post(self.V2_FILE_DELETE, body={'file_id': file_id}) | |
return response.json() | |
cali = CustomAligo() | |
cali.delete_file('<file_id>') |
欢送大家反馈
文档写的不好, 欢送大家补充.
返回 我的项目地址
有问题? 反馈
有倡议? 探讨
也欢送大家 奉献代码
aligo 交换反馈群