藍奏雲網盤API 2.0
基於Python3實現,最強的藍奏雲API~
藍奏雲注冊
更新說明
- 修復了登錄時
formhash
錯誤的問題 - 解決了多次上傳大文件被限制的問題 #3
- 細化 API 接口的功能,某些接口被取消、更名
- 操作網盤時會進行檢查,屏蔽藍奏雲不合理的設計
- 支持批量上傳/下載
- 上傳大文件不再直接將數據分段,改用 RAR 分卷壓縮 #2
- 取消使用
種子文件
下載大文件,自動識別分卷壓縮文件並解壓 - 上傳/下載時支持使用回調函數顯示進度 #1
- 不再向上拋異常,而是返回錯誤碼
簡介
-
本庫封裝了對藍奏雲的基本操作: 登錄、列出文件、下載文件、上傳文件、刪除文件(夾)、
清空回收站、恢復文件、創建文件夾、設置文件(夾)訪問密碼、直鏈解析 -
此外,通過偽裝后綴名,解決了藍奏雲的上傳格式限制。
通過分卷上傳,解決了單文件最大 100MB 的限制。同時增加了批量上傳/下載的功能 -
如果有任何問題或建議,歡迎提 issue。最后,求一個 star (≧∇≦)ノ
安裝依賴庫
pip install requests requests_toolbelt
Windows 平台可使用項目文件中的 rar.exe
作為解壓工具,Linux 平台需安裝 rar
sudo apt install rar
API 文檔
.login(username, passwd)
登錄藍奏雲
參數 | 類型 | 說明 | 必填 |
---|---|---|---|
username | str | 用戶名 | Y |
passwd | str | 登錄密碼 | Y |
示例 :
from api.lanzou import LanZouCloud
lzy = LanZouCloud()
code = lzy.login('username', 'passwd')
if code == LanZouCloud.SUCCESS:
print('登錄成功')
返回值 :
- 成功返回 :
LanZouCloud.SUCCESS
- 失敗返回 :
LanZouCloud.FAILED
.logout()
注銷當前賬號
示例 :
code = lzy.logout()
if code == LanZouCloud.SUCCESS:
print('注銷成功')
返回值 :
- 成功返回 :
LanZouCloud.SUCCESS
- 失敗返回 :
LanZouCloud.FAILED
.get_dir_list(folder_id)
獲取子文件夾name-id列表
參數 | 類型 | 說明 | 必填 | 備注 |
---|---|---|---|---|
folder_id | int | 文件夾id | N | 默認-1 (根目錄) |
示例 :
# 列出 id 為 1037070 的文件夾的子文件夾
sub_dirs = lzy.get_dir_list(1037070)
print(sub_dirs)
返回值:
{
"娛樂": 1037080,
"科幻": 1037083,
"紀錄片": 1037084,
"游戲改": 1037085
}
.get_file_list(folder_id)
獲取文件詳細信息列表
參數 | 類型 | 說明 | 必填 | 備注 |
---|---|---|---|---|
folder_id | int | 文件夾id | N | 默認-1 (根目錄) |
示例 :
file_list = lzy.get_file_list(1037070)
print(file_list)
注意 : 添加了偽裝后綴名的文件,偽裝后綴會被自動去除
返回值 :
{
"Valentin - A Little Story.mp3":{
"id": 12741016, # 文件 id
"name": "Valentin - A Little Story.mp3", # 文件名
"time": "昨天15:27", # 上傳時間
"size": "8.0 M", # 文件大小
"downs": 6, # 下載次數
"has_pwd": False, # 是否設置提取碼
"has_des": True # 是否設置描述
},
"小清水亜美 - 玻璃の空.mp3":{
"id": 12740874,
"name": "小清水亜美 - 玻璃の空.mp3",
"time": "昨天15:24",
"size": "10.7 M",
"downs": 0,
"has_pwd": False,
"has_des": False
}
}
.get_file_list2(folder_id)
獲取子文件名-id列表
參數 | 類型 | 說明 | 必填 | 備注 |
---|---|---|---|---|
folder_id | int | 文件夾id | N | 默認-1 (根目錄) |
示例 :
file_list = lzy.get_file_list2(1037070)
print(file_list)
返回值 :
{
"Valentin - A Little Story.mp3": 12741016,
"小清水亜美 - 玻璃の空.mp3": 12740874
}
.get_full_path(folder_id)
獲取文件夾的絕對路徑
參數 | 類型 | 說明 | 必填 | 備注 |
---|---|---|---|---|
folder_id | int | 文件夾id | N | 默認-1 (根目錄) |
示例 :
# 路徑: /視頻/電影/娛樂 "娛樂"文件夾 id 為 1037080
full_path = lzy.get_full_path(1037080)
print(full_path)
返回值 :
{
"LanZouCloud": -1,
"視頻": 1033205,
"電影": 1037070,
"娛樂": 1037080
}
.delete(fid)
把網盤的文件(夾)放到回收站
參數 | 類型 | 說明 | 必填 | 備注 |
---|---|---|---|---|
fid | int | 文件(夾)id | Y | - |
示例 :
code = lzy.delete(12741016)
if code == LanZouCloud.SUCCESS:
print('刪除成功')
返回值 :
- 成功返回 :
LanZouCloud.SUCCESS
- 失敗返回 :
LanZouCloud.FAILED
注 :
- 無法刪除含有子文件夾的文件夾,但含有文件的可以刪除。
- 重復刪除同一個 id 仍返回 :
LanZouCloud.SUCCESS
- 刪除不存在的 id 也返回 :
LanZouCloud.SUCCESS
- 這都是藍奏雲的鍋,與我無關 😦
.move_file(file_id, folder_id)
移動文件到指定文件夾
參數 | 類型 | 說明 | 必填 | 備注 |
---|---|---|---|---|
file_id | int | 文件id | Y | - |
folder_id | int | 文件夾id | N | 默認-1 (根目錄) |
示例 :
# 把 id=12741016 的文件移動到 id=1037083 的文件夾
code = lzy.move_file(12741016, 1037083)
if code == LanZouCloud.SUCCESS:
print('恢復成功')
返回值 :
- 成功返回 :
LanZouCloud.SUCCESS
- 失敗返回 :
LanZouCloud.FAILED
.upload_file(file_path, folder_id, call_back)
上傳文件到網盤的指定文件夾
參數 | 類型 | 說明 | 必填 | 備注 |
---|---|---|---|---|
file_path | str | 本地文件路徑 | Y | 使用絕對路徑 |
folder_id | int | 網盤文件夾id | N | 默認-1 (根目錄) |
call_back | func | 回調函數 | N | 默認None |
返回值 :
- 上傳成功返回 :
LanZouCloud.SUCCESS
- 上傳失敗返回 :
LanZouCloud.FAILED
- 壓縮過程異常返回 :
LanZouCloud.ZIP_ERROR
注意 :
- 上傳一個網盤中已經存在的文件,默認執行覆蓋操作
- 不支持的文件會自動添加偽裝后綴名,下載時自動去除
- 大文件使用 RAR 分卷壓縮,保留 5% 恢復記錄
- 上傳大文件會自動在網盤創建文件夾以保存分卷
回調函數 : 該函數用於跟蹤上傳進度
參數 | 類型 | 說明 |
---|---|---|
file_name | str | 上傳文件名 |
total_size | int | 文件總字節數 |
now_size | int | 已上傳字節數 |
示例:
# 顯示上傳進度條的回調函數
def show_progress(file_name, total_size, now_size):
"""顯示進度條的回調函數"""
percent = now_size / total_size
bar_len = 40 # 進度條長總度
bar_str = '>' * round(bar_len * percent) + '=' * round(bar_len * (1 - percent))
print('\r{:.2f}%\t[{}] {:.1f}/{:.1f}MB | {} '.format(
percent * 100, bar_str, now_size / 1048576, total_size / 1048576, file_name), end='')
if total_size == now_size:
print('') # 下載完成換行
code = lzy.upload_file(r"D:\test\DJ Okawari - Luv Letter.mp3", -1, show_progress)
if code != LanZouCloud.SUCCESS:
print('上傳失敗!')
結果 :
.upload_dir(dir_path, folder_id, call_back)
上傳一個文件夾
參數 | 類型 | 說明 | 必填 | 備注 |
---|---|---|---|---|
dir_path | str | 本地文件夾路徑 | Y | 使用絕對路徑 |
folder_id | int | 網盤文件夾id | N | 默認-1 (根目錄) |
call_back | func | 回調函數 | N | 默認None |
返回值 : 同 .upload_file()
注意 : 上傳的文件夾中,不能存在子文件夾
回調函數 : 同 .upload_file()
示例 :
code = lzy.upload_dir(r"D:\test\music", -1, show_progress)
if code != LanZouCloud.SUCCESS:
print('上傳失敗!')
結果 :
.is_file_url(share_url)
判斷分享鏈接是否為文件
參數 | 類型 | 說明 | 必填 |
---|---|---|---|
share_url | str | 分享鏈接 | Y |
返回值 : 是文件返回 True
,否則返回 False
.is_folder_url(share_url)
判斷分享鏈接是否為文件夾
參數 | 類型 | 說明 | 必填 |
---|---|---|---|
share_url | str | 分享鏈接 | Y |
返回值 : 是文件夾返回 True
,否則返回 False
.set_rar_tool(bin_path)
設置 RAR 壓縮工具二進制文件路徑
參數 | 類型 | 說明 | 必填 |
---|---|---|---|
bin_path | str | 壓縮工具路徑 | Y |
返回值 :
- 設置成功返回 :
LanZouCloud.SUCCESS
- 文件不存在返回 :
LanZouCloud.ZIP_ERROR
.download_file(share_url, pwd, save_path, call_back)
通過分享鏈接下載文件
參數 | 類型 | 說明 | 必填 | 備注 |
---|---|---|---|---|
share_url | str | 文件分享鏈接 | Y | - |
pwd | str | 提取碼 | N | 默認空 |
save_path | str | 文件保存路徑 | N | 默認當前路徑 |
call_back | func | 回調函數 | N | 默認None |
返回值 :
- 鏈接非法返回 :
LanZouCloud.URL_INVALID
- 文件已取消返回 :
LanZouCloud.FILE_CANCELLED
- 全部成功返回 :
LanZouCloud.SUCCESS
- 下載失敗返回 :
LanZouCloud.FAILED
- 缺少提取碼返回 :
LanZouCloud.LACK_PASSWORD
- 提取碼錯誤返回 :
LanZouCloud.PASSWORD_ERROR
示例 :
code = lzy.download_file('https://www.lanzous.com/i6qxywb', '6666', r'D:\test\download', show_progress)
if code == LanZouCloud.FAILED:
print('失敗!')
結果 :
.download_file2(fid, save_path, call_back)
登錄用戶通過id下載文件
參數 | 類型 | 說明 | 必填 | 備注 |
---|---|---|---|---|
fid | int | 文件id | Y | - |
save_path | str | 文件保存路徑 | N | 默認當前路徑 |
call_back | func | 回調函數 | N | 默認None |
返回值 :
- 成功返回 :
LanZouCloud.SUCCESS
- 失敗返回 :
LanZouCloud.FAILED
回調函數 : 同 .download_file()
.download_dir(share_url, dir_pwd, save_path, call_back)
通過分享鏈接下載文件夾
參數 | 類型 | 說明 | 必填 | 備注 |
---|---|---|---|---|
share_url | str | 文件夾分享鏈接 | Y | - |
dir_pwd | str | 提取碼 | N | 默認空 |
save_path | str | 文件保存路徑 | N | 默認./down |
call_back | func | 回調函數 | N | 默認None |
返回值 :
- 鏈接非法返回 :
LanZouCloud.URL_INVALID
- 文件已取消返回 :
LanZouCloud.FILE_CANCELLED
- 全部成功返回 :
LanZouCloud.SUCCESS
- 下載失敗返回 :
LanZouCloud.FAILED
- 缺少提取碼返回 :
LanZouCloud.LACK_PASSWORD
- 提取碼錯誤返回 :
LanZouCloud.PASSWORD_ERROR
- 解壓失敗返回 :
LanZouCloud.ZIP_ERROR
注意 :
- 不能下載多級文件夾,只會下載一個文件夾下的所有文件
- 分卷壓縮文件下載完成后自動解壓出原文件
- 解壓異常時不會自動刪除分卷文件,可嘗試使用解壓軟件手動修復
示例 :
code = lzy.download_dir('https://www.lanzous.com/b0f142z0d/', '6666', r'D:\test\download', show_progress)
if code == LanZouCloud.LACK_PASSWORD:
print('大人!您沒給我沒填提取碼啊!')
elif code == LanZouCloud.PASSWORD_ERROR:
print('我好難啊,提取碼不對!')
結果 :
.download_dir2(fid, save_path, call_back)
登錄后通過id下載文件夾
參數 | 類型 | 說明 | 必填 | 備注 |
---|---|---|---|---|
fid | int | 文件夾id | Y | - |
save_path | str | 文件保存路徑 | N | 默認./down |
call_back | func | 回調函數 | N | 默認None |
返回值 : 同 .download_dir()
示例 :
code = lzy.download_dir2(1056513, r'D:\test\download', show_progress)
if code != LanZouCloud.SUCCESS:
print('艾瑪,失敗了??不可能!!')
示例 :
code = lzy.mkdir(-1, 'my_music', '音樂分享')
if code == LanZouCloud.SUCCESS:
print('創建成功')
返回值 :
- 創建成功返回 :
LanZouCloud.SUCCESS
- 目標已存在返回 :
LanZouCloud.SUCCESS
- 創建失敗返回 :
LanZouCloud.FAILED
.mkdir(parent_id, folder_name, description)
創建文件夾並返回 id
參數 | 類型 | 說明 | 必填 | 備注 |
---|---|---|---|---|
parent_id | int | 父文件夾id | Y | -1 表根目錄 |
folder_name | str | 文件夾名 | Y | 自動刪除非法字符 |
description | str | 文件夾描述 | N | 默認無 |
示例 :
code = lzy.mkdir(-1, 'my_music', '音樂分享')
if code != LanZouCloud.MKDIR_ERROR:
print('文件夾id:' + str(code))
返回值 :
- 創建成功返回 :
文件夾ID
- 目標已存在返回 :
文件夾ID
- 創建失敗返回 :
LanZouCloud.MKDIR_ERROR
注意 : 藍奏雲支持創建 同名文件夾 ,但本方法會阻止這種操作,以防出現混淆
.rename_dir(folder_id, folder_name, description)
重命名文件夾(和描述)
參數 | 類型 | 說明 | 必填 | 備注 |
---|---|---|---|---|
folder_id | int | 文件夾id | N | 默認-1 (根目錄) |
folder_name | str | 文件夾名 | Y | 非法字符自動刪除 |
description | str | 文件夾描述 | N | 默認無 |
示例 :
code = lzy.rename_dir(1037070, 'soft-music', '輕音樂分享')
if code == LanZouCloud.SUCCESS:
print('修改成功')
返回值 :
- 成功返回 :
LanZouCloud.SUCCESS
- 失敗返回 :
LanZouCloud.FAILED
.list_recovery()
列出回收站文件(夾)
示例 :
deleted_files = lzy.list_recovery()
print(deleted_files)
返回值 :
{
"folder_list": {
"雜物": "1037324",
"相冊": "1037324"
},
"file_list": {
"java模擬器.zip": "1037324",
"Valentin - A Little Story.mp3": "12741016",
"小清水亜美 - 玻璃の空.mp3": "12740874"
}
}
.recovery(fid)
從回收站恢復文件(夾)
參數 | 類型 | 說明 | 必填 | 備注 |
---|---|---|---|---|
fid | int | 文件(夾)id | Y | - |
示例 :
code = lzy.recovery(12741016)
if code == LanZouCloud.SUCCESS:
print('恢復成功')
返回值 :
- 成功返回 :
LanZouCloud.SUCCESS
- 失敗返回 :
LanZouCloud.FAILED
.clean_recycle()
清空回收站
示例 :
code = lzy.clean_recycle()
if code == LanZouCloud.SUCCESS:
print('清空成功')
返回值 :
- 成功返回 :
LanZouCloud.SUCCESS
- 失敗返回 :
LanZouCloud.FAILED
.get_share_info(fid)
獲取文件(夾)分享信息
參數 | 類型 | 說明 | 必填 | 備注 |
---|---|---|---|---|
fid | int | 文件(夾)id | Y | - |
示例 :
info = lzy.get_share_info(1033203)
if info['code'] == LanZouCloud.SUCCESS:
print('分享鏈接:' + info['share_url'])
返回值 :
{
"code": 0, # 狀態碼
"share_url": "https://www.lanzous.com/i6q0fli", # 分享鏈接
"passwd": "6666" # 提取碼
}
狀態碼 code:
- 獲取成功 :
LanZouCloud.SUCCESS
- 獲取失敗 :
LanZouCloud.FAILED
- fid參數錯誤 :
LanZouCloud.ID_ERROR
.set_share_passwd(fid, passwd)
設置文件(夾)分享密碼
參數 | 類型 | 說明 | 必填 | 備注 |
---|---|---|---|---|
fid | int | 文件(夾)id | Y | - |
passwd | str | 分享密碼 | N | 2-6個字符,默認空(無密碼) |
示例 :
code = lzy.set_share_info(1033203, 'fuck')
if code == LanZouCloud.SUCCESS:
print('設置成功')
返回值 :
- 成功返回 :
LanZouCloud.SUCCESS
- 失敗返回 :
LanZouCloud.FAILED
.get_direct_url(share_url, pwd)
獲取文件下載直鏈
參數 | 類型 | 說明 | 必填 | 備注 |
---|---|---|---|---|
share_url | str | 文件分享鏈接 | Y | - |
pwd | str | 提取碼 | N | 默認空 |
示例 :
info = lzy.get_direct_url('https://www.lanzous.com/i6qxywb', '6666')
if info['code'] == LanZouCloud.SUCCESS:
print('直鏈地址:' + info['direct_url'])
elif info['code'] == LanZouCloud.LACK_PASSWD:
print('缺少提取碼')
返回值 :
{
"code": 0,
"name": "Git-2.23.0-64-bit.exe",
"direct_url": "https://development5.baidupan.com/100420bb/2019/10/03/41c4117570de8c0ce02d7e7ddc838135.mp3?st=o22S3uwv063cbklsDWh50w&e=1570193627&b=CAwBYFA8UzNXbAclADkAagN2WisNLAVCUSIBQFM9B3FTdQ5iUDVYfVVTVHYEOwF3VXkAcgFtA3VSMg_c_c&fi=12741016&up="
}
狀態碼 code :
- 獲取成功 :
LanZouCloud.SUCCESS
- 分享鏈接非法 :
LanZouCloud.URL_INVALID
- 缺少提取碼 :
LanZouCloud.LACK_PASSWORD
- 提取碼錯誤 :
LanZouCloud.PASSWORD_ERROR
- 文件已取消 :
LanZouCloud.FILE_CANCELLED
注意 :
- 本方法會檢查分享鏈接合法性
- 直鏈有效期約 30 分鍾
.get_direct_url2(fid)
登錄后通過id獲取文件下載直鏈
參數 | 類型 | 說明 | 必填 | 備注 |
---|---|---|---|---|
fid | int | 文件id | Y | - |
返回值 : 同 .get_direct_url()