Сокращение 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
TITAN-UZ
06 июня 2015, 13:02
modx.pro
8 834

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

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

        if (!class_exists('GoogleUrlApi')) {
        	class GoogleUrlApi {
        
        	}
        }
          Василий Столейков
          05 февраля 2017, 17:13
          Спасибо, очень полезно на будущее!
          Я уже вывел логику из класса, выкинул всё лишнее и использую сниппет 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