项目地址: https://github.com/foyoux/aligo

这个项目起源于我的一个简单需求, 我有25000个文件, 已经上传了9000个, 但是现在我把这些文件重新整理了, 最后我不知道哪些文件已经上传了, 哪些没有, 并且有些文件的文件名也已经改了, 能够唯一确定一个文件的就是文件名中含有的一串数字id. 而我不想重复或者重新上传这些文件. 于是我就抽筋地做了这个项目 aligo

基本功能

  • 扫码登录
  • refresh_token登录
  • 持久化登录
  • 获取用户信息
  • 获取云盘信息
  • 获取文件信息
  • 批量获取文件下载地址
  • 根据路径获取文件
  • 获取文件列表
  • 批量下载/上传文件(夹)
  • 秒传文件
  • 批量重命名/移动/复制文件(夹)
  • 批量收藏/取消收藏文件(夹)
  • 批量移动文件到回收站
  • 批量恢复回收站文件
  • 获取回收站文件列表
  • 搜索文件/标签
  • 创建官方分享,支持设置密码,有效期
  • 更新分享(官方)
  • 批量取消分享(官方)
  • 批量保存他人分享文件
  • 自定义分享,突破官方限制
  • 自定义分享保存
  • 支持自定义功能

快速入门

环境要求

为了完善代码提示, 方便大家代码书写, 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/nDtTamX9vTP, 此分享密码 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交流反馈群

使用Python玩转阿里云盘的更多相关文章

  1. DAX/PowerBI系列 - 玩转阿里云 Alicloud Pricing

    DAX/PowerBI系列 - 玩转 阿里云主机 Ali Cloud ECS 难度: ★★☆☆☆(1星) 适用范围: ★★★☆☆(3星) 欢迎交流与骚扰 这是啥: 双十一就到了,码农门,程序猿们有没有 ...

  2. 使用sshtunnel实现python公网连接阿里云mongo服务器

    背景: 公司使用阿里云的云数据库MongoDB.基于安全原因考虑,阿里云MongoDB云数据库目前只支持从阿里云ECS上访问,无法通过公网直接访问,不方便用户在本地开发环境里直接进行测试. 阿里云官方 ...

  3. 玩转阿里云server——安装WebserverTomcat7

    1. 以root用户身份登录阿里云server 2. 使用apt-get install安装Tomcat7 sudo apt-get install tomcat7 3.安装后.Tomcat在启动时报 ...

  4. 用Python玩转词云

    第一步:引入相关的库包: #coding:utf-8 __author__ = 'Administrator' import jieba #分词包 import numpy #numpy计算包 imp ...

  5. python自动备份阿里云数据库binlog

    #coding:utf8from aliyunsdkcore import clientfrom aliyunsdkrds.request.v20140815 import DescribeBacku ...

  6. python pip 切换阿里云镜像

    示例: pip install xxx -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

  7. 阿里云 django的一次web维护记录

    首先, 丢给我一个阿里云的server的账号/password,之前没有玩过阿里云,想想应该也是ssh服务来远程登陆. 环境: centos+nginx+uwsgi+python2.7+django. ...

  8. sysbench测试阿里云ECS云磁盘的IOPS,吞吐量

    测试阿里云ECS 对象:在aliyun上买了一个ECS附加的云盘,使用sysbench测试云盘的IOPS和吞吐量 sysbench prepare 准备文件,10个文件,1个1G [root@iZwz ...

  9. 利用Python+阿里云实现DDNS(动态域名解析)

    引子我想大家应该都很熟悉DNS了,这回在DNS前面加了一个D又变成了什么呢?这个D就是Dynamic(动态),也就是说,按照传统,一个域名所对应的IP地址应该是定死的,而使用了DDNS后,域名所对应的 ...

随机推荐

  1. Error in invoking target 'mkldflags ntcontab.o nnfgt.o' of mkdefile '/u01/app/oracle/product/11.2.0

    rpm -ivh cpp-4.4.7-3.el6.x86 64.rpm  --nodeps  --force  (强制安装rpm包)

  2. Spring学习日记01_IOC_xml的三种注入方式

    什么是IOC 控制反转,把对象创建和对象之间的调用过程,交给Spring进行管理 使用IOC目的:为了耦合度降低 做入门案例就是IOC实现 IOC底层原理 xml解析 工厂模式 反射 原始方式 cla ...

  3. 用VSCode终端实现重定向比较程序输出和正确输出

    在刷 OJ 题目或者进行编程考试或比赛时,经常需要对编写好的程序进行测试,即运行编写好的程序,输入样例输入或者自己编写的输入数据,查看程序输出结果和样例输出或者正确输出是否一致.这种方法有很多弊端,当 ...

  4. Redisson 分布式锁实现之源码篇 → 为什么推荐用 Redisson 客户端

    开心一刻 一男人站在楼顶准备跳楼,楼下有个劝解员拿个喇叭准备劝解 劝解员:兄弟,别跳 跳楼人:我不想活了 劝解员:你想想你媳妇 跳楼人:媳妇跟人跑了 劝解员:你还有兄弟 跳楼人:就是跟我兄弟跑的 劝解 ...

  5. gitla 报错 The project you were looking for could not be found or you don't have permission to view it.

    gitlab项目组下创建项目 $ git push -u git@192.168.101.129:/DrvOps/Dev_Test : 报错信息如下: remote: ================ ...

  6. 二叉搜索树(Binary Search Tree)(Java实现)

    @ 目录 1.二叉搜索树 1.1. 基本概念 1.2.树的节点(BinaryNode) 1.3.构造器和成员变量 1.3.公共方法(public method) 1.4.比较函数 1.5.contai ...

  7. Spring官方发布新成员:Spring GraphQL

    近日,在GraphQL Java诞生6周年的时候,Spring社区通过博客宣布正式创建全新项目:Spring GraphQL,同时还发布了这个新项目的里程碑1.0版本. 博客原文:https://sp ...

  8. UI自动化学习笔记- Selenium元素等待(强制等待、显示等待、隐式等待)

    一.元素等待 1. 元素等待 1.1 什么是元素等待 概念:在定位页面元素时如果未找到,会在指定时间内一直等待的过程 意思就是:等待指定元素已被加载出来之后,我们才去定位该元素,就不会出现定位失败的现 ...

  9. 整理!企业选择好用的CRM系统的要点(上)

    随着市场经济的发展,对任何行业的企业来说,客户都是非常重要的一个部分.CRM系统帮助企业做到以客户为中心,它可以根据客户的具体要求进行跟进和反馈,在很大程度上提高公司的客户服务水平和客户满意度,进而提 ...

  10. Hadoop:什么是Hadoop??

    官方讲解: Apache Hadoop 为可靠的,可扩展的分布式计算开发开源软件.Apache Hadoop软件库是一个框架,它允许使用简单的编程模型跨计算机群集分布式处理大型数据集(海量的数据). ...