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

12 июня, 2010
yii bitly

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

  1. <?php
  2. /**
  3.  * Этот компонент предназначен для создания ссылок с помощью
  4.  * сервиса Bit.ly
  5.  */
  6. class BitLyShortener extends CComponent {
  7.     const LOGIN = 'ваш_логин';
  8.     const APIKEY = 'ваш_API_ключ';
  9.    
  10.     /**
  11.      * Укорачивает заданнй URL с помощью сервиса Bit.ly
  12.      *
  13.      * @param $fullUrl string – URL для которого нужно получить короткую ссылку
  14.      * @return string короткая ссылка
  15.      */
  16.     public static function getShortUrl($fullUrl) {
  17.         //формируем запрос
  18.         $request = 'http://api.bit.ly/v3/shorten?'
  19.             .'login='.self::LOGIN
  20.             .'&amp;apiKey='.self::APIKEY
  21.             .'&amp;longUrl='.urlencode($fullUrl)
  22.             .'&amp;format=json';
  23.        
  24.         //отправляем запрос
  25.         $response = file_get_contents($request);
  26.         $res = json_decode($response, true);
  27.        
  28.         return $res['data']['url'];
  29.     }
  30. }
  31.  
  32. //end of BitLyshortener.php

Архив с этим компонентом

архив с исходным кодом

Как видите, перед использованием нужно указать ваши логин и API ключ для работы с Bit.ly. Затем, для получения короткой ссылки достаточно вызвать метод getShortUrl и передать ему ссылку страницы в первом параметре.

API у Bit.ly достаточно прост. Для получения короткой ссылки достаточно сформировать и отправить обычный HTTP запрос. Ответ можно получить как в JSON, так и в XML формате. На мой взгляд, работать с JSON немного проще, но это не принципиально.

В случае успешного создания короткой ссылки сервис возвращает следующие данные

  1. array
  2.   'status_code' => int 200
  3.   'status_txt' => string 'OK' (length=2)
  4.   'data' =>
  5.     array
  6.       'long_url' => string 'http://site_name.domen/index.php?r=news/view&amp;id=2' (length=72)
  7.       'url' => string 'http://bit.ly/short_link' (length=20)
  8.       'hash' => string 'c86mVl' (length=6)
  9.       'global_hash' => string '9mLuyJ' (length=6)
  10.       'new_hash' => int 1

Шаг пятый. Добавляем код создания ссылки в контроллер.

В случае с фреймворком Yii ссылку сокращать удобнее всего в методе loadModel() контроллера News, т.к. сразу после создания новости будет выполнен редирект на новую страницы и, соответственно, вызван метод loadModel().

  1. public function loadModel()
  2. {
  3.     if($this->_model===null)
  4.     {
  5.         if(isset($_GET['id']))
  6.             $this->_model=News::model()->findbyPk($_GET['id']);
  7.             //проверяем, создана ли короткая ссылка для данной новости
  8.             if (!isset($this->_model->n_short_url) || $this->_model->n_short_url == ") {
  9.                 //получаем адрес текущей страницы
  10.                 $request = Yii::app()->getRequest();
  11.                 $link = $request->getHostInfo().$request->getUrl();
  12.                 $this->_model->n_short_url = BitLyShortener::getShortUrl($link);
  13.                 //сохраняем короткую ссылку
  14.                 $this->_model->save();
  15.             }
  16.         if($this->_model===null)
  17.             throw new CHttpException(404,'The requested page does not exist.');
  18.     }
  19.     return $this->_model;
  20. }

Здесь мы проверяем, создана ли для данной записи короткая ссылка, и если нет – создаём её. Предварительно получаем URL текущей страницы. Затем, присваиваем короткую ссылку атрибуту n_short_url и сохраняем модель.

Таким образом, запрос на создание короткой ссылки будет отправляться только один раз для каждой страницы.

Вывести полученную ссылку можно точно так же, как и любой другой атрибут модели.

Вот и всё! Если у вас появились вопросы или есть замечания, пишите, обсудим ;)

Интересно почитать

Лучшие предложения на металлопрокат в москве на
skladmetalla.ru .

Уют и тепло ваше квартире дадут чугунные радиаторы для надежного отопления вашей квартиры.

Манго фитнес-центр и салон красоты в цао, все под одной крышей.

Понравилась статья? Подписывайтесь на продолжение rss link !

Или на мой твиттер twitter link

]]>

Добавьте эту страницу в google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

]]>

Опубликовано в PHP, Web разработка, Yii View Comments

]]>
  • Domen36
    спасибо
blog comments powered by Disqus ]]>