Как стать автором
Обновить

PHP class для Goo.gl

Время на прочтение 2 мин
Количество просмотров 6.4K
image
И опять немного о Goo.gl. Листая хабр видел предложения на JS, но лично мне они не подходили. Сегодня случайно наткнутся на симпатичное для меня решения, коим и делюсь с общественностью…

<?php  

// Для начала проверим существование возможности ;)
if (!function_exists('curl_init')) 
    trigger_error('CURL is not installed');     

/** 
 * GoogleURL 
 *  
 * Небольшой класс для модификации урлов посредством Goo.gl  
 *  
 * @author Bas van Dorst <info@basvandorst.nl> 
 * @version 1.0  
 * @package Google 
 */ 

class GoogleURL { 
     
    /** 
     * Адрес Google URL shortener API 
     * @var string 
     */ 
    private static $_api = "http://goo.gl/api/shorten"; 
     
    /** 
     * Таймаут Curl 
     * @var int 
     */ 
    private static $_curl_timeout = 5; 
     
    /** 
     * URL-regex (http://flanders.co.nz/2009/11/08/a-good-url-regular-expression-repost/) 
     * @var string 
     */ 
    private static $_urlregex = '/(?:(?:ht|f)tp(?:s?)\:\/\/|~\/|\/)?(?:\w+:\w+@)?(?:(?:[-\w]+\.)+(?:com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum|travel|[a-z]{2}))(?::[\d]{1,5})?(?:(?:(?:\/(?:[-\w~!$+|.,=]|%[a-f\d]{2})+)+|\/)+|\?|#)?(?:(?:\?(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)(?:&(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)*)*(?:#(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)?/'; 
     
    /** 
     * Замена существующего URL ссылкой, полученной от Goo.gl URL. 
     *  
     * @param string|array $input_url 
     * @return string если успешно, и запрашиваемый URL при провале. 
     */ 
    public static function shortURL($input_url)  
    { 
        /** 
         * Получаем первое значение массива, если $input_url является массивом (результат shortText) 
         */ 
        $url = ( is_array( $input_url ) ) ? $input_url[0] : $input_url; 
         
        /** 
         *  
         */ 
        $post_fields = array(    "security_token" => "null", 
                                             "url"                    => $url 
                                        );   
          
        $ch = curl_init(); 
        curl_setopt($ch, CURLOPT_URL, self::$_api); 
        curl_setopt($ch, CURLOPT_HEADER, 0); 
        curl_setopt($ch, CURLOPT_POST, TRUE); 
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query( $post_fields ) ); 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
        curl_setopt($ch, CURLOPT_TIMEOUT, self::$_curl_timeout); 
        $output = json_decode( curl_exec($ch) ); // Google возвращает JSON-объект 
        curl_close($ch); 
         
        return (isset( $output->short_url )) ? $output->short_url : $url; 
    } 
     
    /** 
     * Заменяем все  ссылки в text/HTML-document на Goo.gl ссылки 
     *  
     * @param string $input_text 
     * @return array|null 
     */ 
    public static function shortText($input_text)  
    { 
        return preg_replace_callback( 
                    self::$_urlregex,  
                    __CLASS__.'::shortURL',  
                    $input_text 
                ); 
    } 
}


Мне кажется, изобилие слов тут не требуется, все предельно понятно. Пользуйтесь на здоровье ;) GPL тому способствует ;)

p.s.
Требования для работы класса:
  1. Поддержка curl, или еще тут посмотреть
  2. PCRE компилируется по-умолчанию. Если отключили при компилировании — то на вашей совести.
  3. Для JSON библиотека компилируется также по-умолчанию

Обучать, как включать расширения в рамках данного топика, думаю, не стоит.
А все остальное — требует наличие php ;)
Теги:
Хабы:
+39
Комментарии 45
Комментарии Комментарии 45

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн
PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн