import requests
from urllib import parse
import json
from Aria2_RPC import Aria2Download
import time
class AlistDownload:
def __init__(self, url):
self.headers = {
"Accept": "application/json, text/plain, */*",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36",
"Content-Type": "application/json;charset=UTF-8",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9"
}
parseresult = parse.urlparse(url)
scheme = parseresult.scheme
netloc = parseresult.netloc
path = parse.unquote(parseresult.path)
self.host = f"{scheme}://{netloc}"
self.aria2 = Aria2Download()
self.get_list(path)
print("遍历完成")
def post(self, url, data) -> (bool, dict):
req_json = {}
error_number = 0
while True:
status_code = 0
try:
req = requests.post(url=url, data=json.dumps(data), headers=self.headers, timeout=15)
status_code = req.status_code
req_json = req.json()
req.close()
except:
pass
if status_code == 200:
break
elif error_number > 2:
break
else:
error_number += 1
time.sleep(1)
if status_code == 200:
return True, req_json
else:
return False, req_json
def get_list(self, path):
url = self.host + "/api/fs/list"
data = {"path": path, "password": "", "page": 1, "per_page": 0, "refresh": False}
file_list = []
error_number = 0
while True:
req_type, req_json = self.post(url=url, data=data)
if req_type is False:
return
elif req_json.get("code") == 200:
break
elif error_number > 2:
break
else:
print(req_json)
error_number += 1
time.sleep(2)
if req_json.get("data") is None:
return
content = req_json.get("data")["content"]
if content is None:
return
for file_info in content:
if file_info["is_dir"] is True:
file_download_url = path + "/" + file_info["name"]
print("dir", file_download_url)
file_list.append({"is_dir": True, "path": file_download_url})
else:
file_download_url = self.host + "/d" + path + "/" + file_info["name"]
print("file", file_download_url)
sign = file_info.get("sign")
if sign is not None:
file_download_url = file_download_url + "?sign=" + sign
file_list.append(
{"is_dir": False, "url": file_download_url, "path": path, "file": file_info["name"]})
for file in file_list:
if file["is_dir"] is True:
self.get_list(file["path"])
else:
# D:\download 文件下载的存储地址
self.aria2.addUri(file["url"], r"D:\download" + file["path"], file["file"])
pass
if __name__ == '__main__':
AlistDownload(
"http://此处填入Alist网盘的地址")python教程
Alist网盘遍历文件并调用Aria2的API进行批量下载
python教程
我的站长站
2023-09-05
共144人阅读
相关推荐
- Alist
-
Alist网盘挂载管理工具桌面版v1.0
软件介绍Alist是一款可以支持多种网盘存储的文件列表程序,可以轻松的将各种网盘全部挂载到网页端上,以文件列表的形式呈现,而且可以自动解析网盘下载链接,无需分享网盘链接或登录就可以实现直接下载...
-
alist+RaiDrive本地硬盘挂载教程
alist+RaiDrive优势为什么我的站长站要用alist+RaiDrive的组合了?大部分网友都用的CloudDrive,网上一搜本地硬盘挂载基本也都是CloudDrive的教程,但是CloudDrive也有不少问题。1、不开源,所有用户数据全部上传到作者的云上,介意个人隐私泄漏的我就有些不...
-
Alist网盘遍历文件并调用Aria2的API进行批量下载
import requestsfrom urllib import parseimport jsonfrom Aria2_RPC import Aria2Downloadimport time class AlistDownload: def __init__(self, url): self.headers = { "Accept": "application/json, text/plain, */*",...
-
Alist本地共享系统批处理脚本
脚本介绍Alist本地共享系统批处理脚本,本脚本是方便Alist搭建网盘,可以配置阿里云,123PAN,百度云等网盘挂载为本地,以WEBDAV的形式挂载。比网上的教程要方便好用。本脚本的特色自动下载最新的Alist,并...
-
Alist快速添加云盘分享存储油猴脚本
alist添加存储的时候,每次都要来回切换复制粘贴id,挺费劲的,写了个简易的脚本方便操作,分享一下完整的脚本。添加脚本的时候,复制下面的代码,把前面四个变量替换成自己的就可以了。(手机上Via浏览器用起...
最新更新
-
01Playwright闲鱼智能监控机器人项目 4个月前
-
02Python汉字笔顺图及书写gif动画生成代码 6个月前
-
03Python获取彩云天气实时天气API源码 1年前
-
04基于Django的RustDesk Api&Web Server源码分享 1年前
-
05批量修改照片文件大小Python脚本 1年前
热门推荐
-
01123网盘解析下载python脚本 724热度
-
02Python自动下载歌曲宝音乐和歌词脚本 472热度
-
03Python和彩云自动签到云函数脚本分享 425热度
-
04Python无需认证QQ扫码登录脚本 424热度
-
05python爬虫下载抖音用户所有短视频+无水印方法 353热度

