1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
import os
import jinja2
import glob
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 p in filenames:
soup = BeautifulSoup(open(p), "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(p.split("/")[3:])
})
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())
|