mirror of
https://github.com/amtoaer/bili-sync.git
synced 2026-09-07 00:17:24 +08:00
fix: 移除无用文件,忽略文件名中的非法字符
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
.PHONY: install lint
|
.PHONY: install fmt start-daemon start-once
|
||||||
|
|
||||||
install:
|
install:
|
||||||
@echo "Installing dependencies..."
|
@echo "Installing dependencies..."
|
||||||
@@ -8,3 +8,9 @@ fmt:
|
|||||||
@echo "Formatting..."
|
@echo "Formatting..."
|
||||||
@poetry run black .
|
@poetry run black .
|
||||||
@poetry run ruff --fix .
|
@poetry run ruff --fix .
|
||||||
|
|
||||||
|
start-daemon:
|
||||||
|
@poetry run python entry.py
|
||||||
|
|
||||||
|
start-once:
|
||||||
|
@poetry run python entry.py --once
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
from loguru import logger
|
||||||
|
|
||||||
from processor import process
|
from processor import process
|
||||||
from settings import settings
|
from settings import settings
|
||||||
|
|
||||||
@@ -8,11 +10,14 @@ from settings import settings
|
|||||||
async def entry() -> None:
|
async def entry() -> None:
|
||||||
if any("once" in _ for _ in sys.argv):
|
if any("once" in _ for _ in sys.argv):
|
||||||
# 单次运行
|
# 单次运行
|
||||||
|
logger.info("Running once...")
|
||||||
await process()
|
await process()
|
||||||
|
return
|
||||||
|
logger.info("Running daemon...")
|
||||||
while True:
|
while True:
|
||||||
await process()
|
await process()
|
||||||
await asyncio.sleep(settings.interval * 60)
|
await asyncio.sleep(settings.interval * 60)
|
||||||
|
|
||||||
|
|
||||||
def start() -> None:
|
if __name__ == "__main__":
|
||||||
asyncio.run(entry())
|
asyncio.run(entry())
|
||||||
|
|||||||
+8
-7
@@ -81,16 +81,17 @@ async def process_favorite(favorite_id: int) -> None:
|
|||||||
|
|
||||||
async def process_video(save_path: Path, media: dict) -> None:
|
async def process_video(save_path: Path, media: dict) -> None:
|
||||||
title = media["title"]
|
title = media["title"]
|
||||||
|
safe_title = media["title"].replace("/", "_")
|
||||||
logger.info("start to process video {}", title)
|
logger.info("start to process video {}", title)
|
||||||
if media["type"] != MediaType.VIDEO:
|
if media["type"] != MediaType.VIDEO:
|
||||||
logger.warning("Media {} is not a video, skipped.", title)
|
logger.warning("Media {} is not a video, skipped.", title)
|
||||||
return
|
return
|
||||||
final_path = save_path / f"{title}.mp4"
|
final_path = save_path / f"{safe_title}.mp4"
|
||||||
if final_path.exists():
|
if final_path.exists():
|
||||||
logger.info(f"{final_path} already exists, skipped.")
|
logger.info(f"{final_path} already exists, skipped.")
|
||||||
return
|
return
|
||||||
# 写入 nfo
|
# 写入 nfo
|
||||||
nfo_path = save_path / f"{title}.nfo"
|
nfo_path = save_path / f"{safe_title}.nfo"
|
||||||
EpisodeInfo(
|
EpisodeInfo(
|
||||||
title=title,
|
title=title,
|
||||||
plot=media["intro"],
|
plot=media["intro"],
|
||||||
@@ -99,7 +100,7 @@ async def process_video(save_path: Path, media: dict) -> None:
|
|||||||
aired=datetime.datetime.fromtimestamp(media["ctime"]),
|
aired=datetime.datetime.fromtimestamp(media["ctime"]),
|
||||||
).write_nfo(nfo_path)
|
).write_nfo(nfo_path)
|
||||||
# 写入 poster
|
# 写入 poster
|
||||||
cover_path = save_path / f"{title}-poster.jpg"
|
cover_path = save_path / f"{safe_title}-poster.jpg"
|
||||||
await download_content(media["cover"], cover_path)
|
await download_content(media["cover"], cover_path)
|
||||||
# 开始处理视频内容
|
# 开始处理视频内容
|
||||||
v = video.Video(media["bvid"], credential=credential)
|
v = video.Video(media["bvid"], credential=credential)
|
||||||
@@ -108,7 +109,7 @@ async def process_video(save_path: Path, media: dict) -> None:
|
|||||||
)
|
)
|
||||||
streams = detector.detect_best_streams()
|
streams = detector.detect_best_streams()
|
||||||
if detector.check_flv_stream():
|
if detector.check_flv_stream():
|
||||||
tmp_path = save_path / f"{title}.flv"
|
tmp_path = save_path / f"{safe_title}.flv"
|
||||||
await download_content(streams[0].url, tmp_path)
|
await download_content(streams[0].url, tmp_path)
|
||||||
process = await create_subprocess_exec(
|
process = await create_subprocess_exec(
|
||||||
FFMPEG_COMMAND,
|
FFMPEG_COMMAND,
|
||||||
@@ -122,8 +123,8 @@ async def process_video(save_path: Path, media: dict) -> None:
|
|||||||
tmp_path.unlink()
|
tmp_path.unlink()
|
||||||
else:
|
else:
|
||||||
tmp_video_path, tmp_audio_path = (
|
tmp_video_path, tmp_audio_path = (
|
||||||
save_path / f"{title}_video.m4s",
|
save_path / f"{safe_title}_video.m4s",
|
||||||
save_path / f"{title}_audio.m4s",
|
save_path / f"{safe_title}_audio.m4s",
|
||||||
)
|
)
|
||||||
await asyncio.gather(
|
await asyncio.gather(
|
||||||
download_content(streams[0].url, tmp_video_path),
|
download_content(streams[0].url, tmp_video_path),
|
||||||
@@ -144,4 +145,4 @@ async def process_video(save_path: Path, media: dict) -> None:
|
|||||||
await process.communicate()
|
await process.communicate()
|
||||||
tmp_video_path.unlink()
|
tmp_video_path.unlink()
|
||||||
tmp_audio_path.unlink()
|
tmp_audio_path.unlink()
|
||||||
logger.info(f"{final_path} downloaded successfully.")
|
logger.info(f"{title} downloaded successfully.")
|
||||||
|
|||||||
Reference in New Issue
Block a user