KFMPod/generator.py
2023-12-06 10:39:49 +00:00

77 lines
2.6 KiB
Python

import os
import time
from pod2gen import Podcast, Episode, Media, Person
from mutagen import mp3, mp4
from datetime import timedelta, datetime as dt
from dateutil.tz import UTC
from stat import S_ISREG, ST_CTIME, ST_MODE
def get_mp3_metadata(file_path, filename):
track_seconds = round(mp4.MP4(file_path).info.length)
time_split = time.strftime("%H:%M:%S", time.gmtime(track_seconds)).split(":")
try:
description = mp4.MP4(file_path).tags["COMM::eng"].text[0]
except KeyError:
try:
description = mp4.MP4(file_path).tags["\xa9cmt"][0]
except KeyError:
description = filename.replace("_", " ")
return (
timedelta(
hours=int(time_split[0]),
minutes=int(time_split[1]),
seconds=int(time_split[2]),
),
description,
)
def add_episodes_from_folder(folder_path):
file_list = os.listdir(folder_path)
list_of_episodes = [ x for x in file_list if "m4b" in x ]
# file_list.pop(0)
for file in list_of_episodes:
filename = file[:-4]
ep_details = filename.split(" ")
file_size = os.stat(f"./{folder_path}/{file}").st_size
file_length, description = get_mp3_metadata(f"./{folder_path}/{file}", filename)
try:
p.add_episode(
Episode(
title=mp4.MP4(f"./{folder_path}/{file}").tags["\xa9nam"][0],
media=Media(
f"https://kithub.k-world.me.uk/Karl/KFMPod/raw/master/{folder_path}/{file}",
size=file_size,
type='mp3'
),
summary=description,
season=[int(i) for i in folder_path.split() if i.isdigit()][0],
episode_number=int(ep_details[1][-0]),
publication_date=dt.fromtimestamp(
os.stat(f"./{folder_path}/{file}").st_ctime, tz=UTC
),
)
)
except Exception:
pass
owner = Person("Example", "email@example.com")
# Create the Podcast
p = Podcast(
name="Kurupt FM Podcast",
description="Kurupt FM Podcast",
website="https://kithub.k-world.me.uk/Karl/KFMPod",
explicit=False,
)
p.image = "https://kithub.k-world.me.uk/Karl/KFMPod/raw/master/Season%201/Ep.%201%ea%9e%89%20Music%20[B08DFKGFP8].jpg"
p.owner = owner
p.locked = True
p.withhold_from_itunes = True
add_episodes_from_folder("Season 1")
add_episodes_from_folder("Season 2")
add_episodes_from_folder("Season 3")
# Generate the RSS feed
p.rss_file("feed.xml", minimize=True)