Spaces:
Paused
Paused
| import streamlit as st | |
| import requests | |
| from bs4 import BeautifulSoup | |
| from xml.etree import ElementTree as ET | |
| # Define RSS feed URLs | |
| rss_feeds = { | |
| # "Top Stories": "http://timesofindia.indiatimes.com/rssfeedstopstories.cms", | |
| "Most Recent Stories": "http://timesofindia.indiatimes.com/rssfeedmostrecent.cms", | |
| "India": "http://timesofindia.indiatimes.com/rssfeeds/-2128936835.cms", | |
| "World": "http://timesofindia.indiatimes.com/rssfeeds/296589292.cms", | |
| "NRI": "http://timesofindia.indiatimes.com/rssfeeds/7098551.cms", | |
| "Business": "http://timesofindia.indiatimes.com/rssfeeds/1898055.cms", | |
| "US": "https://timesofindia.indiatimes.com/rssfeeds_us/72258322.cms", | |
| "Cricket": "http://timesofindia.indiatimes.com/rssfeeds/54829575.cms", | |
| "Sports": "http://timesofindia.indiatimes.com/rssfeeds/4719148.cms", | |
| "Science": "http://timesofindia.indiatimes.com/rssfeeds/-2128672765.cms", | |
| "Environment": "http://timesofindia.indiatimes.com/rssfeeds/2647163.cms", | |
| "Tech": "http://timesofindia.indiatimes.com/rssfeeds/66949542.cms", | |
| "Education": "http://timesofindia.indiatimes.com/rssfeeds/913168846.cms", | |
| "Entertainment": "http://timesofindia.indiatimes.com/rssfeeds/1081479906.cms", | |
| "Life & Style": "http://timesofindia.indiatimes.com/rssfeeds/2886704.cms", | |
| "Most Read": "http://timesofindia.indiatimes.com/rssfeedmostread.cms", | |
| "Most Shared": "http://timesofindia.indiatimes.com/rssfeedmostshared.cms", | |
| "Most Commented": "http://timesofindia.indiatimes.com/rssfeedmostcommented.cms", | |
| "Astrology": "https://timesofindia.indiatimes.com/rssfeeds/65857041.cms", | |
| "Auto": "https://timesofindia.indiatimes.com/rssfeeds/74317216.cms" | |
| } | |
| def fetch_rss_feed(url): | |
| response = requests.get(url) | |
| response.raise_for_status() | |
| root = ET.fromstring(response.content) | |
| items = root.findall('.//item') | |
| feed_data = [] | |
| for item in items: | |
| title = item.find('title').text | |
| link = item.find('link').text | |
| description = item.find('description') | |
| pub_date = item.find('pubDate').text | |
| # Handle cases where description might be None | |
| if description is not None: | |
| description_text = BeautifulSoup(description.text, 'html.parser').get_text() | |
| images = [img['src'] for img in BeautifulSoup(description.text, 'html.parser').find_all('img', src=True)] | |
| else: | |
| description_text = "No description available" | |
| images = [] | |
| feed_data.append({ | |
| 'title': title, | |
| 'link': link, | |
| 'description': description_text, | |
| 'pub_date': pub_date, | |
| 'images': images | |
| }) | |
| return feed_data | |
| def main(): | |
| st.title("Times of India RSS Feeds") | |
| # Sidebar navigation | |
| section = st.sidebar.selectbox("Select a Section", list(rss_feeds.keys())) | |
| # Fetch RSS feed data | |
| feed_url = rss_feeds[section] | |
| feed_data = fetch_rss_feed(feed_url) | |
| # Display feed items | |
| st.header(section) | |
| for item in feed_data: | |
| st.subheader(item['title']) | |
| st.write(f"[Read more]({item['link']})") | |
| # Display images if present | |
| if item['images']: | |
| for img in item['images']: | |
| st.image(img) | |
| st.write(item['description']) | |
| st.write(f"*Published on {item['pub_date']}*") | |
| st.write("---") | |
| if __name__ == "__main__": | |
| main() | |