67 lines
2.2 KiB
Python
67 lines
2.2 KiB
Python
import requests
|
|
import yt_dlp
|
|
import os
|
|
from dotenv import load_dotenv
|
|
from helper import log_message
|
|
from ssh_helper import upload_via_sftp, send_notification_via_ssh
|
|
from youtube_handler import get_url_for_latest_video, get_youtube_data, return_download_options
|
|
|
|
|
|
load_dotenv()
|
|
PODCAST_AUTHORIZATION_TOKEN = os.getenv("PODCAST_AUTHORIZATION_TOKEN")
|
|
PODCAST_API_URL = os.getenv("PODCAST_API_URL")
|
|
|
|
|
|
def get_audiobookshelf_data()->tuple[int | None, str | None]:
|
|
headers = {"Authorization": f"Bearer {PODCAST_AUTHORIZATION_TOKEN}"}
|
|
|
|
try:
|
|
response = requests.get(PODCAST_API_URL, headers=headers)
|
|
response.raise_for_status()
|
|
result = response.json()
|
|
audiobookshelf_track = result["media"]["episodes"][-1]["audioFile"]["metaTags"]["tagTrack"]
|
|
audiobookshelf_title = result["media"]["episodes"][-1]["audioFile"]["metaTags"]["tagTitle"]
|
|
return audiobookshelf_track, audiobookshelf_title
|
|
|
|
except requests.RequestException as e:
|
|
log_message(f"Failed to fetch data: {e}")
|
|
return None
|
|
|
|
|
|
def download_episode():
|
|
log_message("Starting Perun")
|
|
|
|
audiobookshelf_track, audiobookshelf_title = get_audiobookshelf_data()
|
|
if audiobookshelf_track is None or audiobookshelf_title is None:
|
|
log_message("Unable to fetch Audiobookshelf data. Exiting.")
|
|
return
|
|
|
|
episode_url = get_url_for_latest_video()
|
|
episode_info = get_youtube_data(episode_url)
|
|
log_message(f"Latest episode: {episode_info['title']}")
|
|
|
|
if audiobookshelf_title != episode_info["title"]:
|
|
log_message("New Episode found")
|
|
|
|
track = str(int(audiobookshelf_track) + 1).zfill(4)
|
|
options = return_download_options(episode_info,track)
|
|
|
|
log_message("Downloading episode")
|
|
try:
|
|
with yt_dlp.YoutubeDL(options) as episode:
|
|
episode.download(episode_url)
|
|
except Exception as e:
|
|
log_message(f"Failed to download episode: {e}")
|
|
return
|
|
|
|
log_message("Uploading episode")
|
|
upload_via_sftp(f"perun-{episode_info['date']}.mp3")
|
|
log_message("Finished uploading, sending notification")
|
|
send_notification_via_ssh(f"Perun episode {track} has been released",episode_info["title"])
|
|
log_message("Finished")
|
|
else:
|
|
log_message("No new episode found, exiting...")
|
|
|
|
if __name__ == "__main__":
|
|
download_episode()
|