aboutsummaryrefslogtreecommitdiff
path: root/rss.py
diff options
context:
space:
mode:
authorclarkzjw <[email protected]>2018-01-11 16:59:47 +0800
committerclarkzjw <[email protected]>2018-01-11 16:59:47 +0800
commit78760ab08d1d2ca51004934ac8ff690be38fd7ce (patch)
tree8fe81463270da0478049435d6493de48d2e79d61 /rss.py
parent2c3850c38b0e2c75fb1fc7023563ab3d9a6a357b (diff)
downloadblog.jinwei.me-78760ab08d1d2ca51004934ac8ff690be38fd7ce.tar.gz
+ fix
Diffstat (limited to 'rss.py')
-rw-r--r--rss.py73
1 files changed, 37 insertions, 36 deletions
diff --git a/rss.py b/rss.py
index fbf70d1..faa004c 100644
--- a/rss.py
+++ b/rss.py
@@ -1,68 +1,69 @@
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3# Created by [email protected] at 2015-07-30
4
5import os 1import os
6import argparse
7import yaml
8
9import jinja2 2import jinja2
10 3
4import glob
5from bs4 import BeautifulSoup
11 6
12class FilePathLoader(jinja2.BaseLoader):
13 """ Custom Jinja2 template loader which just loads a single template file """
14 7
8class FilePathLoader(jinja2.BaseLoader):
15 def __init__(self, cwd): 9 def __init__(self, cwd):
16 self.cwd = cwd 10 self.cwd = cwd
17 11
18 def get_source(self, environment, template): 12 def get_source(self, environment, template):
19 # Path
20 filename = os.path.join(self.cwd, template) 13 filename = os.path.join(self.cwd, template)
21 14
22 # Read
23 try: 15 try:
24 with open(filename, 'r') as f: 16 with open(filename, 'r') as f:
25 contents = f.read() 17 contents = f.read()
26 except IOError: 18 except IOError:
27 raise jinja2.TemplateNotFound(filename) 19 raise jinja2.TemplateNotFound(filename)
28 20
29 # Finish 21 return contents, filename, lambda: False
30 uptodate = lambda: False
31 return contents, filename, uptodate
32 22
33 23
34def render_template(cwd, template_path, context): 24def render_template(cwd, template_path, context):
35 env = jinja2.Environment(loader=FilePathLoader(cwd)) 25 env = jinja2.Environment(loader=FilePathLoader(cwd))
26 return env.get_template(template_path).render(context)
36 27
37 return env \ 28
38 .get_template(template_path) \ 29def _remove_attrs(soup):
39 .render(context) 30 for tag in soup.findAll(True):
31 tag.attrs = None
32 return soup
40 33
41 34
42def main(): 35def main():
43 parser = argparse.ArgumentParser() 36
44 37 filenames = glob.glob("./_build/html/_posts/*/*/*.html")
45 parser.add_argument('--dir', default='.', help='Template directory') 38 print(filenames)
46 parser.add_argument('--data', nargs='*', help='One or more YAML data file') 39
47 parser.add_argument('--template', help='Template file to process') 40 posts = []
48 parser.add_argument('--body', help='Body content') 41
49 args = parser.parse_args() 42 for p in filenames:
50 43 soup = BeautifulSoup(open(p), "html5lib")
51 context = dict() 44 body = soup.find_all("div", class_="body")
52 for data_f in args.data if args.data else []: 45 posts.append({
53 key, filename = data_f.split(':') 46 "title": soup.title.string,
54 if filename: 47 "body": body[0].text,
55 context[key] = yaml.load(open(filename).read()) 48 "date_rss": "",
56 else: 49 "permalink": "/".join(p.split("/")[3:])
57 context[key] = {'_': True} 50 })
58 if args.body: 51
59 context['body'] = open(args.body).read() 52 context = {
53 "site": {
54 "name": "Hello World",
55 "url": "https://blog.jinwei.me",
56 "tagline": "Freedom is my birthright and I shall have it."
57 },
58 "posts": posts
59 }
60 60
61 return render_template( 61 return render_template(
62 args.dir, 62 ".",
63 args.template, 63 "all.rss.xml",
64 context 64 context
65 ) 65 )
66 66
67
67if __name__ == '__main__': 68if __name__ == '__main__':
68 print(main()) 69 print(main())
Powered by cgit v1.2.3 (git 2.41.0)