阿里云盘命令行工具,用 Python开发下载资源的脚本
2022-08-02
命令行下载阿里云盘资源的 Python 脚本程序
当有大量的文件需要从阿里云盘下载到Linux服务器上面的时候,用客户端不是很方便,可以使用脚本来放在服务器上面下载资源
运行环境
- python3.9
- Macos/linux/windows
安装依赖的库
[user@serv]$ python3.9 -m pip install aligo
查看命令使用帮助
[user@serv]$ ./aliyun.py -h
usage: aliyun.py [-h] [--download] [--file_type FILE_TYPE] [--file_path FILE_PATH] [--download_folder DOWNLOAD_FOLDER]
[--depth DEPTH]
optional arguments:
-h, --help show this help message and exit
--download, -d
--file_type FILE_TYPE, -t FILE_TYPE
--file_path FILE_PATH, -f FILE_PATH
--download_folder DOWNLOAD_FOLDER, -p DOWNLOAD_FOLDER
--depth DEPTH
参数说明:
- download: 是下载文件目录,还是遍历查看资源
- file_type: 文件还是目录,模式是下载文件,如果下载目录传递参数 -t=“folder”
- file_path: 阿里云盘上面的资源路径名称
- download_folder: 下载到本地的目录
- depth: 进行目录递归遍历的深度
下载文件
[user@serv]$ python3.9 aliyun.py -d -f "教学视频/xxx.mkv" -p 电影/xx系列/
下载目录
[user@serv]$ python3.9 aliyun.py -f="教学视频/xxxxx" -p=./ -d -t="folder"
递归列出全部目录文件
[user@serv]$ python3.9 aliyun.py --depth=100
Python 脚本文件源代码
#!/usr/bin/env python3.9
# coding: utf-8
"""快速入门"""
import argparse
import os
from aligo import Aligo
def download(file_type, file_path, download_folder):
# set command argument
ali = Aligo() # 第一次使用,会弹出二维码,供扫描登录
# user = ali.get_user() # 获取用户信息
# print(user.user_name, user.nick_name, user.phone) # 打印用户信息
if file_type == "file":
dst_file = ali.get_file_by_path(file_path) # 获取网文件
else:
dst_file = ali.get_folder_by_path(file_path) # 获取网盘目录
print(dst_file)
if not dst_file:
print(f"下载文件错误: {file_path}")
return
if not os.path.isdir(download_folder):
print(f"本地目录不存在: {download_folder}")
return
if dst_file.type == "file":
ali.download_file(file=dst_file, local_folder=download_folder)
elif dst_file.type == "folder":
ali.download_folder(dst_file.file_id, local_folder=download_folder)
else:
print(f"下载文件错误{file_path}")
def show_all_file(depth):
ali = Aligo() # 第一次使用,会弹出二维码,供扫描登录
dst_file = ali.get_file_list() # 获取网盘根目录文件列表
for file in dst_file: # 遍历文件列表
show_file(file, depth)
def show_file(file, depth):
depth -= 1
if depth == 0:
return
ali = Aligo() # 第一次使用,会弹出二维码,供扫描登录
print(file.file_id, file.name, file.type) # 打印文件信息
if file.type == "file":
print('file ---')
elif file.type == "folder":
print('folder ---')
sub_files = ali.get_file_list(file.file_id)
for sub_file in sub_files:
show_file(sub_file, depth)
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument("--download", "-d", action="store_true", default=False)
parser.add_argument("--file_type", "-t", type=str, default="file")
parser.add_argument("--file_path", "-f", type=str, default=None)
parser.add_argument("--download_folder", "-p", type=str, default=None)
parser.add_argument("--depth", type=int, default=2)
args = parser.parse_args()
print(args)
if args.download:
if (args.file_path == None
or args.download_folder == None):
print(args)
print('必须传递路径参数')
exit(-1)
download(args.file_type,
args.file_path,
args.download_folder)
else:
show_all_file(args.depth)