aboutsummaryrefslogtreecommitdiff
path: root/rss.py
blob: af9f0cac6fd61d1f5da8d28bf1fd1f4a30e93a66 (plain) (blame)
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
63
64
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())
Powered by cgit v1.2.3 (git 2.41.0)