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

Владимир | | PHP, Web разработка, Yii.

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).

<?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 .

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

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