Skip to content
This repository was archived by the owner on Nov 2, 2025. It is now read-only.

Commit 9fccbb8

Browse files
authored
Merge pull request #54 from edoardottt/devel
Devel - Add api endpoints
2 parents c1b3ffa + f4b3558 commit 9fccbb8

File tree

2 files changed

+124
-0
lines changed

2 files changed

+124
-0
lines changed

db.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,23 @@ def user_stats(conn, username):
9494
return values
9595

9696

97+
def user_date_stats(conn, username, date):
98+
"""
99+
This function retrieves all the records for a user for a specific day.
100+
"""
101+
sql = """ SELECT * FROM statistics WHERE username = ? AND date = ?"""
102+
cur = conn.cursor()
103+
cur.execute(
104+
sql,
105+
(
106+
username,
107+
date,
108+
),
109+
)
110+
values = cur.fetchall()
111+
return values
112+
113+
97114
def all_stats(conn):
98115
"""
99116
This function retrieves all the records.

server.py

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from flask.templating import render_template
1818
import datetime
1919
import db
20+
from dateutil.parser import parse
2021

2122
app = Flask(__name__, template_folder="templates")
2223
app.config["SECRET_KEY"] = "ILVYilvbthLQETHeteggrgwi2r389"
@@ -123,6 +124,9 @@ def user_dashboard():
123124

124125
@app.route("/api/tweets/<user>")
125126
def api_user_tweets(user):
127+
"""
128+
Total tweets for user <user>.
129+
"""
126130
if not user_ok(user):
127131
return "ERROR: Invalid username."
128132

@@ -140,6 +144,9 @@ def api_user_tweets(user):
140144

141145
@app.route("/api/likes/<user>")
142146
def api_user_likes(user):
147+
"""
148+
Total likes for user <user>.
149+
"""
143150
if not user_ok(user):
144151
return "ERROR: Invalid username."
145152

@@ -157,6 +164,9 @@ def api_user_likes(user):
157164

158165
@app.route("/api/retweets/<user>")
159166
def api_user_retweets(user):
167+
"""
168+
Total retweets for user <user>.
169+
"""
160170
if not user_ok(user):
161171
return "ERROR: Invalid username."
162172

@@ -174,6 +184,9 @@ def api_user_retweets(user):
174184

175185
@app.route("/api/followers/<user>")
176186
def api_user_followers(user):
187+
"""
188+
Latest follower count for user <user>.
189+
"""
177190
if not user_ok(user):
178191
return "ERROR: Invalid username."
179192

@@ -187,5 +200,99 @@ def api_user_followers(user):
187200
return str(result)
188201

189202

203+
def string_to_date(date):
204+
"""
205+
@Input: string
206+
@Output: string
207+
This function tries to convert a string into a date,
208+
if it's not possible return an empty string.
209+
"""
210+
try:
211+
converted = parse(date)
212+
return converted
213+
except Exception:
214+
return ""
215+
216+
217+
@app.route("/api/tweets/<user>/<date>")
218+
def api_user_date_tweets(user, date):
219+
"""
220+
Tweets for user <user> in date <date>.
221+
Date format: YYYY-MM-DD.
222+
"""
223+
if not user_ok(user):
224+
return "ERROR: Invalid username."
225+
if string_to_date(date) == "":
226+
return "ERROR: Invalid date."
227+
# if checks ok ->
228+
conn = db.conn_db()
229+
values = db.user_date_stats(conn, user, date)
230+
if values is None or len(values) == 0:
231+
return "ERROR: No data for this user on this day."
232+
else:
233+
result = values[0][2]
234+
return str(result)
235+
236+
237+
@app.route("/api/likes/<user>/<date>")
238+
def api_user_date_likes(user, date):
239+
"""
240+
Likes for user <user> in date <date>.
241+
Date format: YYYY-MM-DD.
242+
"""
243+
if not user_ok(user):
244+
return "ERROR: Invalid username."
245+
if string_to_date(date) == "":
246+
return "ERROR: Invalid date."
247+
# if checks ok ->
248+
conn = db.conn_db()
249+
values = db.user_date_stats(conn, user, date)
250+
if values is None or len(values) == 0:
251+
return "ERROR: No data for this user on this day."
252+
else:
253+
result = values[0][3]
254+
return str(result)
255+
256+
257+
@app.route("/api/retweets/<user>/<date>")
258+
def api_user_date_retweets(user, date):
259+
"""
260+
Retweets for user <user> in date <date>.
261+
Date format: YYYY-MM-DD.
262+
"""
263+
if not user_ok(user):
264+
return "ERROR: Invalid username."
265+
if string_to_date(date) == "":
266+
return "ERROR: Invalid date."
267+
# if checks ok ->
268+
conn = db.conn_db()
269+
values = db.user_date_stats(conn, user, date)
270+
if values is None or len(values) == 0:
271+
return "ERROR: No data for this user on this day."
272+
else:
273+
result = values[0][4]
274+
return str(result)
275+
276+
277+
@app.route("/api/followers/<user>/<date>")
278+
def api_user_date_followers(user, date):
279+
"""
280+
Followers for user <user> in date <date>.
281+
Date format: YYYY-MM-DD.
282+
"""
283+
if not user_ok(user):
284+
return "ERROR: Invalid username."
285+
if string_to_date(date) == "":
286+
return "ERROR: Invalid date."
287+
# if checks ok ->
288+
conn = db.conn_db()
289+
values = db.user_date_stats(conn, user, date)
290+
if values is None or len(values) == 0:
291+
return "ERROR: No data for this user on this day."
292+
else:
293+
result = values[0][5]
294+
return str(result)
295+
296+
190297
if __name__ == "__main__":
191298
app.run()

0 commit comments

Comments
 (0)