From f5d66e8c0b14733384e3823fa663197d9623a963 Mon Sep 17 00:00:00 2001 From: Dan Dembinski Date: Mon, 9 Mar 2020 13:30:57 -0400 Subject: [PATCH] Started reworking the login scrip to actually have logic. Can now update individual shows. Added json input to some methods. Finished user delete method. Finished remove feed method. --- main.py | 152 ++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 115 insertions(+), 37 deletions(-) diff --git a/main.py b/main.py index ec9a3c0..7314280 100644 --- a/main.py +++ b/main.py @@ -1,5 +1,5 @@ import feedparser as fp -from flask import Flask, jsonify +from flask import Flask, jsonify, request from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) @@ -34,34 +34,67 @@ class podcasts(db.Model): URL = db.Column(db.Text) artworkURL = db.Column(db.Text) + @app.route('/', methods=['GET']) def index(): + return 'stuff' -@app.route('/login', methods=['GET']) + +@app.route('/login/', methods=['GET']) def login(): + username = 'Dan' password = 'password' - try: - user = users.query.filter_by(username=username).first() - except: - jsonify({'message': 'Login Failed'}) - return jsonify(userid=user.userID) + data = request.get_json() + user = users.query.filter_by(username=data['username']).first() -@app.route('/updateFeeds//', methods={'POST'}) -def updateFeeds(userID): + if data['password'] != user.password: + return jsonify(message='Login Failed') + else: + return jsonify(message='User logged in', userID=user.userID) + +@app.route('/updateFeeds/', methods={'PUT'}) +def updateFeeds(): + + data = request.get_json() showCheck = [] updatedShows = [] + if data['podcastID'] is None or data['podcastID'] == '': # grabs podcast urls from logged in user - pc = podcasts.query.filter_by(userID=userID).all() + pc = podcasts.query.filter_by(userID=data['userID']).all() # loops through the returned urls and parses each rss feed - for show in pc: - parsed = fp.parse(show.URL) - query = shows.query.filter_by(podcastID=show.podcastID).all() + for show in pc: + parsed = fp.parse(show.URL) + query = shows.query.filter_by(userID=data['userID'], podcastID=show.podcastID).all() + for x in query: + showCheck.append(x.link) + count = 0 + for items in parsed['entries']: + url = parsed.entries[count].enclosures[0].get('href') +# after parsing out the show URL we check if it already exists by comparing it against the showCheck array containing all show URLs + if url not in showCheck: + query = shows(podcastID=show.podcastID, userID=data['userID'], link=url) + db.session.add(query) + new_show = {} + new_show['title'] = show.title + updatedShows.append(new_show) + else: + continue + count = count + 1 +# Clear out the array for the next podcast + showCheck = [] + db.session.commit() + return jsonify(newShows=updatedShows) + else: + pc = podcasts.query.filter_by(userID=data['userID'], podcastID=data['podcastID']).first() + parsed = fp.parse(pc.URL) + + query = shows.query.filter_by(userID=data['userID'], podcastID=data['podcastID']).all() for x in query: showCheck.append(x.link) count = 0 @@ -69,42 +102,70 @@ def updateFeeds(userID): url = parsed.entries[count].enclosures[0].get('href') # after parsing out the show URL we check if it already exists by comparing it against the showCheck array containing all show URLs if url not in showCheck: - query = shows(podcastID=show.podcastID, userID=userID, link=url) + query = shows(podcastID=pc.podcastID, userID=data['userID'], link=url) db.session.add(query) db.session.commit() new_show = {} - new_show['title'] = show.title + new_show['title'] = pc.title updatedShows.append(new_show) else: continue count = count + 1 -# Clear out the array for the next podcast - showCheck = [] - return jsonify(newShows=updatedShows) + + return jsonify(singleShow=updatedShows) -@app.route('/addFeed//', methods=['PUT']) -def addFeed(userID,newURL): +@app.route('/addFeed', methods=['POST']) +def addFeed(): count = 0 - - parsed = fp.parse(newURL) + data = request.get_json() + parsed = fp.parse(data['newURL']) title = str(parsed.feed.title) artwork = str(parsed.feed.image) # checks to see if the podcast URL already exists for logged in user and skips it if it has already been imported. # if the show doesn't already exist for the logged in user it gets added - if not podcasts.query.filter_by(URL=newURL, userID=userID).first(): - query = podcasts(userID=userID, title=title, URL=newURL, artworkURL=artwork) + if not podcasts.query.filter_by(URL=data['newURL'], userID=data['userID']).first(): + query = podcasts(userID=data['userID'], title=title, URL=data['newURL'], artworkURL=artwork) db.session.add(query) db.session.commit() # Once the podcast is added we grab the podcastID so we can import the shows - result = podcasts.query.filter_by(URL=newURL, userID=userID).first() + result = podcasts.query.filter_by(URL=data['newURL'], userID=data['userID']).first() # Import the new shows. No need to check if the show URLS already exist since it's new for items in parsed['entries']: itemURL = parsed.entries[count].enclosures[0].get('href') - query = shows(podcastID=result.podcastID, userID=userID, link=itemURL) + query = shows(podcastID=result.podcastID, userID=data['userID'], link=itemURL) + db.session.add(query) + count = count + 1 + db.session.commit() + return jsonify(message='Podcast added') + else: + return jsonify(message='Podcast already exists') + +@app.route('/importFeed/', methods=['POST']) +def importFeed(): + + count = 0 + data = request.get_json() + parsed = fp.parse(data['newURL']) + + title = str(parsed.feed.title) + artwork = str(parsed.feed.image) + +# checks to see if the podcast URL already exists for logged in user and skips it if it has already been imported. +# if the show doesn't already exist for the logged in user it gets added + if not podcasts.query.filter_by(URL=data['newURL'], userID=data['userID']).first(): + query = podcasts(userID=data['userID'], title=title, URL=data['newURL'], artworkURL=artwork) + db.session.add(query) + db.session.commit() +# Once the podcast is added we grab the podcastID so we can import the shows + result = podcasts.query.filter_by(URL=data['newURL'], userID=data['userID']).first() +# Import the new shows. No need to check if the show URLS already exist since it's new + for items in parsed['entries']: + itemURL = parsed.entries[count].enclosures[0].get('href') + query = shows(podcastID=result.podcastID, userID=data['userID'], link=itemURL) db.session.add(query) count = count + 1 db.session.commit() @@ -115,6 +176,7 @@ def addFeed(userID,newURL): @app.route('/listPodcasts//', methods=['GET']) def listPodcasts(userID): + output = [] y = 0 # grabs podcast urls from logged in user @@ -129,15 +191,18 @@ def listPodcasts(userID): return jsonify(shows=output) -@app.route('/register/&&&', methods=['POST']) -def register(username, password, name, email): +@app.route('/register/', methods=['POST']) +def register(): + + data = request.get_json() + # checks to see if the username already exists - if not users.query.filter_by(username=username).first(): - new_user = users(username=username, password=password, name=name, email=email) + if not users.query.filter_by(username=data['username']).first(): + new_user = users(username=data['username'], password=data['password'], name=data['name'], email=data['email']) db.session.add(new_user) db.session.commit() - # Returns the new userID - newID = users.query.filter_by(username=username).first() +# Returns the new userID + newID = users.query.filter_by(username=data['username']).first() return jsonify(userid=newID.userID) # if the username doesn't already exist it will be added else: @@ -154,14 +219,27 @@ def updateTime(userID, podcastID,time): return '' -@app.route('/deleteUser/') +@app.route('/deleteUser//', methods=['DELETE']) def deleteUser(userID): - return'' + + users.query.filter_by(userID=userID).delete() + podcasts.query.filter_by(userID=userID).delete() + shows.query.filter_by(userID=userID).delete() + + db.session.commit() + + return jsonify(message="User deleted") -@app.route('/removeFeed//') -def removeFeed(userID, podcastID): - return '' +@app.route('/removeFeed/') +def removeFeed(): + + data = request.get_json() + + podcasts.query.filter_by(userID=data['userID'], podcastID=data['podcastID']).delete() + shows.query.filter_by(userID=data['userID'], podcastID=data['podcastID']).delete() + + return jsonify(message='Show delete') if __name__ == "__main__": app.run(host='0.0.0.0', debug=True) \ No newline at end of file