Думаю, о твиттере и о том, какую роль в нем играют короткие ссылки, слышали все. В принципе, можно вообще не заморачиваться, т.к. twitter сам создаст их для вас, но при таком подходе возникнет несколько проблем.
Во-первых, длина ссылки и текста может превысить 140 символов. Т.е. ссылку лучше сразу сократить.
Во-вторых, будет сложнее отслеживать статистику переходов.
Поэтому гораздо удобнее использовать специализированные сервисы, например, Bit.ly. Этот сервис предоставляет API как для создания ссылок, так и для получения статистики переходов по ним.
Теперь рассмотрим небольшой пример.
Допустим, вы разрабатываете сайт с использованием PHP фреймворка Yii. На котором у вас есть раздел с новостями. Необходимо на странице каждой новости создать кнопку «Опубликовать в твиттере», а текст сообщения должен состоять из заголовка новости и короткой ссылки на неё.
Код создания самой кнопки мы сейчас рассматривать не будем, т.к. это немного другая тема. Мы напишем компонент, позволяющий получать сокращенный URL страницы, и рассмотрим его подключение к фреймворку.
Шаг первый. Подготовим площадку для экспериментов.
1) Создаем приложение
yiic webapp .
2) Создаем таблицу в БД. Я использовал стандартную sqlite базу.
Название таблицы tbl_news
Поля:
n_id – первичный ключ;
n_title – заголовок новости;
n_content – текст новости;
n_short_url – короткая ссылка (не обязательное поле).
3) Создаем контроллер и модель
Для этого последовательно выполняем три команды
yiic shell
model News tbl_news
crud News
Теперь у нас есть работающий сайт. Страница с новостями будет доступна по адресу.
site_name.domen/index.php?r=news/index
На этой странице в сайдбаре будут ссылки на страницы создания и управления новостями.
Шаг второй. Регистрируемся на сервисе Bit.ly.
В принципе, короткие ссылки можно получить и без регистрации, но тогда вы не сможете смотреть статистику.
Регистрация осуществляется на этой странице.
Затем необходимо получить API-ключ.
Ваши логин и ключ API будут использоваться при всех обращениях к сервису.
Шаг третий. Если необходимо, настраиваем urlManager.
Этот компонент позволяет превращать ссылки вида
localhost/sites/yii_bit_ly/public_html/index.php?r=news/view&id=1
в
localhost/sites/yii_bit_ly/public_html/index.php/news/1
Настройка выполняется в файле protected/config/main.php, подробнее о ней можно почитать в статье Красивые адреса URL.
Дело в том, что если вы измените формат ссылок, то сокращенные ссылки нужно будет создавать заново, поэтому лучше определиться с ним заранее.
Шаг четвертый. Создаём компонент для работы с сервисом.
Назовем его BitLyShortener. Он должен находиться в файле (protected/components/BitLyShortener.php).
<?php
/**
* Этот компонент предназначен для создания ссылок с помощью
* сервиса Bit.ly
*/
class BitLyShortener extends CComponent {
const LOGIN = 'ваш_логин';
const APIKEY = 'ваш_API_ключ';
/**
* Укорачивает заданнй URL с помощью сервиса Bit.ly
*
* @param $fullUrl string - URL для которого нужно получить короткую ссылку
* @return string короткая ссылка
*/
public static function getShortUrl($fullUrl) {
//формируем запрос
$request = 'http://api.bit.ly/v3/shorten?'
.'login='.self::LOGIN
.'&apiKey='.self::APIKEY
.'&longUrl='.urlencode($fullUrl)
.'&format=json';
//отправляем запрос
$response = file_get_contents($request);
$res = json_decode($response, true);
return $res['data']['url'];
}
}
//end of BitLyshortener.php
Архив с этим компонентом
SourceКак видите, перед использованием нужно указать ваши логин и API ключ для работы с Bit.ly. Затем, для получения короткой ссылки достаточно вызвать метод getShortUrl и передать ему ссылку страницы в первом параметре.
API у Bit.ly достаточно прост. Для получения короткой ссылки достаточно сформировать и отправить обычный HTTP запрос. Ответ можно получить как в JSON, так и в XML формате. На мой взгляд, работать с JSON немного проще, но это не принципиально.
В случае успешного создания короткой ссылки сервис возвращает следующие данные
array
'status_code' => int 200
'status_txt' => string 'OK' (length=2)
'data' =>
array
'long_url' => string 'http://site_name.domen/index.php?r=news/view&id=2' (length=72)
'url' => string 'http://bit.ly/short_link' (length=20)
'hash' => string 'c86mVl' (length=6)
'global_hash' => string '9mLuyJ' (length=6)
'new_hash' => int 1
Шаг пятый. Добавляем код создания ссылки в контроллер.
В случае с фреймворком Yii ссылку сокращать удобнее всего в методе loadModel() контроллера News, т.к. сразу после создания новости будет выполнен редирект на новую страницы и, соответственно, вызван метод loadModel().
public function loadModel()
{
if($this->_model===null)
{
if(isset($_GET['id']))
$this->_model=News::model()->findbyPk($_GET['id']);
//проверяем, создана ли короткая ссылка для данной новости
if (!isset($this->_model->n_short_url) || $this->_model->n_short_url == '') {
//получаем адрес текущей страницы
$request = Yii::app()->getRequest();
$link = $request->getHostInfo().$request->getUrl();
$this->_model->n_short_url = BitLyShortener::getShortUrl($link);
//сохраняем короткую ссылку
$this->_model->save();
}
if($this->_model===null)
throw new CHttpException(404,'The requested page does not exist.');
}
return $this->_model;
}
Здесь мы проверяем, создана ли для данной записи короткая ссылка, и если нет – создаём её. Предварительно получаем URL текущей страницы. Затем, присваиваем короткую ссылку атрибуту n_short_url и сохраняем модель.
Таким образом, запрос на создание короткой ссылки будет отправляться только один раз для каждой страницы.
Вывести полученную ссылку можно точно так же, как и любой другой атрибут модели.
Вот и всё! Если у вас появились вопросы или есть замечания, пишите, обсудим 😉
Интересно почитать
Лучшие предложения на металлопрокат в москве на
skladmetalla.ru .
Уют и тепло ваше квартире дадут чугунные радиаторы для надежного отопления вашей квартиры.
Манго фитнес-центр и салон красоты в цао, все под одной крышей.


