MPCW / app.py
harshdhane's picture
Update app.py
a368a1a verified
Raw
History Blame Contribute Delete
8.99 kB
from flask import Flask, request, render_template, redirect, url_for, session, flash, jsonify
from scraper import search_product # Imports combined scraper functions
import sqlite3
app = Flask(__name__)
app.secret_key = 'your_secret_key'
def init_db():
conn = sqlite3.connect('database.db')
cursor = conn.cursor()
# Create users table
cursor.execute('''CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL UNIQUE,
password TEXT NOT NULL
)''')
cursor.execute('''CREATE TABLE IF NOT EXISTS saved_items (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL,
product_name TEXT NOT NULL,
product_img TEXT,
amazon_name TEXT,
amazon_price TEXT,
amazon_link TEXT,
one_mg_name TEXT,
one_mg_price TEXT,
one_mg_link TEXT,
netmeds_name TEXT,
netmeds_price TEXT,
netmeds_link TEXT,
pharmeasy_name TEXT,
pharmeasy_price TEXT,
pharmeasy_link TEXT,
FOREIGN KEY(username) REFERENCES users(username)
)''')
conn.commit()
conn.close()
init_db()
@app.route('/save_item', methods=['POST'])
def save_item():
if 'username' not in session:
return jsonify({'status': 'error', 'message': 'User not logged in'}), 401
username = session['username']
data = request.json
try:
conn = sqlite3.connect('database.db')
cursor = conn.cursor()
# Check if the item is already saved
cursor.execute('''
SELECT id FROM saved_items
WHERE username = ? AND product_name = ? AND amazon_link = ?
''', (username, data['name'], data.get('amazon_link')))
existing_item = cursor.fetchone()
if existing_item:
return jsonify({'status': 'error', 'message': 'Item already saved'})
# Insert the item if not already saved
cursor.execute('''
INSERT INTO saved_items (username, product_name, product_img, amazon_name, amazon_price, amazon_link,
one_mg_name, one_mg_price, one_mg_link,
netmeds_name, netmeds_price, netmeds_link,
pharmeasy_name, pharmeasy_price, pharmeasy_link)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
''', (username, data['name'], data['img'],
data.get('amazon_name'), data.get('amazon_price'), data.get('amazon_link'),
data.get('one_mg_name'), data.get('one_mg_price'), data.get('one_mg_link'),
data.get('netmeds_name'), data.get('netmeds_price'), data.get('netmeds_link'),
data.get('pharmeasy_name'), data.get('pharmeasy_price'), data.get('pharmeasy_link')))
conn.commit()
except Exception as e:
return jsonify({'status': 'error', 'message': str(e)}), 500
finally:
conn.close()
return jsonify({'status': 'success', 'message': 'Item saved successfully'})
@app.route('/saved_items')
def saved_items():
if 'username' not in session:
return redirect(url_for('login'))
username = session['username']
conn = sqlite3.connect('database.db')
cursor = conn.cursor()
cursor.execute('''
SELECT product_name, product_img, amazon_name, amazon_price, amazon_link,
one_mg_name, one_mg_price, one_mg_link,
netmeds_name, netmeds_price, netmeds_link,
pharmeasy_name, pharmeasy_price, pharmeasy_link
FROM saved_items WHERE username = ?
''', (username,))
items = cursor.fetchall()
conn.close()
saved_items = [
{'name': row[0], 'img': row[1],
'amazon': {'name': row[2], 'price': row[3], 'link': row[4]},
'one_mg': {'name': row[5], 'price': row[6], 'link': row[7]},
'netmeds': {'name': row[8], 'price': row[9], 'link': row[10]},
'pharmeasy': {'name': row[11], 'price': row[12], 'link': row[13]}}
for row in items
]
return render_template('saved_items.html', saved_items=saved_items, username=username)
@app.route('/get_saved_items', methods=['GET'])
def get_saved_items():
if 'username' not in session:
return jsonify({'status': 'error', 'message': 'User not logged in'}), 401
username = session['username']
try:
conn = sqlite3.connect('database.db')
cursor = conn.cursor()
cursor.execute('SELECT product_name FROM saved_items WHERE username = ?', (username,))
saved_items = [row[0] for row in cursor.fetchall()] # List of saved product names
except Exception as e:
return jsonify({'status': 'error', 'message': str(e)}), 500
finally:
conn.close()
return jsonify({'status': 'success', 'saved_items': saved_items})
@app.route('/')
def home():
username = session.get('username', 'Login')
return render_template('index.html', username=username)
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
conn = sqlite3.connect('database.db')
cursor = conn.cursor()
cursor.execute('SELECT * FROM users WHERE username = ? AND password = ?', (username, password))
user = cursor.fetchone()
conn.close()
if user:
session['username'] = username
flash('Login successful!', 'success')
return redirect(url_for('home'))
else:
flash('Invalid username or password', 'danger')
return render_template('login.html')
# Route for signup
@app.route('/signup', methods=['GET', 'POST'])
def signup():
if request.method == 'POST':
username = request.form.get('username')
password = request.form.get('password')
confirm_password = request.form.get('password2')
# Check if passwords match
if password != confirm_password:
flash('Confirm Password do not match!', 'error')
return redirect(url_for('signup'))
conn = sqlite3.connect('database.db')
cursor = conn.cursor()
try:
cursor.execute('INSERT INTO users (username, password) VALUES (?, ?)', (username, password))
conn.commit()
flash('Signup successful! Please log in.', 'success')
return redirect(url_for('login'))
except sqlite3.IntegrityError:
flash('Username already exists. Please choose a different one.', 'danger')
finally:
conn.close()
return render_template('signup.html')
@app.route('/result')
def result():
if 'username' not in session:
return redirect(url_for('login'))
username = session['username']
try:
conn = sqlite3.connect('database.db')
cursor = conn.cursor()
# Fetch all saved product names for the current user
cursor.execute('SELECT product_name FROM saved_items WHERE username = ?', (username,))
saved_items = {row[0] for row in cursor.fetchall()} # Use a set for quick lookups
except Exception as e:
flash(f"Error fetching saved items: {e}", 'danger')
saved_items = set()
finally:
conn.close()
# Replace `products` with your logic for fetching the product list
products = [
# Example product structure
{'name': 'Product 1', 'img': 'image_url', 'amazon': {'name': 'Amazon Prod', 'price': '100'}},
{'name': 'Product 2', 'img': 'image_url', 'amazon': {'name': 'Amazon Prod 2', 'price': '200'}},
]
return render_template('results.html', products=products, saved_items=saved_items)
@app.route('/logout')
def logout():
session.pop('username', None)
flash('You have been logged out.', 'info')
return redirect(url_for('home'))
@app.route('/search', methods=['POST'])
def search():
query = request.form['query']
results = search_product(query)
username = session.get('username', None) # Use None if not logged in
# Fetch side effects using your JavaScript logic (moved here for backend processing)
import requests
api_url = f'https://api.fda.gov/drug/event.json?api_key=ah8n0nI6468qpS6cMfqvBM0sdGs4nO1sT3Ie7LjJ&search=patient.drug.medicinalproduct:"{query}"'
try:
response = requests.get(api_url)
data = response.json()
if data.get('results'):
side_effects = [
reaction.get('reactionmeddrapt', 'N/A')
for reaction in data['results'][0].get('patient', {}).get('reaction', [])
]
else:
side_effects = ["No side effects found."]
except Exception as e:
print(f"Error fetching data: {e}")
side_effects = ["Error fetching data. Please try again."]
return render_template('results.html', products=results, query=query, username=username,side_effects=side_effects)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=7860, debug=True)