Spaces:
Sleeping
Sleeping
import json | |
import os | |
import feedparser | |
import streamlit as st | |
from functions import * | |
def main(): | |
st.title("PodcastGPT Dashboard") | |
st.markdown(""" | |
This app assists busy professionals with transcribing and summarizing Podcasts from [Listen Notes](https://www.listennotes.com/) website by following the below steps: | |
- Search for your desired podcast from the Listen Notes website and click on the "RSS" tab to generate a unique link to the podcast. Example shown below: | |
""") | |
col1, col2 = st.columns(2) | |
with col1: | |
st.image('RSS.png', caption='Click RSS') | |
with col2: | |
st.image('RSS_copy.png', caption='Copy RSS Link') | |
st.markdown("- Copy the generated link and paste in the sidebar on the left:") | |
# Left section - Input fields | |
st.sidebar.header("Podcast RSS Feeds") | |
podcast_url = st.sidebar.text_input('Please paste the podcast RSS feed link here') | |
latest_ep_button = st.sidebar.button("Get latest 5 Episodes") | |
if latest_ep_button: | |
try: | |
# Extract the list of episodes for the given podcast | |
podcast_feed = feedparser.parse(podcast_url) | |
pods = {} | |
num_episodes = min(len(podcast_feed.entries), 5) | |
for pod in podcast_feed.entries[:num_episodes]: | |
podcast_title = pod['title'] | |
podcast_image = pod.get('image', {}).get('href', '') | |
episode_url = next((i['href'] for i in pod['links'] if i['type'] == 'audio/mpeg'), None) | |
pods[podcast_title] = [episode_url, podcast_image] | |
if pods: | |
# Dropdown box | |
st.sidebar.subheader("Available Podcasts Feeds") | |
podcast_five_titles = ['Select an episode'] + list(pods.keys()) # Adding a placeholder at the beginning | |
selected_podcast = st.sidebar.selectbox("Select Podcast", options=podcast_five_titles) | |
# Check if the user has made a selection other than the placeholder | |
if selected_podcast and selected_podcast != 'Select an episode': | |
podcast_link, podcast_image = pods[selected_podcast] | |
st.header("Newsletter Content") | |
# Display the podcast title | |
st.subheader("Episode Title") | |
st.write(selected_podcast) | |
# Display the podcast summary and the cover image | |
col1, col2 = st.columns([7, 3]) | |
podcast_info = process_podcast(podcast_link) | |
with col1: | |
st.subheader("Podcast Episode Summary") | |
st.write(podcast_info['podcast_summary']) | |
if podcast_image: | |
with col2: | |
st.image(podcast_image, caption="Podcast Cover", width=300) | |
# Display the podcast guest and their details | |
col3, col4 = st.columns([3, 7]) | |
with col3: | |
st.subheader("Podcast Guest") | |
st.write(podcast_info['podcast_guest']) | |
with col4: | |
st.subheader("Podcast Guest Details") | |
st.write(podcast_info["podcast_guest_title"]) | |
st.write(podcast_info["podcast_guest_org"]) | |
# Display the five key moments | |
st.subheader("Key Moments") | |
key_moments = podcast_info['podcast_highlights'] | |
for moment in key_moments.split('\n'): | |
st.markdown(f"<p style='margin-bottom: 5px;'>{moment}</p>", unsafe_allow_html=True) | |
except Exception as e: | |
st.sidebar.error(f"An error occurred: {e}") | |
if __name__ == '__main__': | |
main() | |