From ff79fdd2a7084ca8594c30ba8ea42a190017889d Mon Sep 17 00:00:00 2001 From: deadvey Date: Tue, 1 Apr 2025 19:24:36 +0100 Subject: [PATCH] rss feeds --- create_feeds.py | 33 +++++++++++++++++++++++++++++++++ create_pages.py | 17 ++++++++++------- example.config.py | 26 +++++++++++++++++++++----- glogger.py | 9 ++++++++- parse_post.py | 7 +++++++ rebuild.py | 7 +++++++ 6 files changed, 86 insertions(+), 13 deletions(-) create mode 100644 create_feeds.py diff --git a/create_feeds.py b/create_feeds.py new file mode 100644 index 0000000..95508e4 --- /dev/null +++ b/create_feeds.py @@ -0,0 +1,33 @@ +import posts +import users +import config + +def create_rss(): + from datetime import datetime + with open(f"{config.webroot}/rss", "w") as main_rss_file: + file_content = f''' + + + {config.site_name} + {config.site_url} + {config.site_description} + {datetime.now().strftime("%a, %d %b %Y %H:%M:%S %z")} + {datetime.now().strftime("%a, %d %b %Y %H:%M:%S %z")} + ''' + for current_post_index in range(len(posts.posts)): + file_content += f''' + + {posts.posts[current_post_index]["title"]} + {config.site_url}/post/{current_post_index}.{config.file_extension} + {posts.posts[current_post_index]["content"]} + {posts.posts[current_post_index]["pubdate"]} + {posts.posts[current_post_index]["editdate"]} + ''' + file_content += ''' + +''' + + main_rss_file.write(file_content) + +def create_atom(): + print("Atom generation under development") diff --git a/create_pages.py b/create_pages.py index 67f737f..293f27f 100644 --- a/create_pages.py +++ b/create_pages.py @@ -53,10 +53,13 @@ def create_post_page(post_index): initialise.initialise() def create_timeline(): - with open(f"{config.webroot}/index.{config.file_extension}", "w") as timeline_file: - output.log("Writing posts to timeline") - for current_post_index in range(len(posts.posts)-1,-1,-1): - username = users.users[posts.posts[current_post_index]["userID"]] - post = config.timeline_post_format - post = parse_post.parse_post_format(post, current_post_index, username) - timeline_file.write(post) + with open(f"{config.webroot}/index.{config.file_extension}", "w") as timeline_file: + site_header = config.site_header + site_header = parse_post.parse_header(site_header) + timeline_file.write(f"{site_header}") + output.log("Writing posts to timeline") + for current_post_index in range(len(posts.posts)-1,-1,-1): + username = users.users[posts.posts[current_post_index]["userID"]] + post = config.timeline_post_format + post = parse_post.parse_post_format(post, current_post_index, username) + timeline_file.write(post) diff --git a/example.config.py b/example.config.py index 7bb9008..3957f8c 100755 --- a/example.config.py +++ b/example.config.py @@ -1,13 +1,19 @@ ### General ### site_url = "gemini://example.com" -webroot = "/path/to/root" +site_name = "Example Name" +site_description = "This Site is about X, Y and Z topics!" +webroot = "/path/to/webroot" date_format = "%d/%m/%Y at %H:%M" # The date that is displayed on the page post_seperator = "---------------------------------------------" posts_in_timeline = 100 -file_extension = "gmi" # Could also be .html, .md, .txt or any other file extension +file_extension = "gmi" + +### Feeds ### +atom = False +rss = True ### Logging ### -logfile = "/path/to/logfile" +logfile = "./log" verbose = False ### Format ### @@ -20,6 +26,14 @@ verbose = False # %L - URL Permanent link to the post # %U - URL the the user (poster) # %N - the username of the user (poster) +# %R - Site wide RSS feed +# %Y - Site Name as defined by site_name +# %y - Site Descriptin as defined by site_description +site_header = ''' +# %Y +## %y +=> %R RSS Feed +''' user_page_post_format = ''' ## %T %C @@ -36,8 +50,10 @@ Published: %D Last Edited: %E ''' timeline_post_format = ''' -## %T +### %T %C -=> %U %N +=> %L permalink %S ''' + +autogenerated = True diff --git a/glogger.py b/glogger.py index efe85a3..66331cb 100755 --- a/glogger.py +++ b/glogger.py @@ -9,7 +9,14 @@ try: except: print("No users database") initialise.initialise() -import config +try: + import config + if config.autogenerated == True: + print("Error: autogenerated = True") + exit() +except: + print("Please move example.config.py to config.py and edit the options to your case and then set autogenerated=False") + exit() import newpost import editpost import rebuild diff --git a/parse_post.py b/parse_post.py index 84d9f18..bd40e7b 100644 --- a/parse_post.py +++ b/parse_post.py @@ -14,4 +14,11 @@ def parse_post_format(post, post_index, username): post = post.replace("%N", username) return post + +def parse_header(header): + header = header.replace("%R", f"{config.site_url}/rss") + header = header.replace("%Y", f"{config.site_name}") + header = header.replace("%y", f"{config.site_description}") + return header + diff --git a/rebuild.py b/rebuild.py index 1f579be..2778048 100755 --- a/rebuild.py +++ b/rebuild.py @@ -1,5 +1,6 @@ import config import create_pages +import create_feeds # Rss, Atom try: import users except: @@ -8,8 +9,14 @@ try: import posts except: print("No posts database") + + def rebuild(): create_pages.create_timeline() + if config.rss == True: + create_feeds.create_rss() + if config.atom == True: + create_feeds.create_atom() for current_user_index in range(len(users.users)): create_pages.create_user_page(current_user_index, users.users[current_user_index]) for current_post_index in range(len(posts.posts)):