阿里云盘命令行工具,用 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

参数说明:

  1. download: 是下载文件目录,还是遍历查看资源
  2. file_type: 文件还是目录,模式是下载文件,如果下载目录传递参数 -t=“folder”
  3. file_path: 阿里云盘上面的资源路径名称
  4. download_folder: 下载到本地的目录
  5. 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)