Сокращение URL goo.gl

Приветь

Этот сниппет поможет сокращать url с помощью Google url shortener

<?php
$id = $modx->resource->get('id');
$gurl = $modx->makeUrl($id,'','', "full");

// Declare the class
class GoogleUrlApi {
	
	// Constructor
	function GoogleURLAPI($key,$apiURL = 'https://www.googleapis.com/urlshortener/v1/url') {
		// Keep the API Url
		$this->apiURL = $apiURL.'?key='.$key;
	}
	
	// Shorten a URL
	function shorten($url) {
		// Send information along
		$response = $this->send($url);
		// Return the result
		return isset($response['id']) ? $response['id'] : false;
	}
	
	// Expand a URL
	function expand($url) {
		// Send information along
		$response = $this->send($url,false);
		// Return the result
		return isset($response['longUrl']) ? $response['longUrl'] : false;
	}
	
	// Send information to Google
	function send($url,$shorten = true) {
		// Create cURL
		$ch = curl_init();
		// If we're shortening a URL...
		if($shorten) {
			curl_setopt($ch,CURLOPT_URL,$this->apiURL);
			curl_setopt($ch,CURLOPT_POST,1);
			curl_setopt($ch,CURLOPT_POSTFIELDS,json_encode(array("longUrl"=>$url)));
			curl_setopt($ch,CURLOPT_HTTPHEADER,array("Content-Type: application/json"));
		}
		else {
			curl_setopt($ch,CURLOPT_URL,$this->apiURL.'&shortUrl='.$url);
		}
		curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
		// Execute the post
		$result = curl_exec($ch);
		// Close the connection
		curl_close($ch);
		// Return the result
		return json_decode($result,true);
	}		
}

// Create instance with key
$key = 'THIS_API_KEY';
$googer = new GoogleURLAPI($key);

// Test: Shorten a URL
$shortDWName = $googer->shorten("$gurl");
echo $shortDWName; // returns http://goo.gl/i002
Генерируйте API ключ и вставите в THIS_API_KEY свой ключ.
TITAN-UZ
06 июня 2015, 13:02
modx.pro
7
7 811
+8

Комментарии: 7

Василий Столейков
02 февраля 2017, 15:36
1
0
Откуда брать API-ключ для сокращателя ссылок?
    TITAN-UZ
    03 февраля 2017, 16:25
    0
    google api
    Василий Столейков
    02 февраля 2017, 15:40
    1
    0
    И может ли сниппет сокращать произвольные ссылки? Похоже что нет, например ссылку на длиииииинное изображение ресурса.
      TITAN-UZ
      03 февраля 2017, 16:26
      0
      Надо посмотреть по сути должно работать
        Василий Столейков
        04 февраля 2017, 14:06
        1
        0
        Да, работает, но не работает, если вызвать сниппет 2 раза на странице. Я заметил это происходит если писать классы прямо в сниппете. Прийдётся логику класса в сам сниппет…
          Воеводский Михаил
          05 февраля 2017, 17:06
          +1
          Можно определение класса обернуть в

          if (!class_exists('GoogleUrlApi')) {
          	class GoogleUrlApi {
          
          	}
          }
            Василий Столейков
            05 февраля 2017, 17:13
            2
            0
            Спасибо, очень полезно на будущее!
            Я уже вывел логику из класса, выкинул всё лишнее и использую сниппет goo_gl следующим образом:
            <?php
            $key = '__API__'; // Ваш API ключ
            
            define('API_KEY', $key);
            define('API_URL', 'https://www.googleapis.com/urlshortener/v1');
             
            // создаём cURL соединение
            $curl_connection = curl_init(
                sprintf('%s/url?key=%s', API_URL, API_KEY)
            );
            // попросить cURL возвращать данные, а не выводить
            curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true);
            // создадим данные для перекодировки в JSON
            $requestData = array(
               'longUrl' => $input
            );
            // изменим тип запроса на POST
            curl_setopt($curl_connection, CURLOPT_POST, true);
            // установим тип контента JSON
            curl_setopt($curl_connection, CURLOPT_HTTPHEADER, array('Content-type: application/json'));
            // передадим данные JSON в тело POST запроса
            curl_setopt($curl_connection, CURLOPT_POSTFIELDS, json_encode($requestData));
            // выполним запрос
            $data = curl_exec($curl_connection);
            curl_close($curl_connection);
            // перекодирум и возвратим данные
            $response = json_decode($data, true);
            
            // return $response['longUrl']; // Длинная ссылка
            return $response['id'];


            Использую его как модификатор:
            {$url|goo_gl}
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      7