Skip to content

Commit fe6ecf8

Browse files
committed
Add xml feed generation
1 parent 7bd6097 commit fe6ecf8

2 files changed

Lines changed: 44 additions & 0 deletions

File tree

blurt

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ slugify() {
1919
echo "$1" | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9]/-/g' | sed 's/--*/-/g' | sed 's/^-//' | sed 's/-$//'
2020
}
2121

22+
xml_escape() {
23+
sed 's/&/\&amp;/g; s/</\&lt;/g; s/>/\&gt;/g; s/"/\&quot;/g; s/'"'"'/\&apos;/g'
24+
}
25+
2226
cmd_new() {
2327
open_editor=false
2428
[ "$1" = "-e" ] && open_editor=true && shift
@@ -104,6 +108,44 @@ cmd_build() {
104108
sed -i.bak "s/__BUILD_TIME__/$page_time/g" "$DIST/index.html"
105109
rm -f "$DIST/index.html.bak"
106110
111+
# Generate Atom feed
112+
site_url=$(sed -n 's/^site_url: *"\{0,1\}\([^"]*\)"\{0,1\} *$/\1/p' "$SCRIPT_DIR/config.yaml" 2>/dev/null | head -1)
113+
site_title=$(sed -n 's/^site_title: *"\{0,1\}\([^"]*\)"\{0,1\} *$/\1/p' "$SCRIPT_DIR/config.yaml" 2>/dev/null | head -1)
114+
site_author=$(sed -n 's/^site_author: *"\{0,1\}\([^"]*\)"\{0,1\} *$/\1/p' "$SCRIPT_DIR/config.yaml" 2>/dev/null | head -1)
115+
116+
if [ -n "$site_url" ]; then
117+
feed_updated=$(echo "$sorted" | head -1 | cut -f1)
118+
[ -z "$feed_updated" ] && feed_updated=$(date -u +%Y-%m-%d)
119+
site_url_escaped=$(echo "$site_url" | xml_escape)
120+
121+
cat > "$DIST/feed.xml" << 'FEED_HEADER'
122+
<?xml version="1.0" encoding="utf-8"?>
123+
<feed xmlns="http://www.w3.org/2005/Atom">
124+
FEED_HEADER
125+
printf ' <title>%s</title>\n' "$(echo "$site_title" | xml_escape)" >> "$DIST/feed.xml"
126+
printf ' <link href="%s/feed.xml" rel="self"/>\n' "$site_url_escaped" >> "$DIST/feed.xml"
127+
printf ' <link href="%s/"/>\n' "$site_url_escaped" >> "$DIST/feed.xml"
128+
printf ' <id>%s/</id>\n' "$site_url_escaped" >> "$DIST/feed.xml"
129+
printf ' <updated>%sT00:00:00Z</updated>\n' "$feed_updated" >> "$DIST/feed.xml"
130+
[ -n "$site_author" ] && printf ' <author><name>%s</name></author>\n' "$(echo "$site_author" | xml_escape)" >> "$DIST/feed.xml"
131+
132+
echo "$sorted" | while IFS=' ' read -r date slug title; do
133+
[ -z "$date" ] && continue
134+
article=$(sed -n '/<article>/,/<\/article>/p' "$DIST/$slug/index.html")
135+
title_escaped=$(echo "$title" | xml_escape)
136+
content_escaped=$(printf '%s' "$article" | xml_escape)
137+
printf ' <entry>\n' >> "$DIST/feed.xml"
138+
printf ' <title>%s</title>\n' "$title_escaped" >> "$DIST/feed.xml"
139+
printf ' <link href="%s/%s/"/>\n' "$site_url_escaped" "$slug" >> "$DIST/feed.xml"
140+
printf ' <id>%s/%s/</id>\n' "$site_url_escaped" "$slug" >> "$DIST/feed.xml"
141+
printf ' <updated>%sT00:00:00Z</updated>\n' "$date" >> "$DIST/feed.xml"
142+
printf ' <content type="html">%s</content>\n' "$content_escaped" >> "$DIST/feed.xml"
143+
printf ' </entry>\n' >> "$DIST/feed.xml"
144+
done
145+
146+
echo "</feed>" >> "$DIST/feed.xml"
147+
fi
148+
107149
# Replace commit SHA in all pages
108150
find "$DIST" -name '*.html' -exec sed -i.bak "s/__COMMIT_SHA__/$commit_sha/g" {} \;
109151
find "$DIST" -name '*.bak' -delete

config.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
11
site_title: "My blog"
2+
site_url: "https://example.com"
3+
site_author: "Your Name"

0 commit comments

Comments
 (0)