86 regels
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			86 regels
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import os
 | |
| import time
 | |
| from pod2gen import Podcast, Episode, Media, Person
 | |
| from mutagen import mp4
 | |
| from datetime import timedelta, datetime as dt
 | |
| from dateutil.tz import UTC
 | |
| 
 | |
| 
 | |
| def get_mp4_metadata(file_path:str, filename:str) -> (timedelta, str):
 | |
|     """Extract MP4 metadata from a file.
 | |
| 
 | |
|     Args:
 | |
|         file_path (_type_): File path to the MP4 file.
 | |
|         str (_type_): Name of the MP4 file.
 | |
| 
 | |
|     Returns:
 | |
|         _type_: Timedelta and description of the MP4 file.
 | |
|     """    
 | |
|     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["\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:str) -> None:
 | |
|     """Loop over all files in a folder and add them to the Podcast.
 | |
| 
 | |
|     Args:
 | |
|         folder_path (str): Folder to loop over.
 | |
|     """    
 | |
|     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_mp4_metadata(f"./{folder_path}/{file}", filename)
 | |
|         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
 | |
|                 ),
 | |
|             )
 | |
|         )
 | |
| 
 | |
| 
 | |
| 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)
 | 
