Сокращение URL goo.gl
        Приветь
Этот сниппет поможет сокращать url с помощью Google url shortener
    
    
                                                                                
            Этот сниппет поможет сокращать 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 свой ключ.    Комментарии: 7
                Откуда брать API-ключ для сокращателя ссылок?            
                    
                google api            
                    
                И может ли сниппет сокращать произвольные ссылки? Похоже что нет, например ссылку на длиииииинное изображение ресурса.            
                    
                Надо посмотреть по сути должно работать            
                    
                Да, работает, но не работает, если вызвать сниппет 2 раза на странице. Я заметил это происходит если писать классы прямо в сниппете. Прийдётся логику класса в сам сниппет…            
                    
                Можно определение класса обернуть в 
                    if (!class_exists('GoogleUrlApi')) {
	class GoogleUrlApi {
	}
}            
                Спасибо, очень полезно на будущее! 
Я уже вывел логику из класса, выкинул всё лишнее и использую сниппет goo_gl следующим образом:
Использую его как модификатор:
                    Я уже вывел логику из класса, выкинул всё лишнее и использую сниппет 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}            
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.