167 lines
5.3 KiB
Python
167 lines
5.3 KiB
Python
import feedparser as fp
|
|
from flask import Flask, jsonify
|
|
from flask_sqlalchemy import SQLAlchemy
|
|
|
|
app = Flask(__name__)
|
|
|
|
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
|
|
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://pc:pc@67.149.14.121:3306/Podcast'
|
|
|
|
db = SQLAlchemy(app)
|
|
|
|
|
|
class users(db.Model):
|
|
userID = db.Column(db.Integer, primary_key=True)
|
|
username = db.Column(db.Text, unique=True)
|
|
password = db.Column(db.Text)
|
|
name = db.Column(db.Text)
|
|
name = db.Column(db.Text)
|
|
email = db.Column(db.Text)
|
|
|
|
class shows(db.Model):
|
|
showID = db.Column(db.Integer, primary_key=True)
|
|
podcastID = db.Column(db.Integer)
|
|
userID = db.Column(db.Integer)
|
|
link = db.Column(db.Text)
|
|
started = db.Column(db.Boolean, default=0)
|
|
position = db.Column(db.Text, default=0)
|
|
|
|
|
|
class podcasts(db.Model):
|
|
podcastID = db.Column(db.Integer, primary_key=True)
|
|
userID = db.Column(db.Integer)
|
|
title = db.Column(db.Text)
|
|
URL = db.Column(db.Text)
|
|
artworkURL = db.Column(db.Text)
|
|
|
|
@app.route('/', methods=['GET'])
|
|
def index():
|
|
return 'stuff'
|
|
|
|
@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)
|
|
|
|
|
|
@app.route('/updateFeeds/<int:userID>/', methods={'POST'})
|
|
def updateFeeds(userID):
|
|
showCheck = []
|
|
updatedShows = []
|
|
|
|
# grabs podcast urls from logged in user
|
|
pc = podcasts.query.filter_by(userID=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 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=userID, link=url)
|
|
db.session.add(query)
|
|
db.session.commit()
|
|
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 = []
|
|
return jsonify(newShows=updatedShows)
|
|
|
|
|
|
@app.route('/addFeed/<int:userID>/<path:newURL>', methods=['PUT'])
|
|
def addFeed(userID,newURL):
|
|
|
|
count = 0
|
|
|
|
parsed = fp.parse(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)
|
|
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()
|
|
# 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)
|
|
db.session.add(query)
|
|
count = count + 1
|
|
db.session.commit()
|
|
return jsonify(message='Podcast added')
|
|
else:
|
|
return jsonify(message='Podcast already exists')
|
|
|
|
|
|
@app.route('/listPodcasts/<int:userID>/', methods=['GET'])
|
|
def listPodcasts(userID):
|
|
output = []
|
|
y = 0
|
|
# grabs podcast urls from logged in user
|
|
pc = podcasts.query.filter_by(userID=userID).all()
|
|
|
|
for each in pc:
|
|
result = {}
|
|
result['podcastID'] = each.podcastID
|
|
result['Title'] = each.title
|
|
output.append(result)
|
|
|
|
return jsonify(shows=output)
|
|
|
|
|
|
@app.route('/register/<string:username>&<string:password>&<string:name>&<string:email>', methods=['POST'])
|
|
def register(username, password, name, email):
|
|
# 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)
|
|
db.session.add(new_user)
|
|
db.session.commit()
|
|
# Returns the new userID
|
|
newID = users.query.filter_by(username=username).first()
|
|
return jsonify(userid=newID.userID)
|
|
# if the username doesn't already exist it will be added
|
|
else:
|
|
return jsonify(message='Username already exists')
|
|
|
|
|
|
@app.route('/updateStatus/<int:userID>/<int:podcastID>/<int:status>')
|
|
def updateStatus(userID, podcastID, status):
|
|
return ''
|
|
|
|
|
|
@app.route('/updateTime/<int:userID>/<int:podcastID>/<int:time>')
|
|
def updateTime(userID, podcastID,time):
|
|
return ''
|
|
|
|
|
|
@app.route('/deleteUser/<int:userID>')
|
|
def deleteUser(userID):
|
|
return''
|
|
|
|
|
|
@app.route('/removeFeed/<int:userID>/<int:podcastID>')
|
|
def removeFeed(userID, podcastID):
|
|
return ''
|
|
|
|
if __name__ == "__main__":
|
|
app.run(host='0.0.0.0', debug=True) |