Думаю, о твиттере и о том, какую роль в нем играют короткие ссылки, слышали все. В принципе, можно вообще не заморачиваться, т.к. 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 .
Уют и тепло ваше квартире дадут чугунные радиаторы для надежного отопления вашей квартиры.
Манго фитнес-центр и салон красоты в цао, все под одной крышей.