import glob
import os
import jinja2
from bs4 import BeautifulSoup
class FilePathLoader(jinja2.BaseLoader):
def __init__(self, cwd):
self.cwd = cwd
def get_source(self, environment, template):
filename = os.path.join(self.cwd, template)
try:
with open(filename, 'r') as f:
contents = f.read()
except IOError:
raise jinja2.TemplateNotFound(filename)
return contents, filename, lambda: False
def render_template(cwd, template_path, context):
env = jinja2.Environment(loader=FilePathLoader(cwd))
return env.get_template(template_path).render(context)
def main():
filenames = glob.glob("./_build/html/_posts/*/*/*.html")
posts = []
for file in filenames:
soup = BeautifulSoup(open(file), "html5lib")
body = soup.find_all("div", class_="body")[0].text
posts.append({
"title": soup.title.string,
"body": body,
"date_rss": body[body.find("Publish Date:")+13:body.find("Publish Date:")+23],
"permalink": "/".join(file.split("/")[3:])
})
with open(file, "w") as file:
file.write(str(BeautifulSoup(str(soup).replace("\n", "").replace("\r", ""), "html5lib").prettify()))
context = {
"site": {
"name": "Hello World",
"url": "https://blog.jinwei.me",
"tagline": "Freedom is my birth right and I shall have it."
},
"posts": posts
}
return render_template(
".",
"all.rss.xml",
context
)
if __name__ == '__main__':
print(main())