import datetime import glob import os.path from feedgen.feed import FeedGenerator def find_files(): files = [] for extension in ("gmi", "gem", "gemini"): files.extend(glob.glob("*.{}".format(extension))) index = "index.{}".format(extension) if index in files: files.remove(index) return files def populate_entry_from_file(filename, base_url, entry): url = base_url + filename entry.guid(url) entry.link(href=url) updated = os.path.getctime(filename) updated = datetime.datetime.fromtimestamp(updated, tz=datetime.timezone.utc) entry.updated(updated) with open(filename) as fp: for line in fp: if line.startswith("#"): while line[0] == "#": line = line[1:] title = line.strip() break else: title = filename entry.title(title) def main(base_url="gemini://gemini.circumlunar.space/"): # Setup feed feed = FeedGenerator() feed.id(base_url) feed.title('A Gemini feed.') feed.link(href=base_url, rel='alternate') feed.link(href=base_url + "atom.xml", rel='self') # Add one entry per .gmi file files = find_files() latest_update = datetime.datetime.fromtimestamp(0, tz=datetime.timezone.utc) for filename in files: entry = feed.add_entry() populate_entry_from_file(filename, base_url, entry) print("Adding {} with title '{}'...".format(filename, entry.title())) if entry.updated() > latest_update: latest_update = entry.updated() feed.updated(latest_update) # Write file feed.atom_file('atom.xml', pretty=True) if __name__ == "__main__": main()