使用Python玩轉阿里雲盤


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

這個項目起源於我的一個簡單需求, 我有25000個文件, 已經上傳了9000個, 但是現在我把這些文件重新整理了, 最后我不知道哪些文件已經上傳了, 哪些沒有, 並且有些文件的文件名也已經改了, 能夠唯一確定一個文件的就是文件名中含有的一串數字id. 而我不想重復或者重新上傳這些文件. 於是我就抽筋地😅做了這個項目 aligo 👍🔥🚀

基本功能

  • 掃碼登錄
  • refresh_token登錄
  • 持久化登錄
  • 獲取用戶信息
  • 獲取雲盤信息
  • 獲取文件信息
  • 批量獲取文件下載地址
  • 根據路徑獲取文件
  • 獲取文件列表
  • 批量下載/上傳文件(夾)
  • 秒傳文件
  • 批量重命名/移動/復制文件(夾)
  • 批量收藏/取消收藏文件(夾)
  • 批量移動文件到回收站
  • 批量恢復回收站文件
  • 獲取回收站文件列表
  • 搜索文件/標簽
  • 創建官方分享,支持設置密碼,有效期
  • 更新分享(官方)
  • 批量取消分享(官方)
  • 批量保存他人分享文件
  • 自定義分享,突破官方限制
  • 自定義分享保存
  • 支持自定義功能

快速入門

環境要求

python version

為了完善代碼提示, 方便大家代碼書寫, 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 中尋找

image.png

使用 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交流反饋群


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM