Zkracovač URL pro každého
od aichi
S rozmachem Twitteru a Facebooku se rozmohly i různé zkracovače URL. Po jejich rozmachu do tohoto vlaku nastoupil Facebook a Google s vlastními zkracovači. Pokud z vašeho administračního rozhranní generujete zprávy pro Twitter či Facebook, je mrzuté, že nemůžete ovlivňovat tvar zkráceného URL. Tento problém jsem řešil pro náš portál CZECHDESIGN.CZ, kdy vytváříme příspěvky pro Twitter.
...
Mým cílem bylo vytvořit skript pro přesměrování a administraci odkazů, kde mohu vytvářet nové odkazy s vlastním hashem a mít možnost zjistit jejich proklikovost. Motivace získání počtu prokliků byla také způsobena naší designovou výstavou v Palladiu, kde jsme na popisky exponátů přidaly QR kódy pro jednodušší navigaci na stránky autorů a chtěli jsme vědět kolik lidí QR kód využilo.
Celkové řešení je napsáno v čistém PHP a JS. Pro měření statistik jsem se rozhodl využít služeb bit.ly, takže vlastně dochází ke dvěma přesměrováním, ale to není až tak důležité. Pokud preferujete jiného poskytovatele, je možné kdykoli v průběhu používání poskytovatele přesměrování zaměnit se zachováním funkčnosti původních URL (např. pokud by původní poskytovatel zavřel krám).
Zkracovač a jeho administraci jsem pod MIT licencí vystavil na GitHubu. Můžete si stáhnout vlastní kopii a skoro ihned ji začít používat. Jsou jen dvě věci co je třeba:
- Zařídit si účet na bit.ly a upravit konfigurační soubor
- Vytvořit vlastní ověření uživatelů
Účet na bit.ly a úprava konfiguračního souboru
Zřiďte si na bit.ly účet a na stránce http://bit.ly/a/your_api_key požádejte o svůj API klíč. Tento klíč vložte do konfiguračního souboru a také upravte přístup k databázi. Níže je ukázka mé konfigurace:
$CONFIG['production'] = array( 'persistentManager' => "PersistentManager", 'loginManager' => "CzechdesignLoginManager", 'connection' => array( 'server' => 'localhost', 'user' => 'root', 'password' => '', 'database' => 'czechdesign', 'table' => 'url_shorten' ), 'bitly' => array( 'login' => 'czechdesign', 'apikey' => 'R_rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr' ), 'shortenUrl' => 'http://www.czechdesign.cz/go/' );
Na posledním řádku nezapomeňte poeditovat URL na kterém bude dostupný váš zkracovač. Zkrácené adresy na CZECHDESIGNu mají tedy tvar např.: http://www.czechdesign.cz/go/veronika_lousova.
Vlastní ověření uživatelů
V konfiguračním souboru si můžete také všimnout položky loginManager, kde je v mé konfiguraci CzechdesignLoginManager. To znamená, že aplikace hledá soubor s touto třídou a tu použije pro přihlášení. V repository je na ukázku SimpleLoginManager, který přihlásí každého, proto je nutné si napsat vlastní, odpovídající vaší infrastruktuře.
Každý login manager musí implementovat rozhranní ILogin, které předepisuje 4 metody: login, logout, isLogged a getInstance pro získání instance, jelikož se očekává, že třída bude definovat Jedináčka.
Můj vlastní Login Manager vypadá takto:
class CzechdesignLoginManager extends TObjectStatic implements ILogin{
protected static $instance = null;
protected $mysql_resource = null;
protected function __construct($init) {
$dinit = $init['connection'];
$this->mysql_resource = mysql_connect($dinit['server'],$dinit['user'],$dinit['password']);
mysql_query('set names utf8', $this->mysql_resource);
mysql_select_db($dinit['database']);
}
public function login($user, $password) {
$user = mysql_escape_string($user);
$query = "SELECT id, username, `password` FROM user WHERE active=1 AND username='".$user."'";
$dotaz = mysql_query($query, $this->mysql_resource);
if (mysql_num_rows($dotaz)>0) {
$radek=mysql_fetch_assoc($dotaz);
if ($radek["password"] === $password) {
$_SESSION['urlShortenerLoggedUser'] = true;
return true;
}
}
$_SESSION['urlShortenerLoggedUser'] = false;
return false;
}
public function logout() {
$_SESSION['urlShortenerLoggedUser'] = false;
return session_destroy();
}
public function isLogged() {
return $_SESSION['urlShortenerLoggedUser'];
}
public static function getInstance($init) {
if (CzechdesignLoginManager::$instance == null) {
$lm = new CzechdesignLoginManager($init);
CzechdesignLoginManager::$instance = $lm;
}
return CzechdesignLoginManager::$instance;
}
}
A to je tak zhruba vše co potřebujete pro rozjetí vlastního zkracovače. V administraci chybí listování a vyhledávání, nicméně kostra je funkční a další funkce budou doplněny.
Noticka na závěr: pro programování v JS jsem zvolil Javascriptovou knihovnu JAK.
Adresy zpětných odkazů pro tento příspěvek:
Trackback URL (right click and copy shortcut/link location)

03. 06. 10 23.32:49, 
