Archiv

Archiv für die Kategorie ‘WordPress’

WordPress Blogposts per Perl-Script modifizieren

Vor ein paar Tagen hatte ich beschrieben, wie man schnell und einfach per XML-RPC und der MetaWeblog API mit einem Perl Script einen neue Artikel in ein WordPress-Blog einfügt. Wie bereits kurz erwähnt hatte ich dabei ein Problem: Mit der MetaWeblog API habe ich es nicht geschafft, gleich beim Anlegen des Artikel die Kategorie festzulegen (und bin über jeden Tipp dankbar). Deshalb habe ich mit einer anderen API experimentiert, die WordPress ebenfalls kennt: Die Movable Type API von Sixapart. Hier ist dies mit “mt.setPostCategories” problemlos möglich:

my $res2 = XMLRPC::Lite
->proxy($proxyurl)
->call(‘mt.setPostCategories’, $postid, $wpusername, $wppassword, [ {categoryId => $kategorie} ])
->result;

Die $postid ist ja bekannt, so dass der Code kombiniert mit dem Anlegen etwa so aussehen könnte:

#!/usr/bin/perl -w
use strict;
use XMLRPC::Lite;

my $wpusername = “mustermann”;
my $wppassword = “meinpasswort”;
my $wpblogid = “meinblog”;
my $blogurl = “http://maxmustermann.wordpress.com/xmlrpc.php”;

# Neuer Blogbeitrag
my $articeltext =”Hallo Blog, wie geht’s. Hier steht viel Text!”;
my $articeltitle =”Mein erster Blogbeitrag”;
my $articeldatum =”20100220T12:34:56″;
my $articelkeywords =”Hund, Katze, Maus”;

my $rpcall = XMLRPC::Lite
->proxy($blogurl)
->call(‘metaWeblog.newPost’, $wpblogid, $wpusername, $wppassword,
{ description => $articeltext, title => $articeltitle, dateCreated => $articeldatum, mt_keywords => $articelkeywords}, 1)
->result;

if (defined ($rpcall)) {
  print “Erfolgreich – Artikel-ID: $rpcall \n\n”;
} else {
  print “Fehler: $!”;
  die();
}

my $postid=$rpcall;
my $kategorie=47; # Kategorie-ID
my $rpcall2 = XMLRPC::Lite
->proxy($blogurl)
->call(‘mt.setPostCategories’, $postid, $wpusername, $wppassword, [ {categoryId => $kategorie} ])
->result;

if (defined ($rpcall2)) {
  print “Erfolgreich Kategorie gesetzt!\n\n”;
} else {
  print “Fehler: $!”;
  die();
}

print “\n\n”;

Aber wie gesagt nur ein Workaround – eigentlich müsste dies in einem Schwung gehen.

WordPress Blogpost per Perl-Script erzeugen

Vor kurzem habe ich an einem Projekt gearbeitet, bei dem es u. a. darum ging, automatisiert Beiträge aus der Datenbank eines CMS in ein WordPress-Blog zu übertragen. Aus diversen Gründen wurde dies in Perl realisiert und wegen einiger Anfragen hier die Grundidee: eigentlich ganz einfach via XML-RPC (mit dem Modul XMLRPC::Lite) über die MetaWeblog API, die von WordPress unterstützt wird (und diversen anderen Blogsystemen; deshalb dürfte folgendes Script nicht nur bei WP funktionieren):

#!/usr/bin/perl -w
use strict;
use XMLRPC::Lite;

my $wpusername = “mustermann”;
my $wppassword = “meinpasswort”;
my $wpblogid = “meinblog”;
my $blogurl = “http://maxmustermann.wordpress.com/xmlrpc.php”;

# Neuer Blogbeitrag
my $articeltext =”Hallo Blog, wie geht’s. Hier steht viel Text!”;
my $articeltitle =”Mein erster Blogbeitrag”;
my $articeldatum =”20100220T12:34:56″;
my $articelkeywords =”Hund, Katze, Maus”;

my $rpcall = XMLRPC::Lite
->proxy($blogurl)
->call(‘metaWeblog.newPost’, $wpblogid, $wpusername, $wppassword,
{ description => $articeltext, title => $articeltitle, dateCreated => $articeldatum, mt_keywords => $articelkeywords}, 1)
->result;

if (defined ($rpcall)) {
  print “Erfolgreich – Artikel-ID: $rpcall \n\n”;
} else {
  print “Fehler: $!”;
}
print “\n\n”;

Bei WordPress ist wichtig ist, auf die korrekte Form des Datums zu achten. Probleme hatte ich, bereits an dieser Stelle eine Kategorie für den Artikel festzulegen – mehr dazu in Kürze.

Bugfix für WordPress Theme MistyLook durch CSS-Trick

Für kleine Blogprojekte setzte ich sehr gerne das nett gemachte WordPress Theme „MistyLook“ von Sadish ein. Leider hat dies einen kleine Bug: Verwendet man Bilder-Galerien, so wird der Schatten-Effekt durch ein Link-Border überdeckt, was ziemlich hässlich aussieht. Möchte man dies mit dem CSS User-Stylesheet Editor von WordPress beheben, steht man vor einem Problem. Fügt man

div #gallery-1 img { border-width:0px; }

ein, so bringt das leider gar nichts: Das CSS für die Gallery wird (vereinfacht gesprochen) erst nach dem User- und Theme-Stylesheet geladen und überschreibt so dies. Folgendes einfaches Beispiel illustriert das Problem:

<head>
<title>Test</title>
<style>

/* Style 1: */
div #meintext strong { color:red; }

/* Style 2 (nicht änderbar): */
div #meintext strong { color:green; }

</style></head>

<body>
<div>
 <span>Hallo <strong>Welt</strong></span>
</div>
</body>

Die kleine Rätselaufgabe: Sie möchten, dass das Wort „Welt“ rot dargestellt wird, dürfen jedoch weder die Definition „Style 2“ noch den HTML-Quelltext sondern nur die Zeile nach „Style 1“ verändern. Geht das? Weiterlesen…

Follow

Get every new post delivered to your Inbox.