import streamlit as st
from bs4 import BeautifulSoup as soup
from urllib.request import urlopen
from newspaper import Article
import nltk
nltk.download('punkt')
#by theaimart
st.set_page_config(page_title='NewsARC by theaimart')
def fetch_news_search_topic(topic):
site = 'https://news.google.com/rss/search?q={}'.format(topic)
op = urlopen(site) # Open that site
rd = op.read() # read data from site
op.close() # close the object
sp_page = soup(rd, 'xml') # scrapping data from site
news_list = sp_page.find_all('item') # finding news
return news_list
def fetch_top_news():
site = 'https://news.google.com/news/rss'
op = urlopen(site) # Open that site
rd = op.read() # read data from site
op.close() # close the object
sp_page = soup(rd, 'xml') # scrapping data from site
news_list = sp_page.find_all('item') # finding news
return news_list
def fetch_category_news(topic):
site = 'https://news.google.com/news/rss/headlines/section/topic/{}'.format(topic)
op = urlopen(site) # Open that site
rd = op.read() # read data from site
op.close() # close the object
sp_page = soup(rd, 'xml') # scrapping data from site
news_list = sp_page.find_all('item') # finding news
return news_list
def display_news(list_of_news, news_quantity):
c = 0
for news in list_of_news:
c += 1
st.write('**({}) {}**'.format(c, news.title.text))
news_data = Article(news.link.text)
try:
news_data.download()
news_data.parse()
news_data.nlp()
except Exception as e:
st.error(e)
with st.expander(news.title.text):
st.markdown(
'''
{}"
'''.format(news_data.summary),
unsafe_allow_html=True)
st.markdown("[Read more at {}...]({})".format(news.source.text, news.link.text))
st.success("Published Date: " + news.pubDate.text)
if c >= news_quantity:
break
def run():
st.title("NewsARC: A Summarised News")
category = ['--Select--', 'Trending News', 'Favourite Topics', 'Search Topic']
cat_op = st.selectbox('Select your Category', category)
if cat_op == category[0]:
st.warning('Please select Type!!')
elif cat_op == category[1]:
st.subheader("Here is the Trending News for you")
no_of_news = st.slider('Number of News:', min_value=5, max_value=25, step=1)
news_list = fetch_top_news()
display_news(news_list, no_of_news)
elif cat_op == category[2]:
av_topics = ['Choose Topic', 'WORLD', 'NATION', 'BUSINESS', 'TECHNOLOGY', 'ENTERTAINMENT', 'SPORTS', 'SCIENCE', 'HEALTH']
st.subheader("Choose your favourite Topic")
chosen_topic = st.selectbox("Choose your favourite Topic", av_topics)
if chosen_topic == av_topics[0]:
st.warning("Please Choose the Topic")
else:
no_of_news = st.slider('Number of News:', min_value=5, max_value=100, step=1)
news_list = fetch_category_news(chosen_topic)
if news_list:
st.subheader("Here are the some {} News for you".format(chosen_topic))
display_news(news_list, no_of_news)
else:
st.error("No News found for {}".format(chosen_topic))
elif cat_op == category[3]:
user_topic = st.text_input("Enter your Topic")
no_of_news = st.slider('Number of News:', min_value=5, max_value=100, step=1)
if st.button("Search") and user_topic != '':
user_topic_pr = user_topic.replace(' ', '')
news_list = fetch_news_search_topic(topic=user_topic_pr)
if news_list:
st.subheader("Here are the some {} News for you".format(user_topic.capitalize()))
display_news(news_list, no_of_news)
else:
st.error("No News found for {}".format(user_topic))
else:
st.warning("Please write Topic Name to Search")
st.write("by theaimart")
run()