diff options
-rwxr-xr-x | PodWeb.py | 66 | ||||
-rw-r--r-- | README.md (renamed from readme.md) | 0 |
2 files changed, 55 insertions, 11 deletions
diff --git a/PodWeb.py b/PodWeb.py index 753e479..5adc86e 100755 --- a/PodWeb.py +++ b/PodWeb.py @@ -133,9 +133,10 @@ class PodWeb: "description" TEXT, "img" TEXT, "url" TEXT, - "season" TEXT, + "website" TEXT, + "season" INTEGER, PRIMARY KEY("guid") - )""" + )""" ) self.data.execute( """CREATE TABLE IF NOT EXISTS "downloads" ( @@ -143,16 +144,14 @@ class PodWeb: "filepath" TEXT NOT NULL UNIQUE, PRIMARY KEY("guid"), FOREIGN KEY("guid") REFERENCES "episodes"("guid") - )""" + )""" ) self.data.execute( """CREATE TABLE IF NOT EXISTS "podcasts" ( - "url" TEXT NOT NULL UNIQUE, - "title" TEXT, - "image" TEXT, - "episodes" TEXT, - PRIMARY KEY("url) - )""" + "url" TEXT NOT NULL UNIQUE, + "episodes" TEXT, + PRIMARY KEY("url) + )""" ) def _load_config(self) -> None: @@ -237,8 +236,53 @@ class PodWeb: self.servers.append(new_feed) self._update_serverlist() - def sync_episodes(self) -> None: - pass + def sync_episodes(self, feedurl: str) -> None: + feedurl = podcastparser.normalize_feed_url(feedurl) + parsed = podcastparser.parse(feedurl, urllib.request.urlopen(feedurl)) + if parsed.get("newLocation") != None: + new_feedurl = podcastparser.normalize_feed_url(parsed.get("newLocation")) + for i in self.servers: + if i["url"] == feedurl: + i["url"] = new_feedurl + feedurl = new_feedurl + self._update_serverlist() + break + for i in parsed["episodes"]: + enclosure_list = sorted(i["enclosures"], key=lambda d: d["file_size"]) + mime = True + j = 0 + size = len(enclosure_list) + while mime and j < size: + episode_url = enclosure_list[j]["url"] + if enclosure_list[j]["mime_type"] == "audio/mpeg": + mime = False + else: + ++j + self.data.execute( + """INSERT OR REPLACE INTO "episodes" VALUES ( + :GUID, + :TITLE, + :DESCRIPTION, + :IMG, + :URL, + :WEBSITE, + :SEASON + );""", + { + "GUID": i["guid"], + "TITLE": i["title"], + "DESCRIPTION": i["description"], + "IMG": i["episode_art_url"], + "URL": episode_url, + "WEBSITE": i["link"], + "SEASON": i["number"], + }, + ) + self.data.execute( + 'UPDATE "podcasts" WHERE "url" = :URL SET "episodes" += :EPSTRING', + {"EPSTRING": f";{i['guid']}"}, + ) + self.con.commit() def import_opml(self, opml_path: str) -> None: body = xmlet.parse(source=opml_path).getroot().find("body") diff --git a/readme.md b/README.md index cce4573..cce4573 100644 --- a/readme.md +++ b/README.md |