Bernhard Häussner

Shortlinks implementiert

22.05.2009, 20:09

Da mein Domainname doch recht lang zu tippen ist, und sich für twitter sowieso kurze URLs gut eigenen, habe ich jetzt auf dieser Seite die meisten Seiten mit kurz-URLs ausgerüstet. So kann man jetzt z.B. mit meinem ShortURL Auto-Discovery Twitter Bookmarklet ohne Probleme Links auf diese Seite posten und man muss nur noch 1-co.de in die Adressleiste tippen, um auf die Startseite zu kommen.

Die Shortlinks werden auf den entsprechenden Seiten mit dem HTML-Tag <link rel="shortlink" href="http://1-co.de/bj" /> und mit dem HTTP-Header Link: <http://1-co.de/bj>; rel=shortlink ausgewiesen.

Hauptsächlich möglich wird das durch ein paar manuelle Einträge in der .htaccess und durch diese zwei bzw. vier netten Helfer-Funktionen (PHP), die Zahlen (int) in Zeichenfolgen (Strings) umwandeln, wodurch sie rund 20-40% kürzer werden:

function toAlphaNumber($num){
  $anum = '';
  $BASE=62;
  while ($num>=1) {
    $x=$num%$BASE;
    $anum=chr2($x).$anum;
    $num=floor($num/$BASE);
  }
  return $anum;
}
function fromAlphaNumber($str){
  $BASE=62;
  $num=0;
  for ($i=0,$len=strlen($str);$i<$len;$i++) {
    $num+=uchr2($str{$i})*(pow($BASE,($len-1-$i)));
  }
  return $num;
}
function chr2($i) {
  $i+=48;
  if ($i>57) $i+=7;
  if ($i>90) $i+=6;
  if ($i>122) throw new Exception('Too high');
  $c=chr($i);
  return $c;
}
function uchr2($c){
  $i=ord($c);
  if ($i>122) throw new Exception('Too high');
  if ($i>90) $i-=6;
  if ($i>57) $i-=7;
  $i-=48;
  return $i;
}

In der .htaccess:

#manual shortening
RewriteRule ^b$ http://bernhardhaeussner.de/blog [R=301,L]
# [...]

#call a php script that redirects to the right blog post
RewriteRule ^b/([A-Za-z0-9]+)$ blogentry.php?encid=$1 [L]

Jetzt bin ich ja mal gespannt, wie viele Leute meine Posts twittern...

Für Wordpress-User (Update 2009-06-23)

Wer sich mit nichts herum ärgern will und ein ausgereiftes und einfach konfigurierbares Plugin sucht, ist mit dem Plugin Twitter Friendly Links (empfohlen von eins78) gut aufgehoben.

Für Wordpress-User & Bastler (Update 2009-06-20)

Auf Anfrage von eins78 hier noch drei Ticks für Wordpress-Blogs: Theoretisch können auch Worpress-Autoren einfach das Bookmarklet ins HTML-Markup der Seite setzten, es ist ja ein ganz normaler Link. Allerdings funktioniert es nicht ohne Javascript und es gibt folgende elegante Lösung:

Empfehlenswerter und fast genauso einfach ist es, dieses Plugin zu benutzen: Es kümmert sich nicht nur um die Erstellung von kurz-URLs und den entsprechenden Link-Tag im <head>-Bereich: Es erstellt u.a. eine globale Variable $shortlink_url in der die kurze URL gespeichert ist. Dann muss man nur noch im Template-Ordner wp-content/themes/(templatename)/ in der (index.php) folgendes in das Template setzen:

<?php if ( isset($shortlink_url) && $shortlink_url!='' ): ?>
  <a
   href="http://twitter.com/home/?status=check+out+<?php echo $shortlink_url;?>"
   rel="nofollow shortlink"
  >
  tweet this
  </a>
<?php endif; ?>

Ich habe es probeweise im default-Template direkt in das <small> gesetzt, in dem auch Datum und Autor stehen, dann wird es klein unter der Überschrift angezeigt. Die Darstellung des Links lässt sich natürlich noch anpassen. Nachteil an dem Plugin ist, dass die Weiterleitung nicht auf Anhieb funktioniert. Man müsste erst ungefähr so etwas in die .htaccess schreiben:

RewriteRule ^([0-9]+)$ ?p=$1 [R=301,L]

Eine Lösung ganz ohne Plugin hat Thomas Scholz veröffentlicht. Sie „schont die Optionstabelle und erleichtert individuelle Anpassungen“. Allerdings enthalten die Kurzlinks ?p=, weshalb die URLs nicht ganz so schön werden.

Kurze URL http://1-co.de/b/14. Post to twitter

Kommentare

eins78 meint: (#181)
20.06.2009, 14:01

Sehr schöner Lösungsansatz, danke schonmal für die Codeschnipsel.
Aber ein Problem habe ich noch mit dieser Lösung: Wer das Bookmarklet nicht hat, sieht die Kurz-URL nicht… (Außer man schaut mal schnell im Quelltext nach, ist mit Firebug ja kein Problem. Würde ich ich aber nicht unter "Usabilty" verbuchen ;)
Da ich für ein eigenes Projekt gerade eine ähnliche Umsetzung plane, bin ich in der Meinung, das entweder der Permalink der Überschrift auf die Kurz-URL zeigen sollte oder z.B. unter dem Artikel ein Hinweis steht "Dieser Beitrag kann auch verlinkt werden unter: http://1-co.de/b/14";.
Da ich Wordpress einsetze, sollte man das mit einem Plugin lösen können, aber fällt dir aufbauend auf deinem Ansatz vielleicht ein eleganterer, allgemeingültiger Weg ein?

Bernhard H. meint: (#182)
20.06.2009, 16:16

In der Tat - ein Wordpress-Plugin nimmt dir schon mal viel Arbeit ab. Die kurz-URL auch sichtbar in die Seite einzufügen ist eine sehr gute Idee und man kann, wenn das Plugin installiert ist, mit wenigen Zeilen im Template einen entsprechenden Link/Button platzieren. Zugegeben, ich bin nicht gerade Wordpress-Spezialist, aber ich konnte eine ansehnliche Lösung finden. Ich habe den Post entsprechend geupdated. (Mit anderen Plugins oder Eigenlösungen sollte es ähnlich klappen. )

Bernhard H. meint: (#183)
20.06.2009, 23:54

Ich habe auch noch eine Lösung ohne Plugin gefunden und sie in den Post gestellt.
Außerdem findet man jetzt im meta-Bereich unter jedem Blogeintrag einen Kurzlink mit twitter-Funktion.

eins78 meint: (#184)
21.06.2009, 15:37

Vielen Dank für die weiteren Informationen. Das Shortlink Plugin funktioniert leider nicht auf Anhieb (fügt zwar den Code in den Header ein, aber wenn man diese URL dann eingibt kommt ein 404).
Außerdem gibt es verschiedene weitere Plugins, die sich um die Erstellung der Links kümmern, mit einer ganzen Bandbreite an verschiedenen Funktionen, teilweise wird ein extra shortlink-Wert in der Tabelle angelegt, was im WP-Kontext mir als eine ganz schlechte Lösung erscheint, denn jeder Beitrag hat ja schon eine eindeutige ID.

Die kürzeste Lösung, die ich bis jetzt gefunden habe funktioniert nur, wenn der Blog die URL-Form http://example.com/ID/name benutzt, dann funktioniert nämlich auch automatisch http://example.com/ID. Auf mjusique.com (noch im Aufbau) sieht das dann so aus:

<?php bloginfo('url'); echo('/'); the_ID(); ?>

Dieser Code ersetzt einfach die "Trackback URL", zu sehen z.B. auf http://mjusique.com/141

[Anm. d. Red.: Kommentar leicht editiert, damit auf example.com verlinkt wird, <> dargestellt werden und R-Fehler. ]

eins78 meint: (#185)
21.06.2009, 15:39

(Leider lässt sich mit der Methode natürlich kein Link in den Header eingefügt, weil die ID nur innerhalb des Wordpress-Loop abgefragt werden kann. Das perfekte Plugin ist noch zu finden, oder zu schreiben, oder zu kombinieren).

Bernhard H. meint: (#186)
21.06.2009, 22:52

Du hast Recht - ein nachträgliches Senden von headern ist unmöglich. Doch ein vorheriges Abfragen der Post-ID muss eigentlich auch vor den headern möglich sein, schließlich wird die ID ja auch im Plugin verwendet - einer der Gründe, dass du das Plugin einfach um die Funktionalität Benutzerdefinierter Kurzadressen vermindern kannst und damit den Extra-Wert in der Tabelle verhinderst.
Sieh dir unbedingt diesen Code an: http://toscho.de/2009/shortlinks-in-wordpress/ er verhindert effektiv das Auftreten von 404s indem es die normalen ?p=### URLs verwendet, die auch nach Suchmaschinen-freundlicher Änderung der URLs noch als Kurzlink funktionieren und weiterleiten.
Du musst jetzt eigentlich nur noch beides Kombinieren.

Sam Johnston meint: (#191)
18.08.2009, 18:58

Nice work Bernhard!

I guess you have seen that WordPress.com just announced (http://en.blog.wordpress.com/2009/08/14/shorten/) that rel=shortlink (http://purl.org/net/shortlink) has been rolled out to their 7 million+ blogs!

Time to start pushing the client developers to add support for it...

Sam






 
Χρόνογραφ
© 2008-2014 by Bernhard Häussner - Impressum - Login
Kurz-Link zu dieser Seite: http://1-co.de/b/14