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:
- „Lange“ URL (Real-URL) per Parameter ?url=… an das Skript übergeben.
- Überprüfung, ob die Domain auf der Whitelist steht – das ist natürlich die Domain der eigenen Website.
- Parsen des kompletten Quelltextes und Ablegen in ein Array.
- Abfrage, ob es sich um ein Dossier handelt oder nicht.
- Auslesen des Wertes für „docID“ (Dossier) oder „input_“ (kein Dossier).
- Zusammensetzen der Kurz-URL und HTML-Ausgabe des Ergebnisses.
- 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! br>";
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 "";
?>
And in other news...
Artikel-Tools:
Shortlink:
Pingback: Eigener URL-Verkürzer: Warum man selbst einen Shortener betreiben sollte | in other news — Blog von Niko Wald