ittwtxt support. - zs - Zeitungsschau rss to email converter Err gopher.r-36.net 70 hgit clone git://r-36.net/zs URL:git://r-36.net/zs gopher.r-36.net 70 1Log /scm/zs//log.gph gopher.r-36.net 70 1Files /scm/zs//files.gph gopher.r-36.net 70 1Refs /scm/zs//refs.gph gopher.r-36.net 70 1LICENSE /scm/zs//file/LICENSE.gph gopher.r-36.net 70 i--- Err gopher.r-36.net 70 1commit 19899f9da5895c6493f499e00cd0feec00732f1f /scm/zs//commit/19899f9da5895c6493f499e00cd0feec00732f1f.gph gopher.r-36.net 70 1parent 96b774b6b2233be6b3959e9ceceacdcc91463105 /scm/zs//commit/96b774b6b2233be6b3959e9ceceacdcc91463105.gph gopher.r-36.net 70 hAuthor: Christoph Lohmann <20h@r-36.net> URL:mailto:20h@r-36.net gopher.r-36.net 70 iDate: Fri, 8 Sep 2017 13:21:59 +0200 Err gopher.r-36.net 70 i Err gopher.r-36.net 70 ittwtxt support. Err gopher.r-36.net 70 i Err gopher.r-36.net 70 iDiffstat: Err gopher.r-36.net 70 i zeitungsschau/feed.py | 43 ++++++++++++++++++++++++++++++ Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i1 file changed, 43 insertions(+), 0 deletions(-) Err gopher.r-36.net 70 i--- Err gopher.r-36.net 70 1diff --git a/zeitungsschau/feed.py b/zeitungsschau/feed.py /scm/zs//file/zeitungsschau/feed.py.gph gopher.r-36.net 70 it@@ -40,6 +40,45 @@ def parsexml(astr): Err gopher.r-36.net 70 i # Throw XML parsing errors so we can blame the feed authors. Err gopher.r-36.net 70 i return xml Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i+def parsetwtxtfeed(astr, uri): Err gopher.r-36.net 70 i+ feed = {} Err gopher.r-36.net 70 i+ articles = [] Err gopher.r-36.net 70 i+ now = datetime.now(pytz.utc) Err gopher.r-36.net 70 i+ now = now.replace(hour=20, minute=20, second=20, microsecond=20) Err gopher.r-36.net 70 i+ Err gopher.r-36.net 70 i+ feed["title"] = uri Err gopher.r-36.net 70 i+ feed["link"] = uri Err gopher.r-36.net 70 i+ feed["updated"] = now Err gopher.r-36.net 70 i+ Err gopher.r-36.net 70 i+ lines = astr.split("\n"); Err gopher.r-36.net 70 i+ for line in lines: Err gopher.r-36.net 70 i+ # People already reinterpret the standard. :( Err gopher.r-36.net 70 i+ if len(line) == 0: Err gopher.r-36.net 70 i+ continue Err gopher.r-36.net 70 i+ if line[0] == "#": Err gopher.r-36.net 70 i+ continue Err gopher.r-36.net 70 i+ Err gopher.r-36.net 70 i+ createdtxt, ltext = line.split("\t", 1) Err gopher.r-36.net 70 i+ created = parseiso(createdtxt, now) Err gopher.r-36.net 70 i+ Err gopher.r-36.net 70 i+ article = {} Err gopher.r-36.net 70 i+ article["id"] = createdtxt Err gopher.r-36.net 70 i+ article["title"] = ltext Err gopher.r-36.net 70 i+ article["text"] = ltext Err gopher.r-36.net 70 i+ article["uuid"] = createdtxt Err gopher.r-36.net 70 i+ article["updated"] = created Err gopher.r-36.net 70 i+ Err gopher.r-36.net 70 i+ if article["updated"] == now: Err gopher.r-36.net 70 i+ article["uuid"] = "" Err gopher.r-36.net 70 i+ else: Err gopher.r-36.net 70 i+ article["uuid"] = "%s" % (article["updated"]) Err gopher.r-36.net 70 i+ Err gopher.r-36.net 70 i+ articles.append(article) Err gopher.r-36.net 70 i+ Err gopher.r-36.net 70 i+ feed["articles"] = articles Err gopher.r-36.net 70 i+ Err gopher.r-36.net 70 i+ return feed Err gopher.r-36.net 70 i+ Err gopher.r-36.net 70 i def parsejsonfeed(astr): Err gopher.r-36.net 70 i js = json.loads(astr) Err gopher.r-36.net 70 i Err gopher.r-36.net 70 it@@ -370,9 +409,13 @@ def fetch(uri): Err gopher.r-36.net 70 i if len(suri) > 1: Err gopher.r-36.net 70 i if suri[-1] == "json": Err gopher.r-36.net 70 i ftype = "json" Err gopher.r-36.net 70 i+ elif suri[-1] == "txt": Err gopher.r-36.net 70 i+ ftype = "twtxt" Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i if ftype == "xml": Err gopher.r-36.net 70 i return (rcode, parseatomfeed(fval)) Err gopher.r-36.net 70 i+ elif ftype == "twtxt": Err gopher.r-36.net 70 i+ return (rcode, parsetwtxtfeed(fval.decode("utf-8"), uri)) Err gopher.r-36.net 70 i else: Err gopher.r-36.net 70 i return (rcode, parsejsonfeed(fval.decode("utf-8"))) Err gopher.r-36.net 70 i Err gopher.r-36.net 70 .