背景
阿里云盘分享一次保存大量文件是需要会员的,咱没有,又想节省8块钱成本,只好自己动手了,逻辑比较简单,代码如下
代码
# -*- coding: utf-8 -*-
#阿里云批量保存程序
import requests
import json
import time
authorization = ""
share_token = ''
device_id = ''
def get_file_list(share_id, parent_file_id, marker=None):
url = "https://api.aliyundrive.com/adrive/v2/file/list_by_share"
payload = {
"share_id": share_id,
"parent_file_id": parent_file_id,
"limit": 40,
"image_thumbnail_process": "image/resize,w_256/format,jpeg",
"image_url_process": "image/resize,w_1920/format,jpeg/interlace,1",
"video_thumbnail_process": "video/snapshot,t_1000,f_jpg,ar_auto,w_256",
"order_by": "name",
"order_direction": "DESC"
}
if marker:
payload["marker"] = marker
headers = {
'accept': 'application/json, text/plain, */*',
'content-type': 'application/json',
'origin': 'https://www.aliyundrive.com',
'referer': 'https://www.aliyundrive.com/',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36',
'x-canary': 'client=web,app=share,version=v2.3.1',
'x-device-id': device_id,
'x-share-token': share_token
}
response = requests.post(url, headers=headers, json=payload)
return json.loads(response.text)
def copy_file(file_id, share_id, to_parent_file_id, to_drive_id):
url = "https://api.aliyundrive.com/adrive/v4/batch"
payload = {
"requests": [
{
"body": {
"file_id": file_id,
"share_id": share_id,
"auto_rename": True,
"to_parent_file_id": to_parent_file_id,
"to_drive_id": to_drive_id
},
"headers": {
"Content-Type": "application/json"
},
"id": "0",
"method": "POST",
"url": "/file/copy"
}
],
"resource": "file"
}
headers = {
'accept': 'application/json, text/plain, */*',
'authorization': authorization,
'content-type': 'application/json',
'origin': 'https://www.aliyundrive.com',
'referer': 'https://www.aliyundrive.com/',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36',
'x-canary': 'client=web,app=share,version=v2.3.1',
'x-device-id': device_id,
'x-share-token': share_token
}
response = requests.post(url, headers=headers, json=payload)
return json.loads(response.text)
def main(share_id, parent_file_id, to_parent_file_id, to_drive_id):
response_data = get_file_list(share_id, parent_file_id)
if 'items' in response_data:
for item in response_data['items']:
file_id = item['file_id']
print(f"处理文件: {file_id}")
sub_files = get_file_list(share_id, file_id)
for sub_item in sub_files.get('items', []):
sub_file_id = sub_item['file_id']
copy_result = copy_file(sub_file_id, share_id, to_parent_file_id, to_drive_id, authorization)
print(f"复制文件结果: {copy_result}")
time.sleep(2)
time.sleep(5)
else:
print("未找到文件列表")
if __name__ == "__main__":
#分享id
share_id = ""
#分享文件id
parent_file_id = ""
#保存路径
to_parent_file_id = ""
#自己账号的device_id
to_drive_id = ""
main(share_id, parent_file_id, to_parent_file_id, to_drive_id)