blog

git clone https://git.ce9e.org/blog.git

commit
35fd5a415ec88cfe60236749d8ced9698773d272
parent
85519303403f4995a0954e3362f4bc5b6c457c73
Author
Tobias Bengfort <tobias.bengfort@posteo.de>
Date
2024-02-12 11:05
add JSON feed

https://www.jsonfeed.org/version/1.1/

Diffstat

M Makefile 16 +++++++++++-----
M _templates/base.html 1 +
R feed.sh -> feed-atom.sh 0
A feed-json.sh 46 ++++++++++++++++++++++++++++++++++++++++++++++

4 files changed, 58 insertions, 5 deletions


diff --git a/Makefile b/Makefile

@@ -7,7 +7,7 @@ IMG := $(shell find _content -regex '.*\.\(png\|gif\|jpg\)$$' | sed 's/^_content
    7     7 PANDOC_ARGS = -f markdown-smart --wrap=none
    8     8 
    9     9 .PHONY: all
   10    -1 all: build/index.html $(PAGES) $(PAGES_MD) build/feed.xml build/feed-archive.xml $(STATIC) build/static/style.css $(IMG)
   -1    10 all: build/index.html $(PAGES) $(PAGES_MD) build/feed.xml build/feed-archive.xml build/feed.json build/feed-archive.json $(STATIC) build/static/style.css $(IMG)
   11    11 
   12    12 .PHONY: push
   13    13 push: all
@@ -38,11 +38,17 @@ build/%.jpg: _content/%.jpg
   38    38 build/%.gif: _content/%.gif
   39    39 	ln $< $@
   40    40 
   41    -1 build/feed.xml: feed.sh $(PAGES_FEED)
   42    -1 	./feed.sh > $@
   -1    41 build/feed.xml: feed-atom.sh $(PAGES_FEED)
   -1    42 	./feed-atom.sh > $@
   43    43 
   44    -1 build/feed-archive.xml: feed.sh $(PAGES_FEED)
   45    -1 	./feed.sh -a > $@
   -1    44 build/feed-archive.xml: feed-atom.sh $(PAGES_FEED)
   -1    45 	./feed-atom.sh -a > $@
   -1    46 
   -1    47 build/feed.json: feed-json.sh $(PAGES_FEED)
   -1    48 	./feed-json.sh > $@
   -1    49 
   -1    50 build/feed-archive.json: feed-json.sh $(PAGES_FEED)
   -1    51 	./feed-json.sh -a > $@
   46    52 
   47    53 build/static/%: static/%
   48    54 	@mkdir -p $$(dirname $@)

diff --git a/_templates/base.html b/_templates/base.html

@@ -9,6 +9,7 @@
    9     9 	<title>Ξ${if(title)} - ${title}${endif}</title>
   10    10 	<link rel="stylesheet" type="text/css" href="/static/style.css">
   11    11 	<link rel="alternate" type="application/atom+xml" href="/feed.xml">
   -1    12 	<link rel="alternate" type="application/feed+json" href="/feed.json">
   12    13 </head>
   13    14 
   14    15 <body>

diff --git a/feed.sh b/feed-atom.sh

diff --git a/feed-json.sh b/feed-json.sh

@@ -0,0 +1,46 @@
   -1     1 #!/bin/sh
   -1     2 
   -1     3 base_url='https://blog.ce9e.org/'
   -1     4 
   -1     5 escape() {
   -1     6 	sed 's/\\/\\\\\\\\/g;s/"/\\"/g'
   -1     7 }
   -1     8 
   -1     9 value() {
   -1    10 	printf '%.*s"%s": "%s",\n' "$1" '		' "$2" "$3"
   -1    11 }
   -1    12 
   -1    13 echo '{'
   -1    14 value 1 'version' "https://jsonfeed.org/version/1.1"
   -1    15 echo '	"authors": [{"name": "Tobias Bengfort"}],'
   -1    16 value 1 'title' 'Ξ'
   -1    17 value 1 'home_page_url' "$base_url"
   -1    18 if [ "$1" = '-a' ]; then
   -1    19 	value 1 'feed_url' "${base_url}feed-archive.json"
   -1    20 	select='tail -n +11'
   -1    21 else
   -1    22 	value 1 'feed_url' "${base_url}feed.json"
   -1    23 	value 1 'next_url' "${base_url}feed-archive.json"
   -1    24 	select='head -n 10'
   -1    25 fi
   -1    26 
   -1    27 ls _content/posts | tac | $select | while read l; do
   -1    28 	if [ -z "$loop" ]; then
   -1    29 		echo '	"items": [{'
   -1    30 		loop=1
   -1    31 	else
   -1    32 		echo '	}, {'
   -1    33 	fi
   -1    34 
   -1    35 	yml="_content/posts/$l/index.md"
   -1    36 	html="_content/posts/$l/index.html"
   -1    37 	url="${base_url}posts/$l/"
   -1    38 	value 2 'title' "$(grep '^title:' "$yml" | head -n 1 | sed 's/title: //;s/^"\(.*\)"$/\1/' | escape)"
   -1    39 	value 2 'url' "$url"
   -1    40 	value 2 'id' "$url"
   -1    41 	value 2 'date_published' "$(grep '^date:' "$yml" | head -n 1 | sed 's/date: //' | escape)"
   -1    42 	echo "		\"content_html\": \"$(cat "$html" | escape | sed 's/$/\\\\n/' | tr -d '\n')\""
   -1    43 done
   -1    44 echo '	}]'
   -1    45 
   -1    46 echo '}'