|
|
import streamlit as st |
|
|
import requests |
|
|
from bs4 import BeautifulSoup |
|
|
from xml.etree import ElementTree as ET |
|
|
|
|
|
|
|
|
rss_feeds = { |
|
|
"Opinion": "https://www.bhaskar.com/rss-v1--category-1944.xml", |
|
|
"Budget 2024": "https://www.bhaskar.com/rss-v1--category-14994.xml", |
|
|
"Bollywood": "https://www.bhaskar.com/rss-v1--category-11215.xml", |
|
|
"Auto": "https://www.bhaskar.com/rss-v1--category-10711.xml", |
|
|
"Jobs & Education": "https://www.bhaskar.com/rss-v1--category-11945.xml", |
|
|
"Women": "https://www.bhaskar.com/rss-v1--category-1532.xml", |
|
|
"Tech - Auto": "https://www.bhaskar.com/rss-v1--category-5707.xml", |
|
|
"Happy Life": "https://www.bhaskar.com/rss-v1--category-7911.xml", |
|
|
"Utility": "https://www.bhaskar.com/rss-v1--category-11616.xml", |
|
|
"International": "https://www.bhaskar.com/rss-v1--category-1125.xml", |
|
|
"National": "https://www.bhaskar.com/rss-v1--category-1061.xml", |
|
|
"Business": "https://www.bhaskar.com/rss-v1--category-1051.xml", |
|
|
"Sports": "https://www.bhaskar.com/rss-v1--category-1053.xml", |
|
|
"Fake News Expose": "https://www.bhaskar.com/rss-v1--category-10891.xml", |
|
|
"Magazine": "https://www.bhaskar.com/rss-v1--category-1057.xml", |
|
|
"Jeevan Mantra": "https://www.bhaskar.com/rss-v1--category-3379.xml", |
|
|
"Entertainment": "https://www.bhaskar.com/rss-v1--category-3998.xml", |
|
|
"DB Original": "https://www.bhaskar.com/rss-v1--category-4587.xml", |
|
|
"Rajasthan": "https://www.bhaskar.com/rss-v1--category-1740.xml", |
|
|
"Madhya Pradesh": "https://www.bhaskar.com/rss-v1--category-1739.xml", |
|
|
"Uttar Pradesh": "https://www.bhaskar.com/rss-v1--category-2052.xml", |
|
|
"Bihar": "https://www.bhaskar.com/rss-v1--category-3679.xml", |
|
|
"Chhattisgarh": "https://www.bhaskar.com/rss-v1--category-1741.xml", |
|
|
"Haryana": "https://www.bhaskar.com/rss-v1--category-1742.xml", |
|
|
"New Delhi": "https://www.bhaskar.com/rss-v1--category-7140.xml", |
|
|
"Maharashtra": "https://www.bhaskar.com/rss-v1--category-2318.xml", |
|
|
"Jharkhand": "https://www.bhaskar.com/rss-v1--category-3682.xml", |
|
|
"Punjab": "https://www.bhaskar.com/rss-v1--category-1743.xml", |
|
|
"Gujarat": "https://www.bhaskar.com/rss-v1--category-2314.xml", |
|
|
"Chandigarh": "https://www.bhaskar.com/rss-v1--category-11649.xml", |
|
|
"Himachal": "https://www.bhaskar.com/rss-v1--category-12084.xml", |
|
|
} |
|
|
|
|
|
def fetch_rss_feed(url): |
|
|
response = requests.get(url) |
|
|
response.raise_for_status() |
|
|
root = ET.fromstring(response.content) |
|
|
|
|
|
|
|
|
channel_image = root.find('.//image/url') |
|
|
channel_image_url = channel_image.text if channel_image is not None else None |
|
|
|
|
|
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 |
|
|
media_content = item.find('{http://search.yahoo.com/mrss/}content') |
|
|
|
|
|
|
|
|
description_text = BeautifulSoup(description.text, 'html.parser').get_text() if description is not None and description.text else "No description available" |
|
|
|
|
|
|
|
|
image_url = media_content.attrib['url'] if media_content is not None and 'url' in media_content.attrib else channel_image_url |
|
|
|
|
|
feed_data.append({ |
|
|
'title': title, |
|
|
'link': link, |
|
|
'description': description_text, |
|
|
'pub_date': pub_date, |
|
|
'image': image_url |
|
|
}) |
|
|
return feed_data |
|
|
|
|
|
def main(): |
|
|
st.title("Dainik Bhaskar RSS Feeds") |
|
|
|
|
|
|
|
|
section = st.sidebar.selectbox("Select a Section", list(rss_feeds.keys())) |
|
|
|
|
|
|
|
|
feed_url = rss_feeds[section] |
|
|
feed_data = fetch_rss_feed(feed_url) |
|
|
|
|
|
|
|
|
st.header(f"{section}") |
|
|
for item in feed_data: |
|
|
st.subheader(item['title']) |
|
|
st.write(f"[Read more]({item['link']})") |
|
|
|
|
|
|
|
|
if item['image']: |
|
|
st.image(item['image']) |
|
|
|
|
|
st.write(item['description']) |
|
|
st.write(f"*Published on {item['pub_date']}*") |
|
|
st.write("---") |
|
|
|
|
|
if __name__ == "__main__": |
|
|
main() |
|
|
|