Government Site Builder: Kurz-URL mit Bordmitteln erstellen

Sie haben online Großes vor?

Vom persönlichen Blog bis zur mehrsprachigen Site: Was sind Ihre Wünsche fürs Web?
Senden Sie mir eine Nachricht — gemeinsam kommen wir weiter!

Kurz-URLs sind eine sinnvolle Sache: Begrenzte Zeichenzahl, Zeilenumbruch-Probleme, eine andere Real-URL nach redaktioneller Änderung der Überschrift – das alles lässt sich mit einer kurzen, eindeutigen URL umgehen. Der Einsatz von externen Verkürzern wie bit.ly ist im professionellen Umfeld meistens keine gute Idee. Zum einen gibt man die Hoheit über die technischen Aspekte der Weiterleitung aus der Hand (Auswertung, Reporting, HTTP-Codes…), zum anderen gibt es keine Sicherheit, dass der Dienst auch in Zukunft verfügbar ist und er seriös auf die Ziel-URL weiterleitet – ohne Einblendung von Werbung oder dem Versuch, Schadcode einzuschleusen. Einmal angelegt sind Kurz-URLs bei Drittanbietern oft auch nicht mehr änderbar. Das ist dann ärgerlich, wenn sich die URL der Zielseite ändert – etwa, wenn man redaktionell die Überschrift anpasst und sich dadurch die Real-URL („sprechende URL“) ändert.

Ein eigener Verkürzer?

Es liegt daher nahe, sich in der eigenen Redaktion um den Aspekt URL-Verkürzer zu kümmern. Eine Möglichkeit ist es, mit Open-Source-Produkten wie Yourls zu arbeiten. Ein solches Tool wird auf dem eigenen Server installiert. Es benötigt klassischerweise PHP und MySQL. Die API ist hervorragend, sodass es Browser-Plugins/-Bookmarklets und sogar Apps gibt, die beim Eindampfen der URL helfen. Die Admin-Oberfläche ist per Browser erreichbar.

Manchmal ist es aber nicht möglich, einen eigenen Dienst einzurichten. Manchmal wird mit der Sicherheit argumentiert, manchmal findet sich niemand, der Hosting und Wartung übernehmen kann, und manchmal dauert es einfach länger, bis Ressourcen für den Aufbau eines eigenen URL-Verkürzers bereitstehen.

Manchmal kann das eigene CMS mehr, als man denkt

In einem solchen Fall kann es sich lohnen, sich das eigene Content Management System (CMS) anzuschauen – möglicherweise bietet es eine Übergangslösung. Wer mit WordPress arbeitet kennt Permalinks. Typo3-User wissen sich mit dem Schema „id=123“ zu behelfen. Und auch für den Government Site Builder (GSB), mit dem viele Verwaltungen und Ministerien, arbeiten gibt es eine solche, leider undokumentierte Funktion.

Quellcode genau anschauen

Jede Seite, die der GSB ausliefert, enthält eine einmal vergebene ID. Allerdings ist diese ID nicht gut erkennbar in einem (XML-) Tag enthalten, sondern sie findet sich etwas versteckt im Parameter-Set der Site-Search:

Das ist bei allen Seitentypen so – außer beim Format „Dossier“. Bei diesem Format bleibt der Wert „input_“ für alle Seiten des Dossiers gleich. Stattdessen wird als URL-Parameter der Wert „docId“ ausgeliefert, etwa:

?docId=9106928

Dieser Wert entspricht der einmaligen ID.

Die ID lässt sich zum Erstellen einer Kurz-URL nutzen:

http://bmel.de/goto?id=9106928

Diese IDs bleiben konsistent, auch wenn sich der Inhalt der Seite ändert. Die ID ist nur dann nicht mehr aufrufbar, wenn die Seite gelöscht oder depubliziert wird. Erneut vergeben wird die ID nicht.

Skript automatisiert Kurz-URL-Erzeugung

Mit einem Skript ist es relativ einfach möglich, die Kurz-URL zu generieren. Diese Schritte sind nötig:

  1. „Lange“ URL (Real-URL) per Parameter ?url=… an das Skript übergeben.
  2. Überprüfung, ob die Domain auf der Whitelist steht – das ist natürlich die Domain der eigenen Website.
  3. Parsen des kompletten Quelltextes und Ablegen in ein Array.
  4. Abfrage, ob es sich um ein Dossier handelt oder nicht.
  5. Auslesen des Wertes für „docID“ (Dossier) oder „input_“ (kein Dossier).
  6. Zusammensetzen der Kurz-URL und HTML-Ausgabe des Ergebnisses.
  7. In allen anderen Fällen: Ausgabe einer Fehlermeldung.

Pluspunkte für Erzeugung mit Bordmitteln

Der Vorteil ist, dass das Skript extern läuft und nur auf sowieso verfügbare Informationen zurückgreift, die per Quelltext ausgeliefert werden. Der Nachteil ist, dass bei Änderung des Website-Templates – etwa bei einem Relaunch – diese Methode womöglich nicht mehr funktioniert.

Mögliche Erweiterungen des Skripts

  • Verbessertes Abfangen von Fehlern (derzeit wird das Skript nur intern genutzt, daher ist „as is“ OK.
  • Möglichkeit, eine Kampagnen-ID für das Reporting mit in die Ziel-URL zu integrieren.
  • Bessere oder schönere Gestaltung der Konvertierungs-Seite, einschließlich bessere Ausgabe von Umlauten.
  • Erweiterung auf andere Websites im Geschäftsbereich, um sie anderen Redaktionen zur Verfügung stellen zu können.

Der Quellcode


loadHTML($html);
//White Space entfernen
$dom->preserveWhiteSpace = false;

//Alle Input-Tags als Liste
$input_tags = $dom->getElementsByTagName('input');

//Alle Zeilen auslesen
for ($i = 0; $i < $input_tags->length; $i++)
{
if( is_object($input_tags->item($i)) )
{
$name = $value = '';
$name_o = $input_tags->item($i)->attributes->getNamedItem('name');
if(is_object($name_o))
{
$name = $name_o->value;

$value_o = $input_tags->item($i)->attributes->getNamedItem('value');
if(is_object($value_o))
{
$value = $input_tags->item($i)->attributes->getNamedItem('value')->value;
}

$post_data[$name] = $value;
}
}
}

return $post_data;
}

/* HTML-Dokument bauen */

echo "";
echo "

";
echo " ";
echo "

";
echo "";

/* Ziel-URI aus URL-Parameter extrahieren */

$url = $_GET["url"];

/* Domain und TLD extrahieren; für spätere Überprüfung */

$host = parse_url($url, PHP_URL_HOST);
$splitHost = explode('.',$host);
$cnt = count($splitHost);
echo "Domain: ".$splitHost[$cnt-2].'.'.$splitHost[$cnt-1]."
";

/* title-Tag aus HTML-Quellcode extrahieren */

error_reporting(~E_WARNING);
$html = file_get_contents($url);
$title = '';
$dom = new DOMDocument();

if($dom->loadHTMLFile($url)) {
$list = $dom->getElementsByTagName("title");
if ($list->length > 0) {
echo "Titel: ".utf8_decode($title = $list->item(0)->textContent)."
";
}
}

/* Ausgabe */

echo "Quell-URL: " . $url . "
";
if ($splitHost[$cnt-2].'.'.$splitHost[$cnt-1]=="bmel.de") {
if (strpos($url,"?docId=")!==false) {
echo "Dossier!";
echo "Ziel-URL: "
.
"http://bmel.de/goto?id="
.
substr($url, -7, 7)
.
"
";
}
else {
echo "Ziel-URL: "
.
"http://bmel.de/goto?id="
.
get_input_tags($html)["input_"]
.
"
";
}
}
else {
echo "Fehler: Es können nur URLs von bmel.de verarbeitet werden.";
}

/* HTML-Dokument schließen */
echo "";
echo "";
?>


Artikel-Tools:

Shortlink:

Niko Wald

inothernews.de ist der private und nicht-dienstliche Blog von Niko Wald - Journalist, Webmaster, Projektmanager, Redakteur und Onliner.   Politikwissenschaftler und Volkswirt, langjährige Arbeit als freier Journalist bei Tageszeitungen und Online-Redaktionen, ausgebildeter Tageszeitungs-Redakteur, Arbeit als Redakteur in einer aktuellen Printredaktion und als Online-Redakteur für die Öffentlichkeits- und Pressearbeit der internationalen NGOs Brot für die Welt und Diakonie Katastrophenhilfe. Heute im Bundesministerium für Ernährung und Landwirtschaft (BMEL). Seit 1999 begeistert von Botswana (Afrika).   Kanäle: Online,Online, Foto, Video, Audio und Print.   Stationen: Rhein-Hunsrück-Zeitung (Simmern), Der Weg (Saarbrücken), Die Rheinpfalz (Ludwigshafen), Rheinpfalz online (Ludwigshafen), Rhein-Neckar-Zeitung (Heidelberg), Rhein-Zeitung (Mayen, Andernach, Koblenz), Brot für die Welt und Diakonie Katastrophenhilfe (Stuttgart und Berlin), Bundesministerium für Ernährung und Landwirtschaft (BMEL, Berlin).   Außerdem (in freier Tätigkeit): Beratung von und Workshops für Kommunen, Universitäten, Kirchenkreise und Landeskirchen. Wissenstransfer und -vermittlung für Medienarbeit und Journalismus, Strategieentwicklung für Öffentlichkeits- und Medienarbeit, Projektmanagement für Websites und Onlineprojekte   Kontakt: nwx@inothernews.de oder @inothernews_de