Generate feed.xml

master
Hugo Thunnissen 4 years ago
parent 429a53d7c8
commit 748539587c

@ -35,10 +35,12 @@
<a href="index.html">Home</a> <a href="index.html">Home</a>
<h1>Blog</h1> <h1>Blog</h1>
<div><a href="./posts/introduction/index.html"><h2> Introduction </h2></a><p>Hello, welcome to my blog! My name is Hugo. I am a 22 year old Software <div><a href="./posts/introduction/index.html"><h2 style="margin-bottom: 0;"> Introduction </h2></a>
<i style="font-size: 0.8em;">Sat 08 Feb 2020 09:30:06 AM CET</i><p style="margin-top: 0.5em;">Hello, welcome to my blog! My name is Hugo. I am a 22 year old Software
Engineering student from the Netherlands. Software development is a huge part Engineering student from the Netherlands. Software development is a huge part
of my life, I write a lot of (weird) programs to scratch my own itch and most of my life, I write a lot of (weird) programs to scratch my own itch and most
software I create is open_source by default. I also run a one-man company that software I create is open_source by default. I also run a one-man company that
provides some IT services on the side. ... <a href="./posts/introduction/index.html">Continue reading</a></p></div><hr> provides some IT services on the side. ... <a href="./posts/introduction/index.html">Continue reading</a></p>
</body> </div>
</html> <hr> </body>
</html>

@ -0,0 +1,23 @@
<?xml version="1.0"?>
<rss version="2.0">
<channel>
<title>Hugot Blog</title>
<link>https://hugot.nl/blog.html</link>
<description>Hugo's personal blog</description>
<language>en-us</language>
<pubDate>Sat 08 Feb 2020 09:58:35 AM CET</pubDate>
<lastBuildDate>Sat 08 Feb 2020 09:58:35 AM CET</lastBuildDate>
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
<generator>Hugo's Custom Bash Script</generator>
<managingEditor>social@hugot.nl</managingEditor>
<webMaster>infra@hugot.nl</webMaster>
<title> Introduction </title>
<description> Hello, welcome to my blog! My name is Hugo. I am a 22 year old Software
Engineering student from the Netherlands. Software development is a huge part
of my life, I write a lot of (weird) programs to scratch my own itch and most
software I create is open_source by default. I also run a one-man company that
provides some IT services on the side. </description>
<pubDate> Sat 08 Feb 2020 09:30:06 AM CET </pubDate>
<guid> ./posts/introduction/index.html#MjM3MzUyOTAwNSA5MDYK </guid>
</channel>
</rss>

@ -5,7 +5,7 @@
# page. # page.
# Check if required executables can be found # Check if required executables can be found
if ! type readlink dirname html2text mv; then if ! type readlink dirname html2text mv cat cksum base64; then
echo 'One or more required executables are not present. Generation cancelled' >&2 echo 'One or more required executables are not present. Generation cancelled' >&2
exit 1 exit 1
fi fi
@ -31,9 +31,7 @@ html-to-text() {
html2text -nobs -style compact "$@" html2text -nobs -style compact "$@"
} }
blog_html="$here/blog.html" print-blog-html-top() {
{
echo '<html> echo '<html>
<head> <head>
<title>Blog</title> <title>Blog</title>
@ -71,32 +69,121 @@ blog_html="$here/blog.html"
<a href="index.html">Home</a> <a href="index.html">Home</a>
<h1>Blog</h1> <h1>Blog</h1>
' '
while read -r post_html; do }
# Convert the post's html to text to make it easier to use the blog's text
text="$(html-to-text "$post_html" | escape-html)" || exit $?
# The title should be on the 2nd line of text, right after the link to the print-blog-html-bottom() {
# homepage. This is a bit inflexible but it will do for now. echo ' </body>
title="$(tail -n +2 <<<"$text" | head -n 1 | tr -d '*')" || exit $? </html>'
}
# Use the first 5 lines after the title as post excerpt. # Note: pubDate and lastBuildDate are both set to the current time.
excerpt="$(tail -n +3 <<<"$text" | head -n 5)" || exit $? print-blog-rss-top() {
cat <<EOF
<?xml version="1.0"?>
<rss version="2.0">
<channel>
<title>Hugot Blog</title>
<link>https://hugot.nl/blog.html</link>
<description>Hugo's personal blog</description>
<language>en-us</language>
<pubDate>$(date)</pubDate>
<lastBuildDate>$(date)</lastBuildDate>
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
<generator>Hugo's Custom Bash Script</generator>
<managingEditor>social@hugot.nl</managingEditor>
<webMaster>infra@hugot.nl</webMaster>
EOF
}
# Escape the post html file name to safely use it in the generated html. print-blog-rss-bottom() {
href="$(escape-html <<<"$post_html")" || exit $? echo '</channel>
</rss>'
}
printf '<div><a href="%s"><h2>%s</h2></a><p>%s ... <a href="%s">Continue reading</a></p></div><hr>\n' \ el() {
"$href" \ format_string="$1"
"$title" \ shift
"$excerpt" \
"$href"
done < "$posts_file"
echo ' </body> printf "<$format_string>" "$@"
</html>' }
el-close() {
echo "</$1>"
}
el-enclose() {
element_name="$1"
shift
echo "<$element_name>" "$@" "</$element_name>"
}
site_url="https://hugot.nl"
blog_html="$here/blog.html"
new_html="$blog_html.new"
blog_rss="$here/feed.xml"
new_rss="$blog_rss.new"
print-blog-html-top > "$new_html"
print-blog-rss-top > "$new_rss"
while read -r post_html; do
# Convert the post's html to text to make it easier to use the blog's text
text="$(html-to-text "$post_html" | escape-html)" || exit $?
# The title should be on the 2nd line of text, right after the link to the
# homepage. This is a bit inflexible but it will do for now.
title="$(tail -n +2 <<<"$text" | head -n 1 | tr -d '*')" || exit $?
# Use the first 5 lines after the title as post excerpt.
excerpt="$(tail -n +3 <<<"$text" | head -n 5)" || exit $?
# Escape the post html file name to safely use it in the generated html.
href="$(escape-html <<<"$post_html")" || exit $?
post_dir="$(dirname "$post_html")" || exit $?
pubdate_file="$post_dir/publish_date.txt"
# Determine a publishing date for the post
if [[ -f "$pubdate_file" ]]; then
read -r pubdate < "$pubdate_file"
else
pubdate="$(date)"
echo "$pubdate" > "$pubdate_file"
fi
{
el div
el 'a href="%s"' "$href"
printf '<h2 style="margin-bottom: 0;">%s</h2>' "$title"
el-close a
printf '<i style="font-size: 0.8em;">%s</i>' "$pubdate"
el 'p style="margin-top: 0.5em;"'
printf '%s ... <a href="%s">Continue reading</a>' "$excerpt" "$href"
el-close p
el-close div
el hr
} >> "$new_html"
{
el-enclose title "$title"
el-enclose description "$excerpt"
el-enclose pubDate "$pubdate"
el-enclose guid "${href}#$(base64 <(cksum <<<"$text"))"
} >> "$new_rss"
done < "$posts_file"
} > "$blog_html.new" print-blog-html-bottom >> "$new_html"
print-blog-rss-bottom >> "$new_rss"
mv -v "$blog_html.new" "$blog_html" || exit $? mv -v "$new_html" "$blog_html" || exit $?
mv -v "$new_rss" "$blog_rss" || exit $?
echo 'SUCCESS!' echo 'SUCCESS!'

@ -39,5 +39,11 @@
Hello and welcome to my personal homepage! I'll add some info about myself to Hello and welcome to my personal homepage! I'll add some info about myself to
this page soon. In the mean time, maybe take a look at my <a href="blog.html">blog</a> this page soon. In the mean time, maybe take a look at my <a href="blog.html">blog</a>
</p> </p>
<pre>
testing pre
jallaballa
</pre>
</body> </body>
</html> </html>

@ -0,0 +1 @@
Sat 08 Feb 2020 09:30:06 AM CET
Loading…
Cancel
Save