-
Notifications
You must be signed in to change notification settings - Fork 0
/
podcast_frontend.py
129 lines (97 loc) · 4.43 KB
/
podcast_frontend.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
import streamlit as st
import modal
import json
import os
streamlit_style = """
<style>
p, ol, ul, dl {
font-size: 1.18rem;
}
</style>
"""
st.markdown(streamlit_style, unsafe_allow_html=True)
def main():
st.title("Welcome to Podsum Newsletter")
st.write("Get your podcast summarised without need to spend hours listening!")
available_podcast_info = create_dict_from_json_files('.')
# Left section - Input fields
st.sidebar.header("Podcast RSS Feeds")
# Dropdown box
st.sidebar.subheader("Available Podcasts Feeds")
selected_podcast = st.sidebar.selectbox("Select Podcast", options=available_podcast_info.keys())
if selected_podcast:
podcast_info = available_podcast_info[selected_podcast]
# Display the podcast title
st.subheader(podcast_info['podcast_details']['podcast_title'])
# Display the podcast summary and the cover image in a side-by-side layout
col1, col2 = st.columns([7, 3])
with col1:
# Display the podcast episode summary
st.subheader("Latest Episode Summary")
st.write(podcast_info['podcast_summary'])
with col2:
st.image(podcast_info['podcast_details']['episode_image'], caption="Podcast Cover", width=300, use_column_width=True)
# Display the podcast guest and their details in a side-by-side layout
col3, col4 = st.columns([3, 7])
with col3:
st.subheader("Podcast Guest")
st.write(podcast_info['podcast_guest']['name'])
with col4:
st.subheader("Podcast Guest Details")
st.write(podcast_info["podcast_guest"]['summary'])
# 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)
# User Input box
st.sidebar.subheader("Add and Process New Podcast Feed")
url = st.sidebar.text_input("Link to RSS Feed")
process_button = st.sidebar.button("Process Podcast Feed")
st.sidebar.markdown("**Note**: Podcast processing can take upto 5 mins, please be patient. Make sure your podcast is not more than 30 mins")
st.sidebar.markdown("_It will fetch the most recent episode of the podcast_")
if process_button:
# Call the function to process the URLs and retrieve podcast guest information
podcast_info = process_podcast_info(url)
# Display the podcast title
st.subheader(podcast_info['podcast_details']['podcast_title'])
# Display the podcast summary and the cover image in a side-by-side layout
col1, col2 = st.columns([7, 3])
with col1:
# Display the podcast episode summary
st.subheader("Latest Episode Summary")
st.write(podcast_info['podcast_summary'])
with col2:
st.image(podcast_info['podcast_details']['episode_image'], caption="Podcast Cover", width=300, use_column_width=True)
# Display the podcast guest and their details in a side-by-side layout
col3, col4 = st.columns([3, 7])
with col3:
st.subheader("Podcast Guest")
st.write(podcast_info['podcast_guest']['name'])
with col4:
st.subheader("Podcast Guest Details")
st.write(podcast_info["podcast_guest"]['summary'])
# 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)
def create_dict_from_json_files(folder_path):
json_files = [f for f in os.listdir(folder_path) if f.endswith('.json')]
data_dict = {}
for file_name in json_files:
file_path = os.path.join(folder_path, file_name)
with open(file_path, 'r') as file:
podcast_info = json.load(file)
podcast_name = podcast_info['podcast_details']['podcast_title']
# Process the file data as needed
data_dict[podcast_name] = podcast_info
return data_dict
def process_podcast_info(url):
f = modal.Function.lookup("corise-podcast-project", "process_podcast")
output = f.call(url, '/content/podcast/')
return output
if __name__ == '__main__':
main()