blogthon/blogthon.cgi

143 lines
5.2 KiB
Python
Executable File

#!/usr/bin/python
# This program is free software. It comes without any warranty, to
# the extent permitted by applicable law. You can redistribute it
# and/or modify it under the terms of the Do What The Fuck You Want
# To Public License, Version 2, as published by Sam Hocevar. See
# http://sam.zoy.org/wtfpl/COPYING for more details.
# Author: Stefan Ritter <xeno@thehappy.de>
# Description: A simple blogging software
import cgi
import os
import time
import glob
import re
import ConfigParser
configuration = ConfigParser.ConfigParser()
configuration.read('configuration')
blog_title = configuration.get('personal', 'blog_title')
keywords = configuration.get('personal', 'keywords')
entries_dir = configuration.get('personal', 'entries_dir')
entries_suffix = configuration.get('personal', 'entries_suffix')
staticpages_dir = configuration.get('personal', 'staticpages_dir')
style = configuration.get('look', 'style')
entries_per_page = configuration.getint('look', 'entries_per_page')
monthlist = configuration.get('look', 'monthlist')
staticpages = configuration.get('look', 'staticpages')
permalinks = configuration.get('look', 'permalinks')
newest_first = configuration.get('look', 'newest_first')
action = cgi.FieldStorage()
month_display = action.getvalue('m')
post_display = action.getvalue('p')
static_display = action.getvalue('s')
allentries_display = action.getvalue('a')
if not month_display: month_display = ""
if not post_display: post_display = ""
if not static_display: static_display = ""
if not allentries_display: allentries_display = ""
print 'Content-type: text/html\n'
print '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"'
print ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'
print '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">'
print ' <head>'
print ' <title>' + blog_title + '</title>'
print ' <meta http-equiv="content-type" content="text/html; charset=utf-8" />'
print ' <meta name="keywords" content="' + keywords + '" />'
print ' <meta name="description" content="' + blog_title + '" />'
print ' <link rel="stylesheet" type="text/css" href="styles/' + style + '" />'
print ' </head>'
print ' <body>'
print ' <div class="title"><a href="?" class="title">' + blog_title + '</a></div>'
entries = []
entries_list = glob.glob(entries_dir + '*.' + entries_suffix)
for entry in entries_list:
timestamp = os.stat(entry)
timestamp = time.localtime(timestamp[8])
entry = timestamp, entry
entries.append(entry)
if newest_first:
entries.sort(reverse=True)
else:
entries.sort()
print ' <div class="sidebar">'
if staticpages:
staticpages = []
staticpages_list = glob.glob(staticpages_dir + '*')
staticpages_list.sort()
print ' <div class="staticpages">'
print ' <small>pages</small><br />'
for staticpage in staticpages_list:
title = re.sub('\w+?\/\d+?-', '', staticpage)
link = re.sub('\w+?\/', '', staticpage)
print ' &nbsp;<a href="?s=' + link + '">' + title + '</a>&nbsp;<br />'
if monthlist and staticpages_list != []: print ' <br />'
print ' </div>'
if monthlist:
olddate = ""
print ' <div class="monthlist">'
print ' <small>months</small><br />'
for entry in entries:
date = time.strftime("%m%Y", entry[0])
date_display = time.strftime("%h %Y", entry[0])
if not olddate == date:
print ' <a href="?m=' + date + '">' + date_display + '</a><br />'
olddate = date
print ' </div>'
print ' </div>'
print ' <div class="content">'
if static_display != "": # Show Staticpage
content = open(staticpages_dir + static_display, "r")
print ' <div class="entrytitle">' + re.sub('\d+?-', '', static_display) + '</div>'
print ' <div class="entry"><p>'
for line in content:
print ' ' + line.strip() + '<br />'
print ' </p></div>'
content.close()
else: # Show regular entry
entry_counter = 0
for entry in entries:
date = time.strftime("%c", entry[0])
date_to_compare = time.strftime("%m%Y", entry[0]) # Needed for permalinks
entry = entry[1]
title = entry.replace('entries/', '', 1)
title = title.replace('.txt', '')
if month_display == date_to_compare or not month_display:
if post_display == title or not post_display:
if allentries_display == "1" or entry_counter < entries_per_page:
content = open(entry, "r")
if permalinks:
print ' <div class="entrytitle"><a href="?p=' + title + '" class="entrytitle">' + title + ' <small>(' + date + ')</small></a></div>'
else:
print ' <div class="entrytitle">' + title + ' <small>(' + date + ')</small></div>'
print ' <div class="entry"><p>'
for line in content:
print ' ' + line.strip() + '<br />'
print ' </p></div>'
print ' <br /><br />'
content.close()
entry_counter += 1
if not month_display and not post_display and not allentries_display and entry_counter == entries_per_page: # Display pagelist
print ' <div class="entry"><a href=?a=1>View all entries...</a></div>'
print ' </div>'
print ' </body>'
print '</html>'
# vim: set tw=0 ts=4: