aboutsummaryrefslogtreecommitdiff
"""generate RSS feed for all blog posts"""

from post_parser import get_all_posts, Post

SUMMARY_TITLE = "alifeee's blog"
SUMMARY_LINK = "https://blog.alifeee.net"
SUMMARY_AUTHOR = "alifeee"
SUMMARY_ID = "https://blog.alifeee.net/"
SUMMARY_ICON = "https://blog.alifeee.net/og-image.png"

posts = get_all_posts()

# sort posts by date
posts.sort(key=lambda post: post.date, reverse=True)

# list of posts to jank ID for
jank_ids = [
    "https://blog.alifeee.net/hitchhiking/",
    "https://blog.alifeee.net/sellotape-dispenser/",
    "https://blog.alifeee.net/fold-an-envelope/",
    "https://blog.alifeee.net/railcards",
    "https://blog.alifeee.net/gists",
    "https://blog.alifeee.net/font-workshop",
    "https://blog.alifeee.net/making-bogface",
    "https://blog.alifeee.net/what-is-a-third-space",
    "https://blog.alifeee.net/hackspace-adventures",
    "https://blog.alifeee.net/factorio-proximity-chat",
    "https://blog.alifeee.net/hull-bus-sign",
    "https://blog.alifeee.net/steam-collage-api",
    "https://blog.alifeee.net/snippets-of-a-degree",
    "https://blog.alifeee.net/sketch-your-society",
    "https://blog.alifeee.net/ring-populations",
    "https://blog.alifeee.net/bike-to-cambridge",
]

# generate feed
feed = ""
feed += "<?xml version='1.0' encoding='UTF-8'?>\n"
feed += '<?xml-stylesheet href="/feed.xsl" type="text/xsl"?>\n'
feed += '<feed xmlns="http://www.w3.org/2005/Atom">\n\n'
feed += f"<title>{SUMMARY_TITLE}</title>\n"
feed += f"<link href='{SUMMARY_LINK}/feed.xml' rel='self' />\n"
feed += f"<updated>{posts[0].date.isoformat()}</updated>\n"
feed += "<author>\n"
feed += f"  <name>{SUMMARY_AUTHOR}</name>\n"
feed += "</author>\n"
feed += f"<id>{SUMMARY_ID}</id>\n"
feed += f"<icon>{SUMMARY_ICON}</icon>\n\n"
for post in posts:
    if post.relative_url.startswith("http"):
        link = post.relative_url
    else:
        link = SUMMARY_LINK + "/" + post.relative_url.lstrip("./")

    # fix old IDs having erroneous double slash
    id_ = link
    if link in jank_ids:
        id_ = id_.replace(".uk/", ".uk//")

    feed += "<entry>\n"
    feed += f"  <title>{post.title}</title>\n"
    feed += f"  <link href='{link}' />\n"
    feed += f"  <id>{id_}</id>\n"
    feed += f"  <updated>{post.date.isoformat()}</updated>\n"
    feed += f"  <summary>{post.description}</summary>\n"
    feed += "</entry>\n\n"
feed += "</feed>\n"

# write feed to file
with open("feed.xml", "w", encoding="utf-8") as f:
    f.write(feed)

print("feed written to feed.xml")