From Flask Import Flask, Render - Tem
From Flask Import Flask, Render - Tem
url_for, session
from datetime import datetime
import requests
app = Flask(__name__)
app.secret_key = 'my_very_unsafe_secret_key_for_testing'
SOURCE_MAP = {
'India': {
'English': ["Times of India", "Hindustan Times", "The Hindu", "India
Today"],
'Hindi': ["Dainik Jagran", "Amar Ujala"]
},
'United States': {
'English': ["CNN", "The New York Times", "Washington Post", "USA Today"]
},
'United Kingdom': {
'English': ["BBC News", "The Guardian", "The Independent"]
}
}
API_KEY = '308d9dcd0b0d9b0428350da357a07f53'
GNEWS_API_URL = 'https://gnews.io/api/v4/top-headlines'
GNEWS_SEARCH_URL = 'https://gnews.io/api/v4/search'
@app.route('/')
def index():
selected_category = request.args.get('category', 'General')
selected_country = request.args.get('country', 'India')
selected_language = request.args.get('language', 'English')
selected_source = request.args.get('source', '')
search_query = request.args.get('q', '')
user_email = session.get('user_email')
if user_email:
user = users.get(user_email, {})
user_preferences = user.get('preferences', [selected_category])
user_languages = user.get('languages', [selected_language])
user_sources = user.get('news_sources', [selected_source])
else:
user_preferences = [selected_category]
user_languages = [selected_language]
user_sources = [selected_source]
if search_query:
articles = search_news(search_query, selected_language)
else:
category_to_fetch = user_preferences[0] if user_preferences else
selected_category
language_to_fetch = user_languages[0] if user_languages else
selected_language
source_to_fetch = user_sources[0] if user_sources else None
articles = fetch_news(category_to_fetch, selected_country,
language_to_fetch, source_to_fetch)
return render_template(
'index.html',
articles=articles,
categories=CATEGORIES,
countries=COUNTRIES,
languages=LANGUAGES,
sources=sources,
selected_category=selected_category,
selected_country=selected_country,
selected_language=selected_language,
selected_source=selected_source,
search_query=search_query
)
@app.route('/search', methods=['GET'])
def search():
query = request.args.get('query')
language = request.args.get('language')
if query and language:
# Process the search logic
return render_template('index.html', query=query, language=language)
else:
return redirect(url_for('index'))
def process_response(response):
if response.status_code == 200:
articles = response.json().get('articles', [])
for article in articles:
if article.get('publishedAt'):
utc_time = datetime.strptime(article['publishedAt'], '%Y-%m-%dT%H:
%M:%SZ')
article['formatted_date'] = utc_time.strftime('%d/%m/%Y %I:%M %p')
article['summary'] = article.get('description', 'No summary
available.')
return articles
return []
preferences = request.form.getlist('preferences')
languages = request.form.getlist('languages')
if email in users:
flash('Email already registered! Please log in.', 'error')
return redirect(url_for('login'))
users[email] = {
'email': email,
'password': password,
'name': name,
'preferences': preferences,
'languages': languages,
'news_sources': []
}
return render_template('signup.html')
if user_email in users:
user = users[user_email]
user['preferences'] = selected_preferences
user['news_sources'] = selected_news_sources
user['languages'] = selected_languages
user = users.get(email)
if user:
if user['password'] == password:
session['user_email'] = email # Set the session for logged-in user
flash('Login successful!', 'success')
return redirect(url_for('index'))
else:
flash('Invalid credentials. Please try again.', 'error')
else:
# Redirect new users to the signup page
flash('This email is not registered. Please sign up.', 'error')
return redirect(url_for('signup'))
return render_template('login.html')
if not user:
flash('User not found!', 'error')
return redirect(url_for('login'))
user['preferences'] = preferences
user['news_sources'] = news_sources
user['languages'] = languages
else:
flash('You need to log in first!', 'warning')
return redirect(url_for('login'))
@app.route('/logout')
def logout():
session.clear()
flash('You have been logged out.', 'success')
return redirect(url_for('index'))
init_db(app)
if __name__ == '__main__':
app.run(debug=True)