commit 900c1efa53b24887d33bf6e257e1f3d44fa20986 Author: ivamp Date: Thu Feb 8 02:22:06 2024 +0800 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..830ec7c --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +__pycache__ +downloads +config.py \ No newline at end of file diff --git a/animes.py b/animes.py new file mode 100644 index 0000000..ed2dbf7 --- /dev/null +++ b/animes.py @@ -0,0 +1,3 @@ +anime_ids = [ + 810 +] \ No newline at end of file diff --git a/config.py.example b/config.py.example new file mode 100644 index 0000000..ca2f49d --- /dev/null +++ b/config.py.example @@ -0,0 +1,14 @@ +import os + +baseurl = "https://anime-api.5t5.top/v2" +token = "lDr7fxW8tDFoY2CdySoaEs1gCaiA3dUP1GwIe6Khg" +node = "2AG_CF" +save_path="./downloads" + +# 处理 save_path(自动获取绝对路径) +save_path = os.path.abspath(save_path) + +print("save_path: ", save_path) + +def joinpath(dir): + return os.path.join(save_path, dir) \ No newline at end of file diff --git a/get.py b/get.py new file mode 100644 index 0000000..536ac8f --- /dev/null +++ b/get.py @@ -0,0 +1,44 @@ +import config +import animes +import req +import os + +def downloadAnime(id, filepath): + print("正在下载到: " + filepath) + episodes = req.get("anime/file", { + "id": id, + "drive": config.node, + }) + + for episode in episodes: + ext = episode["parseResult"]["extensionName"]["raw"] + filename = os.path.join(filepath, episode["name"] + '.' + ext) + print("正在下载: " + episode["name"]) + + req.download(episode["url"], filename) + +for anime in animes.anime_ids: + print("正在查询: " + str(anime)) + a = req.get("anime/get", { + "id": "810", + "full": "true" + }) + + name = a["name"] + name_cn = a["name_cn"] + + fullname = name_cn + " - " + name + # create dir + dir_path = config.joinpath(fullname) + + print(dir_path) + + # 检测文件夹是否存在 + if not os.path.exists(dir_path): + # mkdir + os.mkdir(dir_path) + + # 开始下载 + downloadAnime(anime, dir_path) + + diff --git a/req.py b/req.py new file mode 100644 index 0000000..3836e6a --- /dev/null +++ b/req.py @@ -0,0 +1,61 @@ +import requests +import config +from urllib import parse +import sys +import os + + +# 屏蔽warning信息 +requests.packages.urllib3.disable_warnings() + +hello=parse.quote("想保存番剧但是怕你觉得麻烦就没找你要 WebDav 了 qxq") + +headers={ + "Authorization": config.token, + "Referer": "https://lavani.me/", + "iVampireSPcom": hello +} + +def get(url, params): + resp = requests.get( + config.baseurl + "/" + url, + headers=headers, + params=params + ) + + # json + return resp.json()["data"] + + +def download(url, file_path): + # 第一次请求是为了得到文件总大小 + r1 = requests.get(url, stream=True, verify=False) + total_size = int(r1.headers['Content-Length']) + + # 这重要了,先看看本地文件下载了多少 + if os.path.exists(file_path): + temp_size = os.path.getsize(file_path) # 本地已经下载的文件大小 + else: + temp_size = 0 + # 显示一下下载了多少 + print(temp_size) + print(total_size) + # 核心部分,这个是请求下载时,从本地文件已经下载过的后面下载 + headers = {'Range': 'bytes=%d-' % temp_size} + # 重新请求网址,加入新的请求头的 + r = requests.get(url, stream=True, verify=False, headers=headers) + + # 下面写入文件也要注意,看到"ab"了吗? + # "ab"表示追加形式写入文件 + with open(file_path, "ab") as f: + for chunk in r.iter_content(chunk_size=1024): + if chunk: + temp_size += len(chunk) + f.write(chunk) + f.flush() + + ###这是下载实现进度显示#### + done = int(50 * temp_size / total_size) + sys.stdout.write("\r[%s%s] %d%%" % ('█' * done, ' ' * (50 - done), 100 * temp_size / total_size)) + sys.stdout.flush() + print() # 避免上面\r 回车符