File size: 4,359 Bytes
e8b42c4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import streamlit as st
import requests
from bs4 import BeautifulSoup
from xml.etree import ElementTree as ET

# Define RSS feed URLs for Dainik Bhaskar
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)
    
    # Extract channel-wide image URL
    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')

        # Handle cases where description might be None
        description_text = BeautifulSoup(description.text, 'html.parser').get_text() if description is not None and description.text else "No description available"
        
        # Extract image URL from media content or fallback to channel image
        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")

    # 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(f"{section}")
    for item in feed_data:
        st.subheader(item['title'])
        st.write(f"[Read more]({item['link']})")
        
        # Display image if present
        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()