aboutsummaryrefslogtreecommitdiff
path: root/generators/generators.py
diff options
context:
space:
mode:
Diffstat (limited to 'generators/generators.py')
-rw-r--r--generators/generators.py35
1 files changed, 35 insertions, 0 deletions
diff --git a/generators/generators.py b/generators/generators.py
index 06a34743..8887bddb 100644
--- a/generators/generators.py
+++ b/generators/generators.py
@@ -11,8 +11,12 @@ import dateutil
import io
import subprocess
+import lxml.etree as ET
+
from config.config import *
+from utils import utils
+
def generate_menu():
"""Generate menu."""
@@ -348,3 +352,34 @@ def generate_index(feed):
except subprocess.CalledProcessError:
sys.stderr.write("error: failed to generate index.html\n")
os.remove(tmppath)
+
+def generate_sitemap(feed):
+ """Generate sitemap.xml."""
+ sitemap = ET.Element("urlset", xmlns="http://www.sitemaps.org/schemas/sitemap/0.9")
+ # index
+ sitemap.append(utils.make_sitemap_url_element(BLOG_HOME, feed.updated, "daily", 1.0))
+ # other top level pages
+ for name in os.listdir(BUILDDIR):
+ if (not name.endswith(".html") or name == "index.html" or
+ re.match("google[a-z0-9]+\.html", name)): # exclude Google's site ownership verification file
+ continue
+ link = urllib.parse.urljoin(BLOG_HOME, name)
+ fullpath = os.path.join(BUILDDIR, name)
+ # try to extract updated time
+ updated = None
+ with open(fullpath, encoding="utf-8") as htmlobj:
+ soup = bs4.BeautifulSoup(htmlobj.read(), "lxml")
+ if soup.footer is not None:
+ updated_tag = soup.footer.find(attrs={"class": "updated"})
+ if updated_tag is not None:
+ updated = dateutil.parser.parse(updated_tag.text)
+ sitemap.append(utils.make_sitemap_url_element(link, updated, "monthly", 0.9))
+
+ # blog entries
+ for entry in feed.entries:
+ sitemap.append(utils.make_sitemap_url_element(entry.link, entry.updated, "monthly", 0.9))
+ sitemappath = os.path.join(BUILDDIR, "sitemap.xml")
+ with open(sitemappath, "w", encoding="utf-8") as sitemapfile:
+ sitemapfile.write('<?xml version="1.0" encoding="UTF-8"?>\n%s\n' %
+ ET.tostring(sitemap).decode('utf-8'))
+ sys.stderr.write("wrote sitemap.xml\n")