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 or 'pods' in st.session_state: try: if latest_ep_button: # Parse the podcast feed and update session state podcast_feed = feedparser.parse(podcast_url) st.session_state['pods'] = { pod['title']: [pod.get('links', [{}])[0].get('href', ''), pod.get('image', {}).get('href', '')] for pod in podcast_feed.entries[:5] } if st.session_state['pods']: # Dropdown box st.sidebar.subheader("Available Podcasts Feeds") podcast_titles = ['Select an episode'] + list(st.session_state['pods'].keys()) selected_podcast = st.sidebar.selectbox("Select Podcast", options=podcast_titles) if selected_podcast and selected_podcast != 'Select an episode': podcast_link, podcast_image = st.session_state['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"

{moment}

", unsafe_allow_html=True) export_button = st.button("Export Summary to Word") if export_button: byte_io = export_to_word(podcast_info,selected_podcast) # Download link for the Word document st.download_button( label="Download Summary", data=byte_io, file_name=f"{selected_podcast}_summary.docx", mime="application/vnd.openxmlformats-officedocument.wordprocessingml.document" ) except Exception as e: st.sidebar.error(f"An error occurred: {e}") if __name__ == '__main__': main()