Colorscheme

Trackbacks mit php verarbeiten


Vorgestern habe ich euch ja geschildert, wie man einen Trackback mit Hilfe der Klasse PHP Trackback schicken kann. Heute will ich das Ganze von der anderen Seite demonstrieren und werde beschreiben wie ihr in eurer Applikation Trackbacks von andern Blogs etc. empfangen könnt.

Um einen Trackback empfangen zu können, sollte man als erstes wissen wie dieser aussieht. Dazu gucken wir uns doch mal die Function “ping” in der PHP Trackback Klasse an und erkennen, dass ein Trackback ein HTTP_POST Request an eine bestimmte Trackback-Url mit den Parametern $tb $url $title und $excerpt ist. Mit diesem Wissen könne wir und eine php Datei bauen, die diesen Request in Empfang nimmt und die entsprechende Antwort darauf gibt. Die Antwort, die erwartet wird, ist ein XML Dokument mit dem Element “error” das 0 für Erfolg oder 1 für Fehler zurück gibt (siehe “recieve” Funktion in der PHP Trackback Klasse).

Für das Code Beispiel benutze ich folgende Trackback url: trackback.php?id=xy. Damit stellen wir mit der GET Variable sicher, dass ein Beitrag etc. genau einen Trackback url besitzt, über die er ansprachbar ist. Für die Speicherung der Trackbacks auf dem Server nutze ich eine einfache mysqlTabelle: (Achtung: Das Statement ist für mysql5 und funktioniert so nicht auf mysql4!)

CREATE TABLE `trackbacks` (
`trid` int(11) NOT NULL auto_increment,
`id` int(11) NOT NULL,
`fromurl` varchar(100) collate latin1_general_ci NOT NULL,
`title` varchar(50) collate latin1_general_ci NOT NULL,
`text` varchar(255) collate latin1_general_ci default NULL,
`timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
PRIMARY KEY (`trid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

Nun die php Datei trackback.php für das Empfangen der Trackbacks:

//die antwort für den Trackback sender wird als XML ausgegeben
header('Content-Type: text/xml');

//Einbinden der php trackback Klasse
include('includes/trackback_cls.php');

//Neues trackback Object instanzieren
$trackback = new Trackback('openKE.org','openKE.org','UTF-8');

//die Trackback Parameter aus den GET bzw POST Variablen des Requests auslesen
$tb_id = $_GET['id'];
$tb_url = $_POST['url'];
$tb_title = $_POST['title'];
$tb_expert = $_POST['exerpt'];

//Zur Datenbank verbinden - Anpassen auf eigene DB Methodiken!
require('mysql_connect.php');

//Trackback in einer DB Tabelle sichern
$SqlInsert = 'INSERT INTO trackbacks (trid, timestamp, id, title, text, fromurl) '.
"VALUES (' ', now(), '".$tb_id."', '".$tb_title."', '"
.$tb_expert."', '"
.$tb_url."')";

$result = mysql_query($SqlInsert);
if (!$result) { die('Invalid query: ' . mysql_error()); };

//XML Antwort für den Trackback Sender generierten und zurück liefern
echo $trackback->recieve(true);

Der php Code ist noch etwas ausbaufähig: es fehlt noch eine Überprüfung der POST bzw. GET Parameter auf Gültigkeit, eine Überprüfung ob der Trackback bereits angekommen und gespeichert worden ist und das wichtiste: SPAM Schutzmaßnahmen, wie ein Bad-Word Filter oder ähnliches.


Verwandte Artikel
  1. Trackbacks per php senden
  2. MySQL Assoziation Problem – Anzeige von Verbindungen
  3. Was sind Permalinks und Trackbacks
  4. Webdesign Guide – die Arbeitsumgebung
  5. Bei Trackback und Permalink Problemen

am Dezember 20, 2006 um 14:15 Uhr | in Allgemein | 6 Kommentare

1 Trackbacks/Pingbacks
  1. Trackback: Find engine batteries on Juli 15, 2008

5 Kommentare
  1. Martin Labuschin, Dezember 20, 2006:

    Ich habe mir in ähnlicher Form auch schon ein Trackback-Empfangssystem programmiert. Mich störte danach nur der massive Spam der dann schlagartig aufkam. Eine Moderation war geradezu unmöglich. Vielleicht ein Ansatz für deinen nächsten Artikel.

    Ich arbeite gerade an einer Art Trackback-Anti-Spam-Lösung. Ich prüfe einfach die Seite hinter dem Permalink auf das Vorkommen meiner URL. Fallen dir noch weitere Anti-Spam Lösungen ein?

  2. Erich Holzbauer, Dezember 20, 2006:

    Die Idee mit dem url gegenchecken ist schon gut, allerdings ist für spam bots auch ein leichtes so eine seite zu produzieren, die diesen schutz aushebelt.

    wenn ich ein wirksame spam lösung wüsste wäre ich jetzt schon reicher mann. :) der beste schutz wäre eine white-list, die ist aber kompliziert zu warten und es landen viele echte kommentare im müll. ein ansatz der eigentlich viel gelobt wird ist der greylist ansatz.

    um speziell für trackbacks einen spam schutz zu entwickeln, sollte man sich im vorfeld überlegen was die charakeristiker eines trackbacks sind die man überprüfen könnte. das hast ja du schon mit deinem url gegencheck-ansatz gemacht. man könnt zb. auch stichworte aus dem angepingten text mit dem text des trackback senders vergleichen und auf basis eines relevanz rankings den trackback verwerfen oder annehmen. dann stellt sich aber die frage, wie oder mit welchen aufwand kann der spam bot die geforderten schutzbedingungen faken und somit den filter aushebeln?

    nur mal ein schneller gedanken, vielleicht fällt mir noch mehr ein, dann schreib ich drüber nen kurzen artikel! wie sind denn deine erfahrungswerte mit deinem ansatz?

  3. Michael, Dezember 20, 2006:

    Ich habe mit Simple Trackback Validation ein WordPress-Plugin entwickelt, das mit Hilfe der bekannten PHP-Klasse Snoopy (von Monte Ohrt) eben prüft, ob auf der Gegenseite verlinkt wird. Der Plugin-Code ist dabei sicherlich auch für andere PHP-Anwendungen brauchbar. Den Hauptjob macht dabei Snoopy.

    Ich habe die Erfahrung gemacht, dass dies für die meisten Spams ausreicht, aber wie von Erich schon erwähnt gibt es “besseren” Spam, der auf der Gegenseite temporär verlinkt. Entspricht bei mir schätzungsweise 2-5% des Trackback-Spam. Für diesen Spam empfehle ich dann, einen weiteren Schutz einzusetzen, z.B. Akismet, was mittlerweile über 20 verschiedene CMS unterstützt. Mit dieser Kombination fahre ich sehr gut und würde ich auch sofort in jedem anderen CMS oder Blog-System einsetzen.

  4. Stenko, Dezember 22, 2006:

    @Michael
    Snoopy kannte ich noch gar nicht, klingt gut.
    Warum hast Du nicht curl verwendet, kann snoopy mehr oder ist sonstwie besser?

  5. Christian Melzer, August 17, 2007:

    Hallo Christian,

    vielen Dank für den Artikel. Da es keine anständigen Tutorials zu dieser Klasse gibt, war dein Beitrag für mich sehr hilfreich.

    Sobald man 5 Minuten mit der Klasse gearbeitet hat, hat man auch das System verstanden und es ist wirklich “easy to use”.

    Leider hat sich in deinem Artikel der Fehlerteufel eingeschlichen:

    $tb_expert = $_POST['exerpt'];

    Der $_POST Wert muss expert und nicht exERPt lauten.

    Viele Grüße
    Christian

Tut mir leid, die Kommentarfunktion für diesen Beitrag ist geschlossen.