W raz z potrzebą użycia skracacza linków postanowiłem napisać malutki moduł do Kohana Framework (KO3). Zasada jego działania jest bardzo prosta, wypełniamy plik konfiguracyjny o login i API key i możemy w bardzo łatwy sposób generować skrócone linki z serwisu bit.ly
Na wstępie przedstawię budowę tego modułu.
Poniżej przedstawiam składnię każdego z plików.
Plik konfiguracyjny: (należy go skopiować do /application/config/bitly.php)
<?php defined('SYSPATH') or die('No direct script access.');
//File: /modules/bitly/config/bitly.php
return array(
'default' => array(
'username' => 'yourlogin', // The bit.ly username
'api_key' => 'your_api_key', // Your bit.ly API key
'type' => 'json', // type of receive (json/xml)
'version' => '2.0.1', // API version
),
);
Budowy powyższego pliku chyba wyjaśniać nie trzeba, wygląda on jak standardowa tablica pliku konfiguracyjnego w Kohana 3. Do wypełnienia są 4 atrybuty tj, username (login w serwisie bit.ly), api_key (klik), type (czyli rodzaj odpowiedzi od serwera API, do wyboru mamy dane w JSON oraz XML), version (wersja API).
Klasa dziedzicząca po Kohana_Bitly (którą za chwilę utworzymy)
<?php defined('SYSPATH') or die('No direct script access.');
//File: /modules/bitly/classes/bitly.php
class Bitly extends Kohana_Bitly {}
W tym pliku mamy jedynie definicję klasy Bitly oraz rozszerzenie jej o klasę Kohana_Bitly, która zostanie za chwilę stworzona w folderze „kohana” w katalogu naszego modelu.
Najważniejsza klasa modułu Kohana_Bitly
<?php defined('SYSPATH') or die('No direct script access.');
/**
*
* @see http://bit.ly
* @package Kohana
* @category Bitly
* @version 1.0
* @author www.sibul.linux.pl (sbl)
* @copyright (c) 2011 www.sibul.linux.pl (sbl)
* @license GNU/GPL
*/
//File: /modules/bitly/classes/kohana/bitly.php
class Kohana_Bitly {
static protected $_instances = array();
public static function instance($config = NULL)
{
// Create an instance checksum
$config_checksum = sha1(serialize($config));
// Load the Bitly instance for configuration
if ( ! isset(self::$_instances[$config_checksum]))
{
self::$_instances[$config_checksum] = new Bitly($config);
}
// Return a the instance
return self::$_instances[$config_checksum];
}
protected $_config;
public $attributes = array();
public $url;
public $login;
public $type;
public $api_key;
public $version;
protected function __construct($url, $config = NULL)
{
// Set the URL
$this->url = $url;
if (empty($config))
{
$this->_config = Kohana::config('bitly.default'); //set the config
}
elseif (is_array($config))
{
// Setup the configuration
$config += Kohana::config('bitly.default');
$this->_config = $config;
}
elseif (is_string($config))
{
if ($config = Kohana::config('bitly.'.$config) === NULL)
{
throw new Kohana_Bitly_Exception('Bitly.__construct() , Invalid configuration group name : :config', array(':config' => $config));
}
$this->_config = $config + Kohana::config('bitly.default');
}
}
public function short($url){
$this->login = $this->_config['username'];
$this->type = strtolower($this->_config['type']);
$this->api_key = $this->_config['api_key'];
$this->version = $this->_config['version'];
$api_url = 'http://api.bit.ly/shorten?version='.$this->version.'&longUrl='.urlencode($url).'&login='.$this->login.'&apiKey='.$this->api_key.'&format='.$this->type;
$response = file_get_contents($api_url);
switch($this->type){
case "xml":
$xml = simplexml_load_string($response);
return 'http://bit.ly/'.$xml->results->nodeKeyVal->hash;
break;
case "json":
$json = @json_decode($response,true);
return $json['results'][$url]['shortUrl'];
break;
}
}
}
Powyższa klasa zawiera 3 funkcje, w prawdzie mówiąc jedyną funkcją która skraca link jest „short” reszta to instancja klasy oraz konstruktor, który wczytuje plik konfiguracyjny i jego dane.
Mamy jeszcze jeden plik o nazwie exception.php, który dziedziczy po klasie Kohana_Exception obsługę wyjątków. Jego składnia jest bardzo prosta:
<?php defined('SYSPATH') or die('No direct script access.');
//File: /modules/bitly/classes/kohana/bitly/exception.php
class Kohana_Bitly_Exception extends Kohana_Exception { }
Musimy pamiętać by włączyć nasz nowo utworzony moduł w pliku bootstrap.php dodając nazwę z naszym modułem:
Kohana::modules(array(
'auth' => MODPATH.'auth', // Basic authentication
'cache' => MODPATH.'cache', // Caching with multiple backends
'database' => MODPATH.'database', // Database access
'image' => MODPATH.'image', // Image manipulation
'orm' => MODPATH.'orm', // Object Relationship Mapping
'bitly' => MODPATH.'bitly',
));
Ostatnim krokiem jest uruchomienie kontrolera z naszym modułem by przetestować jego działanie.
Budowa kontrolera:
Dla przykładu stwórzmy kontroler dziedziczący po Controller o nazwie test (application/classes/controller/test.php) o następującej zawartości:
<?php defined('SYSPATH') or die('No direct script access.');
class Controller_Test extends Controller{
public function action_index(){
$url = 'http://sibul.linux.pl';
$bitly = Bitly::instance();
echo $bitly->short($url); // następuje wykonanie funkcji short z modułu Bitly, która pobiera skrócony adres z serwera API.
//return http://bit.ly/gsVR1O
}
}
Takim sposobem powstał prosty moduł ułatwiający pracę programiście poprzez skracanie linków za pomocą serwisu www.bit.ly









Twitter Updates
Written by sbl
Topics: Kohana 3