move blog feed generation out of repo
This commit is contained in:
		
							parent
							
								
									9e9c0c3e7f
								
							
						
					
					
						commit
						320434e9c7
					
				
							
								
								
									
										2
									
								
								blog
									
									
									
									
									
								
							
							
								
								
								
								
								
								
									
									
								
							
						
						
									
										2
									
								
								blog
									
									
									
									
									
								
							@ -1 +1 @@
 | 
				
			|||||||
Subproject commit 865a2f7ca90d28bec65f591dc54ee30e2ef24bc7
 | 
					Subproject commit a909feba613d3a2e4cdc027c9e11c390f924a799
 | 
				
			||||||
							
								
								
									
										9
									
								
								makefile
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								makefile
									
									
									
									
									
								
							@ -10,7 +10,9 @@ OUT_DIR			= site
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
ROOT_DIR		= $(SRC_DIR)/root
 | 
					ROOT_DIR		= $(SRC_DIR)/root
 | 
				
			||||||
 | 
					
 | 
				
			||||||
BLOG_SRC_DIR	= blog/blogs
 | 
					BLOG_BASE_DIR	= blog/
 | 
				
			||||||
 | 
					BLOG_BUILD_DIR	= $(BLOG_BASE_DIR)out/html/
 | 
				
			||||||
 | 
					BLOG_SRC_DIR	= $(BLOG_BASE_DIR)blogs
 | 
				
			||||||
BLOG_OUT_DIR	= $(OUT_DIR)/blog
 | 
					BLOG_OUT_DIR	= $(OUT_DIR)/blog
 | 
				
			||||||
BLOG_TMP_DIR	= .blogtmp
 | 
					BLOG_TMP_DIR	= .blogtmp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -65,8 +67,9 @@ $(BLOG_OUT_DIR)/%.jpg: $(BLOG_SRC_DIR)/%.jpg
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
blog: $(BLOG_TARGETS) $(BLOG_PNG_TARGETS) $(BLOG_JPG_TARGETS) $(BLOG_RSS) | $(BLOG_TMP_DIR)
 | 
					blog: $(BLOG_TARGETS) $(BLOG_PNG_TARGETS) $(BLOG_JPG_TARGETS) $(BLOG_RSS) | $(BLOG_TMP_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$(BLOG_RSS): $(BLOG_PAGES)
 | 
					$(BLOG_RSS):
 | 
				
			||||||
	pipenv run python scripts/mkblogrss.py $(BLOG_PAGES) > $@
 | 
						make --directory $(BLOG_BASE_DIR) html
 | 
				
			||||||
 | 
						cp $(BLOG_BUILD_DIR)/index.xml $@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$(BLOG_INDEX_LINKS): $(BLOG_TARGETS) | $(BLOG_TMP_DIR)
 | 
					$(BLOG_INDEX_LINKS): $(BLOG_TARGETS) | $(BLOG_TMP_DIR)
 | 
				
			||||||
	pipenv run python scripts/mkblogindex.py $(BLOG_TARGETS) > $@
 | 
						pipenv run python scripts/mkblogindex.py $(BLOG_TARGETS) > $@
 | 
				
			||||||
 | 
				
			|||||||
@ -1,76 +0,0 @@
 | 
				
			|||||||
#!/usr/bin/env python3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import markdown
 | 
					 | 
				
			||||||
import pathlib
 | 
					 | 
				
			||||||
import sys
 | 
					 | 
				
			||||||
import re
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def print_usage():
 | 
					 | 
				
			||||||
    print("\nusage: python mkblogrss.py POSTS\n")
 | 
					 | 
				
			||||||
    print("\n")
 | 
					 | 
				
			||||||
    print("\t\tPOSTS\tfilepaths of blog posts")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# check args for at least one file path
 | 
					 | 
				
			||||||
if len(sys.argv) < 2:
 | 
					 | 
				
			||||||
    print_usage()
 | 
					 | 
				
			||||||
    sys.exit(1)
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
# posts are arguments from index 1 onwards
 | 
					 | 
				
			||||||
posts = sys.argv[1:]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# header and footer to enclose feed items
 | 
					 | 
				
			||||||
header = """<?xml version="1.0" encoding="utf-8" ?>
 | 
					 | 
				
			||||||
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
 | 
					 | 
				
			||||||
<channel>
 | 
					 | 
				
			||||||
    <title>ktyl.dev</title>
 | 
					 | 
				
			||||||
    <link>https://ktyl.dev/blog/index.html</link>
 | 
					 | 
				
			||||||
    <description>mostly computer stuff!</description>
 | 
					 | 
				
			||||||
    <atom:link href="https://ktyl.dev/blog/index.xml" rel="self" type="application/rss+xml"/>
 | 
					 | 
				
			||||||
    """
 | 
					 | 
				
			||||||
footer = "</channel></rss>"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# regex patterns
 | 
					 | 
				
			||||||
title_pattern = re.compile("<h1>(.+)</h1>")
 | 
					 | 
				
			||||||
path_pattern = re.compile("(.+)\/(\d{4})\/(\d{1,2})\/(\d{1,2})\/(.+).md")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def make_item(path):
 | 
					 | 
				
			||||||
    str = "<item>\n"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # get the HTML version of the file
 | 
					 | 
				
			||||||
    text = ""
 | 
					 | 
				
			||||||
    with open(path) as f:
 | 
					 | 
				
			||||||
        text = f.read()
 | 
					 | 
				
			||||||
    html = markdown.markdown(text, extensions=["fenced_code"])
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # title
 | 
					 | 
				
			||||||
    title = ""
 | 
					 | 
				
			||||||
    m = title_pattern.match(html)
 | 
					 | 
				
			||||||
    title = m.group(1)
 | 
					 | 
				
			||||||
    str += f"<title>{title}</title>\n"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # link
 | 
					 | 
				
			||||||
    url = "/".join(pathlib.Path(path).parts[2:])
 | 
					 | 
				
			||||||
    url = url.replace(".md", ".html")
 | 
					 | 
				
			||||||
    link = f"https://ktyl.dev/blog/{url}"
 | 
					 | 
				
			||||||
    str += f"<link>{link}</link>\n"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # content
 | 
					 | 
				
			||||||
    description = html
 | 
					 | 
				
			||||||
    description = re.sub('<', '<', description)
 | 
					 | 
				
			||||||
    description = re.sub('>', '>', description)
 | 
					 | 
				
			||||||
    str += f"<description>{description}</description>\n"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # pub date
 | 
					 | 
				
			||||||
    date = re.sub(path_pattern, r'\2-\3-\4', path)
 | 
					 | 
				
			||||||
    str += f"<pubDate>{date}</pubDate>\n"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    str += "</item>"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return str
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# print everything!
 | 
					 | 
				
			||||||
print(header)
 | 
					 | 
				
			||||||
for p in posts:
 | 
					 | 
				
			||||||
    print(make_item(p))
 | 
					 | 
				
			||||||
print(footer)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user