添加断点续传逻辑,从最后一次上传失败的位置继续上传

This commit is contained in:
holwell 2025-02-14 16:38:21 +08:00
parent 43cfe4e85b
commit f33bf31420

22
main.py
View File

@ -1,5 +1,6 @@
import os
import json
from typing import Union
import requests
import time
@ -108,6 +109,14 @@ def import_song(song_info, cookie):
def save_failed_id(song_id):
with open("failed_ids.txt", "a") as f:
f.write(f"{song_id}\n")
# 获取最后一个上传的异常 id
def get_last_failed_id() -> Union[int, None]:
if not os.path.exists("failed_ids.txt"):
return None
with open("failed_ids.txt", "r") as f:
ids = [line.strip() for line in f]
return int(ids[-1])
# 处理歌曲导入请求
def process_songs(song_info_list, cookie):
@ -162,6 +171,16 @@ def try_to_upload_song(song_info, cookie):
if attempts == 3: # 如果失败三次,则跳过此 ID
print(f"歌曲 {song_id} 失败三次,跳过该歌曲。")
save_failed_id(song_id) # 保存失败的 ID
def get_resume_song_info_list(song_info_list) -> list:
last_failed_id = get_last_failed_id()
if last_failed_id is None:
print("暂无上传失败记录,从头开始上传")
return
for index, song_info in enumerate(song_info_list):
if int(song_info['id']) == last_failed_id:
print(f"当前已上传: {index + 1},最后上传失败的 id: {song_info['id']}")
return song_info_list[index + 1:]
# 主函数
def main():
@ -192,6 +211,9 @@ def main():
song_info_list = get_all_song_info(songs_data)
#print(f"所有歌曲信息: {song_info_list}")
# 从上次失败的歌曲开始上传
song_info_list = get_resume_song_info_list(song_info_list)
# 执行歌曲导入请求
process_songs(song_info_list, cookie)
else: