blog.wlami.com

Virtuelles Zuhause von Wladislaw Mitzel

Kommentar-Funktion eingebaut

Ich habe eine Kommentar-Funktion im Blog eingebaut. Diese basiert auf dem Octopress Plugin von Matt Palmer. Da ich jedoch komplett statisch bleiben wollte, habe ich kein PHP-Script zum Erstellen neuer Einträge verwendet. Stattdessen können Kommentare per E-Mail ein gesendet werden. Nach einem Check werden diese dann beim nächsten Update mit ausgeliefert. Durch den Klick auf “Kommentar schreiben” wird Euer E-Mail Programm mit einigen Voreinstellungen gestartet. Die Mailto-Adresse weist ein spezielles Format auf, welches mir die Zuordnung der E-Mail zum Blog-Post erlaubt. Der Mailbody enthält bereits einen Hinweis, welche Infos für einen Kommentar notwendig sind. Die eingehenden E-Mails können so recht einfach von mir verarbeitet und in Octopress eingefügt werden.

Eine kleine Herausforderung war das Einbinden der alten Kommentare aus Wordpress. Die Artikel hatte ich bereit mit dem Wordpress to Jekyll Exporter von Ben Balter exportiert. Die resultierende XML enthält neben den Beiträgen auch Metadaten und Kommentare zum Blog-Post. Diese habe ich mit einem rasch zusammen gehackten groovy Script importiert. Ich möchte ausdrücklich darauf hinweisen, dass es evtl. fehlerhaft ist. Für meinen Zweck war es ausreichend. Benutzung auf eigene Gefahr ;-)

(wp-comment-import.groovy) download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/**
 *  Copyright (C) 2013 Wladislaw Mitzel
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU Affero General Public License as
 *  published by the Free Software Foundation, either version 3 of the
 *  License, or (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU Affero General Public License for more details.
 *
 *  You should have received a copy of the GNU Affero General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

def commentsDir = "~/blog/blog.wlami.de/source/_comments"

println "Wordpress to Jekyll Exporter - Comments importer"

def blog = new XmlSlurper().parse( new File("blog.xml") ).declareNamespace(
  excerpt: 'http://wordpress.org/export/1.2/excerpt/',
  content: 'http://purl.org/rss/1.0/modules/content/',
  wfw: 'http://wellformedweb.org/CommentAPI/',
  dc: 'http://purl.org/dc/elements/1.1/',
  wp: 'http://wordpress.org/export/1.2/')

def items = blog.channel.'item'
items.each () {
  def title = it.title.toString().replaceAll(" ", "-").replaceAll(~/[\/!]/,"").replaceAll(~/:/, "-").replaceAll(~/-{2,}/, "-").toLowerCase().replaceAll(~/ä/, "a").replaceAll(~/ö/, "o").replaceAll(~/ü/, "u")
  def datum = Date.parse( "yyyy-MM-dd HH:mm:ss",  it.'wp:post_date'.toString() ?: "2000-01-01 00:00:00" )
  def id = "/index.php/${datum.format('yyyy/MM')}/${title}" 

 int i = 0;
 
 def comments = it.'wp:comment'
 comments.each() {
     ++i;
     def user = it.'wp:comment_author'
     def homepage = it.'wp:comment_author_url'
     def email = it.'wp:comment_author_email'
     def content = it.'wp:comment_content'.toString().replaceAll("\n", "\n\t").replaceAll("'", "\"")
      def cDatum = Date.parse( "yyyy-MM-dd HH:mm:ss",  it.'wp:comment_date'.toString() ?: "2000-01-01 00:00:00" )

      writeToFile(commentsDir, "${title}-${i}.markdown", id, cDatum, user, homepage, email, content)

  }    
}

public void writeToFile(def dir, def fileName, def id, def cDatum, def user, def homepage, def email, def content) {
  new File("$dir/$fileName").withWriter { out ->
      out.println "post_id: '$id'".toString()
      out.println "date: '${cDatum.format('HH:mm:ss')} am ${cDatum.format('dd.MM.yyyy')}'".toString()
      out.println "name: '$user'".toString()
      out.println "link: '$homepage'".toString()
      out.println "email: '$email'".toString()
      out.println "comment: '$content'".toString()
  }
}

Wenn Ihr Anregungen oder Kommentare habt, würde ich mich freuen von Euch zu hören.

Kommentieren

Dieses Blog verwendet statische Kommentare. Kommentare werden also per Mail an mich geschickt und erscheinen anschließend im Blog. Eure E-Mail-Adresse wird nicht veröffentlicht.

Kommentar schreiben