ASP Classic

Trackback mit ASP realisieren

Blog-Feature Marke 'Eigenbau' für den IIS

Eine der Errungenschaften der letzten Jahre ist mit Sicherheit das Bloggen, also das Führen von Online-Tagebüchern (Web-Logs > Blogs). Ein Grund für den Siegeszug dieser Art von Internet-Inhalten ist sicherlich die zu diesem Zweck entstandene Software, denn sie ermöglichte erstmals, dass auch Menschen ohne Kenntnisse von HTML und Co., schnell und einfach Artikel im Internet veröffentlichen konnten. Blog-Software funktioniert dabei ähnlich wie eine normale Textverarbeitung: man schreibt einen Beitrag, gibt ihm eine gewisse Form und fertig.

Einer der Blog-Pioniere, die amerikanische Firma Six Apart, die mit Movable Type eines der leistungsstärksten Programme am Start hat, ersann im Jahr 2002 ein System der Verknüpfung einzelner Blog-Beiträge, um den Benutzern die Möglichkeit zu geben, festzustellen, wer in anderen Artikeln Bezug auf den eigenen nimmt: das Trackback-System. Bei diesem System tauschen die beteiligten Web-Server, auf dem die Blog-Software läuft, automatisch Nachrichten aus, um zwischen den Beiträgen eine Beziehung herzustellen. Das Ganze funktioniert nach folgendem Szenario:

  1. Autor A schreibt einen Artikel auf Grundlage eines Beitrags von Autor B
  2. Autor A gibt vor dem Speichern eine sog. Trackback-URL an, die Autor B für seinen Artikel veröffentlicht hat
  3. Server A sendet per XMLHTTP-Request an die Trackback-URL auf Server B eine Nachricht (sog. Ping) mit folgenden Informationen:
    • Name des Autors oder des Webs (optional)
    • Titel des neuen Artikels (optional)
    • Kurzbeschreibung des neuen Artikels (optional)
    • URL des neuen Artikels (erforderlich)
  4. Server B empfängt die Nachricht und verarbeitet sie z.B. zu einem Artikelkommentar

Die einzig erforderliche Aktion liegt bei Autor A, denn er muss zu seinem Artikel die Trackback-URL des Beitrags B angeben. Den Rest erledigen die beteiligten Server, bzw. die dort installierte Blog-Software.

Inzwischen kann es sich keine Anwendung aus diesem Bereich mehr leisten ohne Trackback-Unterstützung auszukommen. Durch diese Technik entstehen richtige Informationsnetze und bei konsequentem Einsatz kann man einen Information immer wieder bis zu ihrem Ursprung zurückverfolgen. Six Apart hat zu Trackback eine technische Spezifikation geschrieben, die man sich einmal anschauen sollte.

Internet-Benutzer, die Ihre Artikel auf die herkömmliche Art und Weise, also per HTML-Coding, erstellen, müssen nicht auf Trackback verzichten, denn inzwischen gibt es fast für jede server-seitige Sprache wie PHP et cetera mehrere Implementationsanleitungen. In Sachen ASP muss man jedoch etwas suchen, denn es ist gegenüber PHP eher ein Nischenprodukt. Ich bin jedoch bei ASPit fündig geworden. Dennis Pallet beschreibt dort in Kurzfassung den Umgang mit dem XMLHTTP-Objekt unter ASP und die Grundlagen eines ASP-Trackback-Systems.

Auf Basis dieses Artikels, habe ich ein Trackback-System für zerbit.de entwickelt, das ich hier vorstellen möchte.

Trackbacks senden

Basis eines sog. Trackback-Pings, also dem Senden eines Trackbacks, ist ein Formular, das in diesem Beispiel lediglich drei Felder für die Trackback-Informationen, ein weiteres für die Trackback-URL des zu referenzierenden Beitrags und eine Schaltfläche enthält. Web-Master, die Ihre Artikeldaten über die Oberfläche ihres Webs eingeben, können dieses noch um entsprechende Felder und eine Speicherroutine ergänzen. Wir beschränken uns hier einmal auf das Senden eines Trackbacks.

<form method="post" name="frmNewTrackback"
   action="set_trackback.asp">
<table>
   <tr>
      <td width="80" height="25">Trackback-URL:</td>
      <td>
         <input type="text" name="txtTrackbackURL" size="80">
      </td>
   </tr>
   <tr>
      <td width="80" height="25">Beitrags-URL:</td>
      <td>
         <input type="text" name="txtArticleURL" size="80">
      </td>
   </tr>
   <tr>
      <td width="80" height="25">Beitragstitek:</td>
      <td>
         <input type="text" name="txtArticleTitle" size="80">
      </td>
   </tr>  
   <tr>
      <td height="20" valign="top">Beschreibung (Excerpt):</td>
      <td>
         <textarea rows="6" name="txtArticleExcerpt" cols="80"></textarea>
      </td>
   </tr>
   <tr>
      <td colspan="2">
         <input type="submit" value="Senden" name="cmdSendTrackback">
      </td>
   </tr>
</table>
</form>

Für den Namen des Autors bzw. des Webs brauchen wir kein Feld, denn diese Information wird in der vom Formular aufgerufenen ASP-Seite set_trackback.asp fest verdrahtet. Der Inhalt dieser Seite, die das Senden des Trackbacks übernimmt, nun der Reihe nach:

In den ersten Zeilen werden zunächst die Formularfelder mit den Information ausgelesen.

<% @ LANGUAGE="VBScript" %>

strTrackbackURL = Request.Form("txtTrackbackURL")
strArtURL = Request.Form("txtArticleURL")
strArtTitle = Request.Form("txtArticleTitle")
strArtExcerpt = Request.Form("txtArticleExcerpt")
strBlogName = "Mein Blog"

Bevor wir uns mit dem Code zum Senden befassen, ein paar Worte zum XMLHTTP-Objekt, über das die Kommunikation mit dem anderen Web-Server läuft. Mit dem Objekt, das es in ähnlicher Form in fast jeder Internet-Programmiersprache gibt, kann mal XML-Daten von anderen Web-Servern abrufen. Die Kommunikation funktioniert genauso wie in einem Web-Browser, der auch nicht anderes macht, als bei einem Web-Server nachzufragen, ob er diese oder jene HTML-Datei haben könnte. Das Ergebnis eines solchen HTTP-Requests ist im Falle des XMLHTTP-Objekts immer ein XML-Dokument.

Die Anfrage, die wir schicken möchten ist ein POST-Request, da wir dem anderen Web-Server ja noch ein paar Informationen mitgeben möchten und diese unter Umständen etwas größer werden können. Prinzipiell würde auch ein GET-Request funktionieren, aber dort ist zu Menge der zulässigen Zeichen limitiert, daher hat Six Apart in der Trackback-Spezifikation ein POST vorgeschrieben. Bauen wir uns im Code also zunächst einen Request-String zusammen:

strPostData = "title=" & Server.URLEncode(strArtTitle) & _
   "&excerpt=" & Server.URLEncode(strArtExcerpt) & _
   "&url=" & Server.URLEncode(strArtURL) & _
   "&blog_name=" & Server.URLEncode(strBlogName)

Jeder Teil des Strings muss URL-codiert werden, was die Methode Server.URLEncode erledigt. Da lediglich die Artikel-URL Pflicht ist, könnte man hier nun noch ein paar IF-Statements einbauen, um nicht unnötigerweise leere Zeichenfolgen mitzuschicken. Im Beispiel gehen wir mal davon aus, dass alle Informationen vorliegen, was im Übrigen auch für den empfangenden Autor angenehmer ist und von allen Trackbacker'n beherzigt werden sollte.

Zunächst wird das XMLHTTP-Objekt initialisiert. Mit Open und den Parametern POST, der Trackback-URL und der Angabe, ob der Zugriff asynchron erfolgen soll, wird eine Verbindung zum Web-Server hergestellt. Als nächstes wird im Request-Header für ContentType festgelegt, dass die Daten die folgen URL-Codiert sind. Zuletzt wird über die send-Methode der zuvor zusammengestellte Request-String an den Server geschickt.

Set objHTTP = Server.CreateObject("MSXML2.ServerXMLHTTP")

objHTTP.Open "POST", strTrackbackURL, false
objHTTP.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
objHTTP.Send (strPostData)
Da wir die Daten synchron versandt haben, können wir die Antwort vom Server nach Ablauf des Sendevorgangs auswerten. In der Trackback-Spezifikation wurde festgelegt, dass der anfragende Server ein XML-Dokument zur Bestätigung des Pings zurückgeschickt bekommt. Dieses könnte im Falle eines Fehlers so aussehen:

<?xml version="1.0" encoding="utf-8"?>
<response>
   <error>1</error>
   <message>Es ist ein Fehler aufgetreten!</message>
</response>

Wenn alles in Ordnung ist so:

<?xml version="1.0" encoding="utf-8"?>
<response>
   <error>0</error>
</response>

Diese Antwort können wir nun auswerten. Auf die beiden Folgeseiten im Beispiel-Code gehe ich nicht weiter ein, denn sie dienen lediglich dazu dem Benutzer den Zustand seines Trackback-Versands anzuzeigen, wobei die error.asp noch den kompletten Inhalt des XML-Dokuments mitgeschickt bekommt, um die Fehlermeldung des anderen Web-Servers darstellen zu können.

If InStr(1, objHTTP.responseText, "<error>0</error>") Then
  
Response.redirect("success.asp")
Else
  
Response.redirect("error.asp?msg=" & objHTTP.responseText)
End If

Was noch bleibt ist das Objekt wieder zu schließen. Ordnung muss sein.

Set objHTTP = Nothing

Trackbacks empfangen

Nach der etwas "umfangreicheren" Aktion des Sendes, wird es nun einfach. Trackbacks empfangen heißt nichts anderes, als den POST-Request eines anderen Web-Servers zu verarbeiten, wie man es auch beim Senden eines Formulars vollzieht.

strURL = Trim(Request.Form("url"))
strBlogName = Trim(Request.Form("blog_name"))
strTitle = Trim(Request.Form("title"))
strExcerpt = Trim(Request.Form("excerpt"))

Um nicht für jeden Artikel eine Trackback-ASP-Seite schreiben zu müssen, sollten alle Artikel in einer Datenbanktabelle erfasst sein und jeder Datensatz einen eindeutigen Schlüssel ID besitzen. Damit hat man die Möglichkeit der Trackback-URL mit Hilfe eines Parameters dynamisch zu gestalten.

Beispiel für den Artikel mit der ID 12:   http://www.meinweb.de/artikel/trackback.asp?id=12

Diese ID lesen wir nun per Response.QueryString aus:

strArtID = Request.QueryString("id")

... Speicherung der Daten in einer Datenbank

Diese Informationen muss man nun nur noch in eine Datenbank schreiben, um sie später z.B. unter dem Artikel als Kommentar darzustellen.

Das Ganze findet in einer separaten ASP-Datei statt, da sie gleichzeitig die Antwort im XML-Format liefern muss. Dazu setzen wir als nächstes den Content-Type auf XML:

Response.ContentType = "text/xml"

Sollten die Daten unvollständig sein, d.h. die Artikel-URL oder die in der URL enthaltene ID fehlen, wird eine entsprechende Fehlermeldung generiert:

If len(strURL) = 0 Then
   strErrMsg = "No URL included in TrackBack"
End If

If len(strArtID) = 0 Then
   strErrMsg = "Article-ID in URL is missing"
End If

Schlägt beim Speichern des Trackbacks in der Datenbanktabelle ein Fehler auf, sollten ebenfalls ein entsprechende Fehlermeldungen generiert werden. Am besten ebenfalls in englischer Sprache, um Nicht-Muttersprachler nicht zu verwirren ;)

Mit diesen Informationen können wir nun die XML-Struktur schreiben.

If Len(strErrMsg) > 0 then
   Response.Write "<?xml version=""1.0"" encoding=""utf-8""?>"
   Response.Write "<response>"
   Response.Write "   <error>1</error>"
   Response.Write "   <message>" & strErrMsg & "</message>"
   Response.Write "</response>"
Else
   Response.Write "<?xml version=""1.0"" encoding=""utf-8""?>"
   Response.Write "<response>"
   Response.Write "   <error>0</error>"
   Response.Write "</response>"
End If

Das wars. Fertig ist der Trackback-Empfänger.

Weiterführende Informationen:

kick it on dotnet-kicks.de AddThis 0 wikio-Stimme(n) Trackback-Url...

6 Kommentare bislang...

  • @Gregor:

    Du wirst es nirgends finden, denn in diesem Artikel geht es um das schon recht betagte Classic-ASP.
    Implementierungen in ASP.NET laufen völlig anders. Schau mal in meinem letzten Artikel Spam sichere Trackbacks. Da gehe ich unter anderem darauf ein, wie man Trackback in .NET verwirklicht.
    6
    Kristof : Dienstag, 22. April 2008 07:41
  • Hallo,
    ich kann das "Server.CreateObject" nirgends in meinem Namspace finden. Wie kann ich das objekt in meinem Projekt nutzen? Using .... ??

    Wäre um Hilfe dankbar..

    Grüße

    Gregor
    5
    Gregor : Montag, 21. April 2008 14:30
  • neue Funktionen online

    Es hat zum Schluß wirklich keinen Spaß mehr gemacht. Aber jetzt habe ich sie fertig! Auf mbn-digital.de ist jetzt neu die »Kommentar«-Funktion hinzugekommen.
    Bei der Gelegenheit habe ich auch gleich noch etwas ...

    http://www.mbn-digital.de/page.asp?DocumentID=254

    4
    TRACKBACK : mbn-digital.de : Dienstag, 30. Januar 2007 02:54
  • Trackbacks legen

    Wir haben selbst gerade eine Funktion für Trackback-Links auf unseren eigenen Seiten aktiviert. Doch wie programmiert man diese Blogger-Funktion für die eigene Website?

    http://www.tripple.net/contator/webwizard/news.asp?nnr=23741

    3
    TRACKBACK : contator.net: WebWizard News : Freitag, 22. Dezember 2006 19:50
  • Sehr fein, dank des Artikels konnte ich Trackback ohne Probleme auch in meine Homepage integrieren. Wie mein Vorredner schon erwähnte: genau das, was ich gesucht habe :)
    2
    Markus Huszar : Donnerstag, 3. August 2006 08:37

Dein Kommentar hierzu...


Kommentar-Feed für diesen Beitrag
Gravatare werden unterstützt .:. eMail-Adressen werden nicht veröffentlicht
 

RSS-Feed

Die URL des Standard-Newsfeed von zerbit.de lautet:

http://www.zerbit.de/rssfeed.aspx

Login


 

 

Statistik



kürzlich kommentiert

Artikel 55

  • Datum: 31.12.2005
    Kategorie: ASP Classic
    Zugriffe: 9.015
    Kommentare: 6
    Trackbacks: 4

Letzte Beiträge

Kategorien

Buttons & More

Blog-Roll

Banner Piraten-Partei