Использование сервиса Bit.ly вместе с PHP фреймворком Yii

Думаю, о твиттере и о том, какую роль в нем играют короткие ссылки, слышали все. В принципе, можно вообще не заморачиваться, т.к. 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
Архив с этим компонентом
Как видите, перед использованием нужно указать ваши логин и 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 .
Уют и тепло ваше квартире дадут чугунные радиаторы для надежного отопления вашей квартиры.
Манго фитнес-центр и салон красоты в цао, все под одной крышей.
Понравилась статья? Подписывайтесь на продолжение
!
Опубликовано в PHP, Web разработка, Yii View Comments
-
Domen36









