harshdhane commited on
Commit
a368a1a
·
verified ·
1 Parent(s): 64a66f1

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +242 -242
app.py CHANGED
@@ -1,242 +1,242 @@
1
- from flask import Flask, request, render_template, redirect, url_for, session, flash, jsonify
2
- from scraper import search_product # Imports combined scraper functions
3
- import sqlite3
4
-
5
- app = Flask(__name__)
6
- app.secret_key = 'your_secret_key'
7
-
8
- def init_db():
9
- conn = sqlite3.connect('database.db')
10
- cursor = conn.cursor()
11
- # Create users table
12
- cursor.execute('''CREATE TABLE IF NOT EXISTS users (
13
- id INTEGER PRIMARY KEY AUTOINCREMENT,
14
- username TEXT NOT NULL UNIQUE,
15
- password TEXT NOT NULL
16
- )''')
17
-
18
- cursor.execute('''CREATE TABLE IF NOT EXISTS saved_items (
19
- id INTEGER PRIMARY KEY AUTOINCREMENT,
20
- username TEXT NOT NULL,
21
- product_name TEXT NOT NULL,
22
- product_img TEXT,
23
- amazon_name TEXT,
24
- amazon_price TEXT,
25
- amazon_link TEXT,
26
- one_mg_name TEXT,
27
- one_mg_price TEXT,
28
- one_mg_link TEXT,
29
- netmeds_name TEXT,
30
- netmeds_price TEXT,
31
- netmeds_link TEXT,
32
- pharmeasy_name TEXT,
33
- pharmeasy_price TEXT,
34
- pharmeasy_link TEXT,
35
- FOREIGN KEY(username) REFERENCES users(username)
36
- )''')
37
- conn.commit()
38
- conn.close()
39
-
40
- init_db()
41
-
42
- @app.route('/save_item', methods=['POST'])
43
- def save_item():
44
- if 'username' not in session:
45
- return jsonify({'status': 'error', 'message': 'User not logged in'}), 401
46
-
47
- username = session['username']
48
- data = request.json
49
-
50
- try:
51
- conn = sqlite3.connect('database.db')
52
- cursor = conn.cursor()
53
-
54
- # Check if the item is already saved
55
- cursor.execute('''
56
- SELECT id FROM saved_items
57
- WHERE username = ? AND product_name = ? AND amazon_link = ?
58
- ''', (username, data['name'], data.get('amazon_link')))
59
- existing_item = cursor.fetchone()
60
-
61
- if existing_item:
62
- return jsonify({'status': 'error', 'message': 'Item already saved'})
63
-
64
- # Insert the item if not already saved
65
- cursor.execute('''
66
- INSERT INTO saved_items (username, product_name, product_img, amazon_name, amazon_price, amazon_link,
67
- one_mg_name, one_mg_price, one_mg_link,
68
- netmeds_name, netmeds_price, netmeds_link,
69
- pharmeasy_name, pharmeasy_price, pharmeasy_link)
70
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
71
- ''', (username, data['name'], data['img'],
72
- data.get('amazon_name'), data.get('amazon_price'), data.get('amazon_link'),
73
- data.get('one_mg_name'), data.get('one_mg_price'), data.get('one_mg_link'),
74
- data.get('netmeds_name'), data.get('netmeds_price'), data.get('netmeds_link'),
75
- data.get('pharmeasy_name'), data.get('pharmeasy_price'), data.get('pharmeasy_link')))
76
- conn.commit()
77
- except Exception as e:
78
- return jsonify({'status': 'error', 'message': str(e)}), 500
79
- finally:
80
- conn.close()
81
-
82
- return jsonify({'status': 'success', 'message': 'Item saved successfully'})
83
-
84
-
85
- @app.route('/saved_items')
86
- def saved_items():
87
- if 'username' not in session:
88
- return redirect(url_for('login'))
89
-
90
- username = session['username']
91
- conn = sqlite3.connect('database.db')
92
- cursor = conn.cursor()
93
- cursor.execute('''
94
- SELECT product_name, product_img, amazon_name, amazon_price, amazon_link,
95
- one_mg_name, one_mg_price, one_mg_link,
96
- netmeds_name, netmeds_price, netmeds_link,
97
- pharmeasy_name, pharmeasy_price, pharmeasy_link
98
- FROM saved_items WHERE username = ?
99
- ''', (username,))
100
- items = cursor.fetchall()
101
- conn.close()
102
-
103
- saved_items = [
104
- {'name': row[0], 'img': row[1],
105
- 'amazon': {'name': row[2], 'price': row[3], 'link': row[4]},
106
- 'one_mg': {'name': row[5], 'price': row[6], 'link': row[7]},
107
- 'netmeds': {'name': row[8], 'price': row[9], 'link': row[10]},
108
- 'pharmeasy': {'name': row[11], 'price': row[12], 'link': row[13]}}
109
- for row in items
110
- ]
111
- return render_template('saved_items.html', saved_items=saved_items, username=username)
112
-
113
- @app.route('/get_saved_items', methods=['GET'])
114
- def get_saved_items():
115
- if 'username' not in session:
116
- return jsonify({'status': 'error', 'message': 'User not logged in'}), 401
117
-
118
- username = session['username']
119
-
120
- try:
121
- conn = sqlite3.connect('database.db')
122
- cursor = conn.cursor()
123
- cursor.execute('SELECT product_name FROM saved_items WHERE username = ?', (username,))
124
- saved_items = [row[0] for row in cursor.fetchall()] # List of saved product names
125
- except Exception as e:
126
- return jsonify({'status': 'error', 'message': str(e)}), 500
127
- finally:
128
- conn.close()
129
-
130
- return jsonify({'status': 'success', 'saved_items': saved_items})
131
-
132
-
133
- @app.route('/')
134
- def home():
135
- username = session.get('username', 'Login')
136
- return render_template('index.html', username=username)
137
-
138
- @app.route('/login', methods=['GET', 'POST'])
139
- def login():
140
- if request.method == 'POST':
141
- username = request.form['username']
142
- password = request.form['password']
143
- conn = sqlite3.connect('database.db')
144
- cursor = conn.cursor()
145
- cursor.execute('SELECT * FROM users WHERE username = ? AND password = ?', (username, password))
146
- user = cursor.fetchone()
147
- conn.close()
148
- if user:
149
- session['username'] = username
150
- flash('Login successful!', 'success')
151
- return redirect(url_for('home'))
152
- else:
153
- flash('Invalid username or password', 'danger')
154
- return render_template('login.html')
155
-
156
- # Route for signup
157
- @app.route('/signup', methods=['GET', 'POST'])
158
- def signup():
159
- if request.method == 'POST':
160
- username = request.form.get('username')
161
- password = request.form.get('password')
162
- confirm_password = request.form.get('password2')
163
-
164
- # Check if passwords match
165
- if password != confirm_password:
166
- flash('Confirm Password do not match!', 'error')
167
- return redirect(url_for('signup'))
168
- conn = sqlite3.connect('database.db')
169
- cursor = conn.cursor()
170
- try:
171
- cursor.execute('INSERT INTO users (username, password) VALUES (?, ?)', (username, password))
172
- conn.commit()
173
- flash('Signup successful! Please log in.', 'success')
174
- return redirect(url_for('login'))
175
- except sqlite3.IntegrityError:
176
- flash('Username already exists. Please choose a different one.', 'danger')
177
- finally:
178
- conn.close()
179
- return render_template('signup.html')
180
-
181
- @app.route('/result')
182
- def result():
183
- if 'username' not in session:
184
- return redirect(url_for('login'))
185
-
186
- username = session['username']
187
-
188
- try:
189
- conn = sqlite3.connect('database.db')
190
- cursor = conn.cursor()
191
- # Fetch all saved product names for the current user
192
- cursor.execute('SELECT product_name FROM saved_items WHERE username = ?', (username,))
193
- saved_items = {row[0] for row in cursor.fetchall()} # Use a set for quick lookups
194
- except Exception as e:
195
- flash(f"Error fetching saved items: {e}", 'danger')
196
- saved_items = set()
197
- finally:
198
- conn.close()
199
-
200
- # Replace `products` with your logic for fetching the product list
201
- products = [
202
- # Example product structure
203
- {'name': 'Product 1', 'img': 'image_url', 'amazon': {'name': 'Amazon Prod', 'price': '100'}},
204
- {'name': 'Product 2', 'img': 'image_url', 'amazon': {'name': 'Amazon Prod 2', 'price': '200'}},
205
- ]
206
-
207
- return render_template('results.html', products=products, saved_items=saved_items)
208
-
209
-
210
- @app.route('/logout')
211
- def logout():
212
- session.pop('username', None)
213
- flash('You have been logged out.', 'info')
214
- return redirect(url_for('home'))
215
-
216
- @app.route('/search', methods=['POST'])
217
- def search():
218
- query = request.form['query']
219
- results = search_product(query)
220
- username = session.get('username', None) # Use None if not logged in
221
-
222
- # Fetch side effects using your JavaScript logic (moved here for backend processing)
223
- import requests
224
- api_url = f'https://api.fda.gov/drug/event.json?api_key=ah8n0nI6468qpS6cMfqvBM0sdGs4nO1sT3Ie7LjJ&search=patient.drug.medicinalproduct:"{query}"'
225
- try:
226
- response = requests.get(api_url)
227
- data = response.json()
228
- if data.get('results'):
229
- side_effects = [
230
- reaction.get('reactionmeddrapt', 'N/A')
231
- for reaction in data['results'][0].get('patient', {}).get('reaction', [])
232
- ]
233
- else:
234
- side_effects = ["No side effects found."]
235
- except Exception as e:
236
- print(f"Error fetching data: {e}")
237
- side_effects = ["Error fetching data. Please try again."]
238
-
239
- return render_template('results.html', products=results, query=query, username=username,side_effects=side_effects)
240
-
241
- if __name__ == '__main__':
242
- app.run(host='0.0.0.0', port=5000, debug=True)
 
1
+ from flask import Flask, request, render_template, redirect, url_for, session, flash, jsonify
2
+ from scraper import search_product # Imports combined scraper functions
3
+ import sqlite3
4
+
5
+ app = Flask(__name__)
6
+ app.secret_key = 'your_secret_key'
7
+
8
+ def init_db():
9
+ conn = sqlite3.connect('database.db')
10
+ cursor = conn.cursor()
11
+ # Create users table
12
+ cursor.execute('''CREATE TABLE IF NOT EXISTS users (
13
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
14
+ username TEXT NOT NULL UNIQUE,
15
+ password TEXT NOT NULL
16
+ )''')
17
+
18
+ cursor.execute('''CREATE TABLE IF NOT EXISTS saved_items (
19
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
20
+ username TEXT NOT NULL,
21
+ product_name TEXT NOT NULL,
22
+ product_img TEXT,
23
+ amazon_name TEXT,
24
+ amazon_price TEXT,
25
+ amazon_link TEXT,
26
+ one_mg_name TEXT,
27
+ one_mg_price TEXT,
28
+ one_mg_link TEXT,
29
+ netmeds_name TEXT,
30
+ netmeds_price TEXT,
31
+ netmeds_link TEXT,
32
+ pharmeasy_name TEXT,
33
+ pharmeasy_price TEXT,
34
+ pharmeasy_link TEXT,
35
+ FOREIGN KEY(username) REFERENCES users(username)
36
+ )''')
37
+ conn.commit()
38
+ conn.close()
39
+
40
+ init_db()
41
+
42
+ @app.route('/save_item', methods=['POST'])
43
+ def save_item():
44
+ if 'username' not in session:
45
+ return jsonify({'status': 'error', 'message': 'User not logged in'}), 401
46
+
47
+ username = session['username']
48
+ data = request.json
49
+
50
+ try:
51
+ conn = sqlite3.connect('database.db')
52
+ cursor = conn.cursor()
53
+
54
+ # Check if the item is already saved
55
+ cursor.execute('''
56
+ SELECT id FROM saved_items
57
+ WHERE username = ? AND product_name = ? AND amazon_link = ?
58
+ ''', (username, data['name'], data.get('amazon_link')))
59
+ existing_item = cursor.fetchone()
60
+
61
+ if existing_item:
62
+ return jsonify({'status': 'error', 'message': 'Item already saved'})
63
+
64
+ # Insert the item if not already saved
65
+ cursor.execute('''
66
+ INSERT INTO saved_items (username, product_name, product_img, amazon_name, amazon_price, amazon_link,
67
+ one_mg_name, one_mg_price, one_mg_link,
68
+ netmeds_name, netmeds_price, netmeds_link,
69
+ pharmeasy_name, pharmeasy_price, pharmeasy_link)
70
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
71
+ ''', (username, data['name'], data['img'],
72
+ data.get('amazon_name'), data.get('amazon_price'), data.get('amazon_link'),
73
+ data.get('one_mg_name'), data.get('one_mg_price'), data.get('one_mg_link'),
74
+ data.get('netmeds_name'), data.get('netmeds_price'), data.get('netmeds_link'),
75
+ data.get('pharmeasy_name'), data.get('pharmeasy_price'), data.get('pharmeasy_link')))
76
+ conn.commit()
77
+ except Exception as e:
78
+ return jsonify({'status': 'error', 'message': str(e)}), 500
79
+ finally:
80
+ conn.close()
81
+
82
+ return jsonify({'status': 'success', 'message': 'Item saved successfully'})
83
+
84
+
85
+ @app.route('/saved_items')
86
+ def saved_items():
87
+ if 'username' not in session:
88
+ return redirect(url_for('login'))
89
+
90
+ username = session['username']
91
+ conn = sqlite3.connect('database.db')
92
+ cursor = conn.cursor()
93
+ cursor.execute('''
94
+ SELECT product_name, product_img, amazon_name, amazon_price, amazon_link,
95
+ one_mg_name, one_mg_price, one_mg_link,
96
+ netmeds_name, netmeds_price, netmeds_link,
97
+ pharmeasy_name, pharmeasy_price, pharmeasy_link
98
+ FROM saved_items WHERE username = ?
99
+ ''', (username,))
100
+ items = cursor.fetchall()
101
+ conn.close()
102
+
103
+ saved_items = [
104
+ {'name': row[0], 'img': row[1],
105
+ 'amazon': {'name': row[2], 'price': row[3], 'link': row[4]},
106
+ 'one_mg': {'name': row[5], 'price': row[6], 'link': row[7]},
107
+ 'netmeds': {'name': row[8], 'price': row[9], 'link': row[10]},
108
+ 'pharmeasy': {'name': row[11], 'price': row[12], 'link': row[13]}}
109
+ for row in items
110
+ ]
111
+ return render_template('saved_items.html', saved_items=saved_items, username=username)
112
+
113
+ @app.route('/get_saved_items', methods=['GET'])
114
+ def get_saved_items():
115
+ if 'username' not in session:
116
+ return jsonify({'status': 'error', 'message': 'User not logged in'}), 401
117
+
118
+ username = session['username']
119
+
120
+ try:
121
+ conn = sqlite3.connect('database.db')
122
+ cursor = conn.cursor()
123
+ cursor.execute('SELECT product_name FROM saved_items WHERE username = ?', (username,))
124
+ saved_items = [row[0] for row in cursor.fetchall()] # List of saved product names
125
+ except Exception as e:
126
+ return jsonify({'status': 'error', 'message': str(e)}), 500
127
+ finally:
128
+ conn.close()
129
+
130
+ return jsonify({'status': 'success', 'saved_items': saved_items})
131
+
132
+
133
+ @app.route('/')
134
+ def home():
135
+ username = session.get('username', 'Login')
136
+ return render_template('index.html', username=username)
137
+
138
+ @app.route('/login', methods=['GET', 'POST'])
139
+ def login():
140
+ if request.method == 'POST':
141
+ username = request.form['username']
142
+ password = request.form['password']
143
+ conn = sqlite3.connect('database.db')
144
+ cursor = conn.cursor()
145
+ cursor.execute('SELECT * FROM users WHERE username = ? AND password = ?', (username, password))
146
+ user = cursor.fetchone()
147
+ conn.close()
148
+ if user:
149
+ session['username'] = username
150
+ flash('Login successful!', 'success')
151
+ return redirect(url_for('home'))
152
+ else:
153
+ flash('Invalid username or password', 'danger')
154
+ return render_template('login.html')
155
+
156
+ # Route for signup
157
+ @app.route('/signup', methods=['GET', 'POST'])
158
+ def signup():
159
+ if request.method == 'POST':
160
+ username = request.form.get('username')
161
+ password = request.form.get('password')
162
+ confirm_password = request.form.get('password2')
163
+
164
+ # Check if passwords match
165
+ if password != confirm_password:
166
+ flash('Confirm Password do not match!', 'error')
167
+ return redirect(url_for('signup'))
168
+ conn = sqlite3.connect('database.db')
169
+ cursor = conn.cursor()
170
+ try:
171
+ cursor.execute('INSERT INTO users (username, password) VALUES (?, ?)', (username, password))
172
+ conn.commit()
173
+ flash('Signup successful! Please log in.', 'success')
174
+ return redirect(url_for('login'))
175
+ except sqlite3.IntegrityError:
176
+ flash('Username already exists. Please choose a different one.', 'danger')
177
+ finally:
178
+ conn.close()
179
+ return render_template('signup.html')
180
+
181
+ @app.route('/result')
182
+ def result():
183
+ if 'username' not in session:
184
+ return redirect(url_for('login'))
185
+
186
+ username = session['username']
187
+
188
+ try:
189
+ conn = sqlite3.connect('database.db')
190
+ cursor = conn.cursor()
191
+ # Fetch all saved product names for the current user
192
+ cursor.execute('SELECT product_name FROM saved_items WHERE username = ?', (username,))
193
+ saved_items = {row[0] for row in cursor.fetchall()} # Use a set for quick lookups
194
+ except Exception as e:
195
+ flash(f"Error fetching saved items: {e}", 'danger')
196
+ saved_items = set()
197
+ finally:
198
+ conn.close()
199
+
200
+ # Replace `products` with your logic for fetching the product list
201
+ products = [
202
+ # Example product structure
203
+ {'name': 'Product 1', 'img': 'image_url', 'amazon': {'name': 'Amazon Prod', 'price': '100'}},
204
+ {'name': 'Product 2', 'img': 'image_url', 'amazon': {'name': 'Amazon Prod 2', 'price': '200'}},
205
+ ]
206
+
207
+ return render_template('results.html', products=products, saved_items=saved_items)
208
+
209
+
210
+ @app.route('/logout')
211
+ def logout():
212
+ session.pop('username', None)
213
+ flash('You have been logged out.', 'info')
214
+ return redirect(url_for('home'))
215
+
216
+ @app.route('/search', methods=['POST'])
217
+ def search():
218
+ query = request.form['query']
219
+ results = search_product(query)
220
+ username = session.get('username', None) # Use None if not logged in
221
+
222
+ # Fetch side effects using your JavaScript logic (moved here for backend processing)
223
+ import requests
224
+ api_url = f'https://api.fda.gov/drug/event.json?api_key=ah8n0nI6468qpS6cMfqvBM0sdGs4nO1sT3Ie7LjJ&search=patient.drug.medicinalproduct:"{query}"'
225
+ try:
226
+ response = requests.get(api_url)
227
+ data = response.json()
228
+ if data.get('results'):
229
+ side_effects = [
230
+ reaction.get('reactionmeddrapt', 'N/A')
231
+ for reaction in data['results'][0].get('patient', {}).get('reaction', [])
232
+ ]
233
+ else:
234
+ side_effects = ["No side effects found."]
235
+ except Exception as e:
236
+ print(f"Error fetching data: {e}")
237
+ side_effects = ["Error fetching data. Please try again."]
238
+
239
+ return render_template('results.html', products=results, query=query, username=username,side_effects=side_effects)
240
+
241
+ if __name__ == '__main__':
242
+ app.run(host='0.0.0.0', port=7860, debug=True)