#!/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') linklist = configuration.get('look', 'linklist') permalinks = configuration.get('look', 'permalinks') comments = configuration.get('look', 'comments') 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 == "True": staticpages = [] staticpages_list = glob.glob(staticpages_dir + '*') staticpages_list.sort() print ' <div class="sidebarentry">' print ' <small>pages</small><br />' for staticpage in staticpages_list: title = re.sub('\w+?\/\d+?-', '', staticpage) link = re.sub('\w+?\/', '', staticpage) print ' <a href="?s=' + link + '">' + title + '</a> <br />' if monthlist == "True": print ' <br />' print ' </div>' if monthlist == "True": olddate = "" print ' <div class="sidebarentry">' 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 if linklist == "True": print ' <br />' print ' </div>' if linklist == "True": content = open("linklist", "r") print ' <div class="sidebarentry">' print ' <small>links</small><br />' for line in content: print ' <a href=' + line.split(" ")[0] + '>' + line.split(" ", 1)[1].strip() + '</a> <br />' print ' </div>' content.close() 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 />' if comments == "True": print ' <div class="comment"><ul><li><a href=? class="comment">comments</a></li></ul></div><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: