1717from flask .templating import render_template
1818import datetime
1919import db
20+ from dateutil .parser import parse
2021
2122app = Flask (__name__ , template_folder = "templates" )
2223app .config ["SECRET_KEY" ] = "ILVYilvbthLQETHeteggrgwi2r389"
@@ -123,6 +124,9 @@ def user_dashboard():
123124
124125@app .route ("/api/tweets/<user>" )
125126def 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>" )
142146def 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>" )
159166def 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>" )
176186def 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+
190297if __name__ == "__main__" :
191298 app .run ()
0 commit comments