news_aggregator / app.py
saherPervaiz's picture
Update app.py
7016b34 verified
raw
history blame
2.88 kB
import streamlit as st
import sqlite3
import requests
from datetime import datetime
# Connect to the SQLite database
def connect_db():
conn = sqlite3.connect("news_aggregator.db")
return conn
# Function to create or update the articles in the database
def insert_article(title, description, link, topic, date_published):
conn = connect_db()
cursor = conn.cursor()
# Insert article into the database
cursor.execute('''
INSERT INTO articles (title, description, link, topic, date_published)
VALUES (?, ?, ?, ?, ?)
''', (title, description, link, topic, date_published))
conn.commit()
conn.close()
# Function to fetch news articles from an API (e.g., NewsAPI)
def fetch_news_api(topic, keyword):
api_key = 'fe1e6bcbbf384b3e9220a7a1138805e0' # Replace with your News API key
url = f'https://newsapi.org/v2/everything?q={keyword}&category={topic}&apiKey={api_key}'
response = requests.get(url)
if response.status_code == 200:
return response.json()['articles']
else:
return []
# Function to fetch articles from the database based on topic and filter
def fetch_articles_from_db(topic, keyword_filter=None):
conn = connect_db()
cursor = conn.cursor()
query = 'SELECT * FROM articles WHERE topic=?'
params = (topic,)
if keyword_filter:
query += ' AND description LIKE ?'
params = (topic, f'%{keyword_filter}%')
cursor.execute(query, params)
articles = cursor.fetchall()
conn.close()
return articles
# Streamlit UI code
def main():
st.title("News Aggregator")
# Topic selection
topic = st.selectbox("Select Topic", ['Sports', 'Politics', 'Technology'])
keyword_filter = st.text_input("Filter by Keyword")
# Fetch news articles
if st.button("Fetch News"):
# First, fetch from News API
articles = fetch_news_api(topic, keyword_filter)
# Insert the fetched articles into the database
for article in articles:
insert_article(
article['title'],
article['description'],
article['url'],
topic,
article['publishedAt']
)
st.success(f"Fetched {len(articles)} articles from News API.")
# Fetch and display articles from the database
st.subheader("Articles from Database")
fetched_articles = fetch_articles_from_db(topic, keyword_filter)
if fetched_articles:
for article in fetched_articles:
st.write(f"**Title**: {article[1]}")
st.write(f"**Description**: {article[2]}")
st.write(f"**Link**: {article[3]}")
st.write(f"**Published**: {article[5]}")
st.write("---")
else:
st.write("No articles found for this topic.")
if __name__ == '__main__':
main()