diff --git a/main.py b/main.py
index e094eaf..6b620e1 100644
--- a/main.py
+++ b/main.py
@@ -1,26 +1,35 @@
import opml
# import sqlalchemy as db
import database as db
+import feedparser as fp
userID = None
def podcastImport (userID):
- print(userID)
- podcasts = db.sql.Table('Users', db.metadata, autoload=True, autoload_with=db.engine)
+
outline = opml.parse("podcast_republic_podcasts.opml")
+#get the number of shows from the OPML file
x = len(outline)
y=0
+#loops through each podcast and parses out relevant information
while y < x:
title = outline[y].title
url = outline[y].xmlUrl
artwork = outline[y].pr_artwork
desc = outline[y].pr_desc
- query = """insert into podcasts""""(userID, title, URL, desc, artworkURL values (""" + userID + """,""" + title + """,""" + url + """,""" + desc + """,""" + artwork + """)"""
- # print(str(query))
- db.con.execute(query)
+#checks to see if the podcast URL already exists for logged in user and skips it if it has already been imported.
+ query = db.sql.text("""select URL from Podcasts where URL = \"%s\" and userID = %i""" % (url, userID))
+ exists = db.con.execute(query).fetchone()
+#if the show doesn't already exist for the logged in user it gets added
+ if exists is None or exists[0] != url:
+ query = db.sql.text("""insert into Podcasts (userID, title, URL, artworkURL) values(%i, \"%s\", \"%s\", \"%s\") """ % (userID, title, url, artwork))
+ db.con.execute(query)
+ print("%s added" % title)
+ else:
+ print("%s already exists" % title)
y=y+1
@@ -29,9 +38,7 @@ def login():
password = 'password'
- user = db.sql.Table('Users', db.metadata, autoload=True, autoload_with=db.engine)
-
- query = db.sql.text(""" select userID from Users where username = \"""" + username+"""\"""")
+ query = db.sql.text(""" select userID from Users where username = \'%s\'""" % username)
result = db.con.execute(query).fetchone()
print(result[0])
@@ -39,10 +46,71 @@ def login():
return result[0]
-while True:
- print("user " + str(userID))
+def updateFeeds(userID):
+ showCheck = []
+#grabs podcast urls from logged in user
+ query = db.sql.text("""select URL, podcastID, title from Podcasts where userID = %i""" % userID)
+ shows = db.con.execute(query).fetchall()
- print("1. Login \n 2. Upload")
+#loops through the returned urls and parses each rss feed
+ y=0
+ for x in shows:
+#Here we're grabbing all the show urls for each podcast and moving them into a separate array.
+ query = db.sql.text("""select link from Shows where userID = %i and podcastID = %i""" % (userID, shows[y][1]))
+ showGrab = db.con.execute(query).fetchall()
+ z=0
+ for each in showGrab:
+ showCheck.append(showGrab[z][0])
+ z=z+1
+
+ parsed = fp.parse(shows[y][0])
+ 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 = db.sql.text("""insert into Shows (podcastID, userID, link) values (%i, %i, \"%s\")""" % (shows[y][1], userID, url))
+ db.con.execute(query)
+ else:
+ continue
+ count = count + 1
+ print("%s has been updated" % shows[y][2])
+ y=y+1
+ showCheck = [] #Clear out the array for the next podcast
+
+def addFeed(userID):
+ newURL = input("Enter Feed URL: ")
+ count = 0
+
+ parsed = fp.parse(newURL)
+
+ title = parsed.feed.title
+ artwork = 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.
+ query = db.sql.text("""select URL from Podcasts where URL = \"%s\" and userID = %i""" % (newURL, userID))
+ exists = db.con.execute(query).fetchone()
+# if the show doesn't already exist for the logged in user it gets added
+ if exists is None or exists[0] != newURL:
+ query = db.sql.text("""insert into Podcasts (userID, title, URL, artworkURL) values(%i, \"%s\", \"%s\", \"%s\") """ % (userID, title, newURL, artwork))
+ db.con.execute(query)
+ print("%s added" % title)
+# Once the podcast is added we grab the podcastID so we can import the shows
+ query = db.sql.text("""select podcastID from Podcasts where userID = %i and URL = \"%s\"""" % (userID, newURL))
+ result = db.con.execute(query).fetchone()
+ podcastID = result[0]
+
+# 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 = db.sql.text("""insert into Shows (podcastID, userID, link) values (%i, %i, \"%s\")""" % (podcastID, userID, itemURL))
+ db.con.execute(query)
+ count = count + 1
+ else:
+ print("%s already exists" % title)
+
+while True:
+ print("1. Login\n2. Upload\n3. Update feeds\n4. Add Feed\n9. Exit\n")
val = input(">>>")
if val == "1":
userID = login()
@@ -51,3 +119,15 @@ while True:
print("Please login first")
else:
podcastImport(userID)
+ elif val == "3":
+ if userID is None or userID == '':
+ print("Please login first")
+ else:
+ updateFeeds(userID)
+ elif val == "4":
+ if userID is None or userID == '':
+ print("Please login first")
+ else:
+ addFeed(userID)
+ elif val == "9":
+ exit()
\ No newline at end of file
diff --git a/podcast_republic_podcasts.opml b/podcast_republic_podcasts.opml
index a4e8533..64828c1 100644
--- a/podcast_republic_podcasts.opml
+++ b/podcast_republic_podcasts.opml
@@ -1 +1,19 @@
-Podcast Republic Subscribed Feeds
\ No newline at end of file
+Podcast Republic Subscribed Feeds
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/requirements.txt b/requirements.txt
index b557070..2139b25 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,3 +1,5 @@
-OPML
-sqlalchemy
-pymysql
\ No newline at end of file
+feedparser==5.2.1
+lxml==4.5.0
+opml==0.5
+PyMySQL==0.9.3
+SQLAlchemy==1.3.13