61 lines
1.8 KiB
Python
Executable File
61 lines
1.8 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
from sys import argv, exit
|
|
from os import walk, path
|
|
from random import choice, seed
|
|
from textwrap import indent
|
|
import time, urllib.parse, re, subprocess
|
|
|
|
from article_utils import parse_metadata
|
|
from rfc822 import stringify_date
|
|
|
|
import config
|
|
|
|
if len(argv) <= 1:
|
|
print("No directory was supplied")
|
|
exit(-1)
|
|
|
|
seed()
|
|
|
|
# todo: Find the latest pubDate
|
|
feed = f"""<rss version="2.0">
|
|
<channel>
|
|
<title>{config.title}</title>
|
|
<link>{config.address}</link>
|
|
<description>{config.description() if callable(config.description) else config.description}</description>
|
|
<language>{config.language}</language>
|
|
<lastBuildDate>{stringify_date(time.gmtime(int(time.time())))}</lastBuildDate>
|
|
"""
|
|
|
|
body_taker = re.compile(r"<body>(.*)</body>", re.DOTALL)
|
|
|
|
for root, dirs, _ in walk(argv[1]):
|
|
for d in dirs:
|
|
metadata = parse_metadata(path.abspath(root + '/' + d + "/page.mmd"))
|
|
feed += (
|
|
" <item>\n"
|
|
f""" <title>{metadata.get("Title", "No title!? ;-;")}</title>\n"""
|
|
)
|
|
body = subprocess.getoutput(f"./tools/mmd/build/multimarkdown {root}/{d}/page.mmd")
|
|
feed += (
|
|
" <description>\n"
|
|
" <![CDATA[\n"
|
|
f"{indent(body_taker.search(body)[1], ' ' * 12)}\n"
|
|
" ]]>\n"
|
|
" </description>\n"
|
|
)
|
|
if "Date" in metadata:
|
|
feed += \
|
|
f""" <pubDate>{stringify_date(metadata["Date"])}</pubDate>\n"""
|
|
feed += (
|
|
f""" <guid>/articles/{d}</guid>\n"""
|
|
f""" <link>{config.address}/articles/{urllib.parse.quote(d)}</link>\n"""
|
|
" </item>\n"
|
|
)
|
|
break
|
|
|
|
feed += """ </channel>
|
|
</rss>"""
|
|
|
|
print(feed)
|