itAllow relative URIs in article linkes. - 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 86b129e4386789f5331765d7b96098e6c2c7bde7 /scm/zs/commit/86b129e4386789f5331765d7b96098e6c2c7bde7.gph gopher.r-36.net 70 1parent 4010b280ba3871965b852aad19c26f9331e861bd /scm/zs/commit/4010b280ba3871965b852aad19c26f9331e861bd.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: Sun, 15 Apr 2018 11:35:39 +0200 Err gopher.r-36.net 70 i Err gopher.r-36.net 70 iAllow relative URIs in article linkes. Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i+ Add feeduri for better filtering handling. Err gopher.r-36.net 70 i Err gopher.r-36.net 70 iDiffstat: Err gopher.r-36.net 70 i zeitungsschau/feed.py | 11 ++++++++--- Err gopher.r-36.net 70 i zeitungsschau/feeddb.py | 4 ++-- Err gopher.r-36.net 70 i zeitungsschau/feedemail.py | 21 ++++++++++++++++++++- Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i3 files changed, 30 insertions(+), 6 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@@ -414,9 +414,14 @@ def fetch(uri): 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+ rval = (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+ rval = (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+ rval = (rcode, parsejsonfeed(fval.decode("utf-8"))) Err gopher.r-36.net 70 i+ Err gopher.r-36.net 70 i+ if rval[1] != None: Err gopher.r-36.net 70 i+ rval[1]["feeduri"] = uri Err gopher.r-36.net 70 i+ Err gopher.r-36.net 70 i+ return rval Err gopher.r-36.net 70 i Err gopher.r-36.net 70 1diff --git a/zeitungsschau/feeddb.py b/zeitungsschau/feeddb.py /scm/zs/file/zeitungsschau/feeddb.py.gph gopher.r-36.net 70 it@@ -215,7 +215,7 @@ class feeddb(object): Err gopher.r-36.net 70 i feed["articles"] = history[-2048:] Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i for metakey in ("link", "title", "updated", "author", \ Err gopher.r-36.net 70 i- "email"): Err gopher.r-36.net 70 i+ "email", "feeduri"): Err gopher.r-36.net 70 i if metakey in curfeed: Err gopher.r-36.net 70 i feed[metakey] = curfeed[metakey] Err gopher.r-36.net 70 i Err gopher.r-36.net 70 it@@ -232,7 +232,7 @@ class feeddb(object): Err gopher.r-36.net 70 i return rfeed Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i for metakey in ("link", "title", "updated", "author", \ Err gopher.r-36.net 70 i- "email", "toemail"): Err gopher.r-36.net 70 i+ "email", "toemail", "feeduri"): Err gopher.r-36.net 70 i if metakey in feed: Err gopher.r-36.net 70 i rfeed[metakey] = feed[metakey] Err gopher.r-36.net 70 i Err gopher.r-36.net 70 1diff --git a/zeitungsschau/feedemail.py b/zeitungsschau/feedemail.py /scm/zs/file/zeitungsschau/feedemail.py.gph gopher.r-36.net 70 it@@ -13,6 +13,7 @@ from email.header import Header Err gopher.r-36.net 70 i import time Err gopher.r-36.net 70 i import subprocess Err gopher.r-36.net 70 i import lxml.html Err gopher.r-36.net 70 i+import urllib.parse Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i import html2text Err gopher.r-36.net 70 i Err gopher.r-36.net 70 it@@ -96,9 +97,27 @@ def send(feed, to, smtphost="localhost", smtpport=None, ssl="False",\ Err gopher.r-36.net 70 i msg["Subject"] = subject Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i if "link" in article: Err gopher.r-36.net 70 i- msg["X-RSS-URL"] = article["link"] Err gopher.r-36.net 70 i+ if "://" not in article["link"]: Err gopher.r-36.net 70 i+ aurl = urllib.parse.urljoin(feed["feeduri"],\ Err gopher.r-36.net 70 i+ article["link"]) Err gopher.r-36.net 70 i+ if "gopher://" in aurl: Err gopher.r-36.net 70 i+ urls = urllib.parse.urlparse(aurl, \ Err gopher.r-36.net 70 i+ allow_fragments=False) Err gopher.r-36.net 70 i+ if urls.path.startswith("/0"): Err gopher.r-36.net 70 i+ aurl = "%s://%s%s" % \ Err gopher.r-36.net 70 i+ (urls.scheme, urls.netloc, \ Err gopher.r-36.net 70 i+ urls.path.replace(\ Err gopher.r-36.net 70 i+ "/0", "/1", 1)) Err gopher.r-36.net 70 i+ if len(urls.query) > 0: Err gopher.r-36.net 70 i+ aurl = "%s?%s" % \ Err gopher.r-36.net 70 i+ (aurl, urls.query) Err gopher.r-36.net 70 i+ else: Err gopher.r-36.net 70 i+ aurl = article["link"] Err gopher.r-36.net 70 i+ msg["X-RSS-URL"] = aurl Err gopher.r-36.net 70 i if "link" in feed: Err gopher.r-36.net 70 i msg["X-RSS-Feed"] = feed["link"] Err gopher.r-36.net 70 i+ else: Err gopher.r-36.net 70 i+ msg["X-RSS-Feed"] = feed["feeduri"] Err gopher.r-36.net 70 i if "id" in article: Err gopher.r-36.net 70 i msg["X-RSS-ID"] = article["id"] Err gopher.r-36.net 70 i if "uuid" in article: Err gopher.r-36.net 70 .