Сокращение 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}
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.