Creating a tag cloud
Although Blot.im supports tags, it does not have a page displaying all of the tags used on your blog. A post will list the tags associated with it, and from a specific tag a page is available to list the posts sharing the same tag.
Using a simple bash script I generate a page containing all the tags I have been using in my posts. For each tag it also lists in how many posts it appears. Since the script is using bash (as well as the commands cat
, grep
, sed
, awk
, sort
and uniq
) it will only run on a Unix-based system. Maybe it will work on cygwin (“Get that Linux feeling - on Windows”) as well, but I have not tested this.
The script looks for all Markdown files (*.md
) within my Blot folder (~/Dropbox/Apps/Blot/Posts
) and outputs a file named ../Pages/page-tag-cloud.md
.
My script is inspired on the this post by ‘Hejki’.
The shell script
#!/bin/bash
cd ~/Dropbox/Apps/Blot/Posts
fn=../Pages/page-tag-cloud.md
tags=$(cat *.md | grep "^Tags:" | sed 's/Tags:[ ]*//' | awk -F ', ' '{for(i=1;i<=NF;i++){print $i}}' | sort -f | uniq -c)
# Create header for the page
echo "Title: Tags" > $fn
echo "Page: yes" >> $fn
echo "Permalink: page-tags" >> $fn
echo "Date: "`date +"%Y-%m-%d %H:%M"` >> $fn
# Output intro text
echo "" >> $fn
echo "# Tag cloud" >> $fn
echo "" >> $fn
echo "This pages serves as a replacement for a tag cloud. This page is generated using a shell script. " >> $fn
echo "This page is inspired on the [following post][1]." >> $fn
echo "" >> $fn
# Output the tags
echo "<div class=\"floatlist\"><ul>" >> $fn
echo "$tags" | awk '{print "<li><a href=\"http://sharedmemorydump.net/tagged/" tolower($2) "\">"$2"</a> <span class=\"badge\">"$1"</span></li>"}' >> $fn
echo "</ul></div>" >> $fn
# Add the URL(s)
echo "" >> $fn
echo "[1]: http://blog.hejki.org/post/102115323478/scriptogram-seznam-tagů" >> $fn
cd ..
Updates to the script
- (2015/09/01) Date field is now also being set to the date/time the Markdown file is generated