john: URLs auslesen und mit bit.ly kürzen

Beitrag lesen

Hallo.

Derzeit werden meine URLs in user-generierten Texten in der DB gespeichert und bei der Ausgabe wird der Text durch folgende Funktion gejagt:

public static function make_clickable($text){  
		// pad it with a space so we can match things at the start of the 1st line.  
		$ret = ' '.$text;  
		// matches an "xxxx://yyyy" URL at the start of a line, or after a space.  
		// xxxx can only be alpha characters.  
		// yyyy is anything up to the first space, newline, comma, double quote or <  
		$ret = preg_replace("#(^|[\n ])([\w]+?://.*?[^ \"\n\r\t<]*)#is", "\\1<a href=\"\\2\" target=\"_blank\" rel=\"nofollow\">\\2</a>", $ret);  
		// matches a "www|ftp.xxxx.yyyy[/zzzz]" kinda lazy URL thing  
		// Must contain at least 2 dots. xxxx contains either alphanum, or "-"  
		// zzzz is optional.. will contain everything up to the first space, newline,  
		// comma, double quote or <.  
		$ret = preg_replace("#(^|[\n ])((www|ftp)\.[\w\-]+\.[\w\-.\~]+(?:/[^ \"\t\n\r<]*)?)#is", "\\1<a href=\"http://\\2\" target=\"_blank\" rel=\"nofollow\">\\2</a>", $ret);  
		// matches an email@domain type address at the start of a line, or after a space.  
		// Note: Only the followed chars are valid; alphanums, "-", "_" and or ".".  
		$ret = preg_replace("#(^|[\n ])([a-z0-9&\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)#i", "\\1<a href=\"mailto:\\2@\\3\" rel=\"nofollow\">\\2@\\3</a>", $ret);  
		// Remove our padding..  
		$ret = substr($ret, 1);  
		return $ret;  
	}

Funktioniert prima, sorgt aber für unnötigen Rechenaufwand.
Ich möchte das die Texte vor dem Abspeichern in der DB schon auf URLs überprüft werden und mit der API von bit.ly gekürzt werden (wie Twitter das macht), anschließend muss der Text vor der Ausgabe nur noch nach genau "bit.ly" Links durchsucht werden.

Ich will also 1. die URLs extrahieren und durch die API jagen und 2. bei der Ausgabe nach bit.ly Urls durchsuchen:  z.B. http://bit.ly/doUEZV
bzw.  http://bit.ly/HASH
Wie stelle ich das an?

Lg, john