JQuery на лету сокращение URL
Я ищу укороченный URL-адрес на лету так же, как работает tweetdeck. Я нашел много jQuery и общих плагинов javascript, которые берут URL и запускают его через сервис сокращения, такой как bit.ly, когда нажата кнопка. Однако я не смог найти тот, который делает это на лету. Мой первый вопрос: это уже где-то существует? Во-вторых, если это не так, то каков будет лучший способ распознать URL, который необходимо сократить внутри текстового поля? Мои мысли:
- В onKeyUp этой текстовой области бегите по тексту в поисках http
- Если найдено, захватите весь URL (как я могу определить конец? Может быть точка, запятая, пробел и т. Д.)
- Убедитесь, что URL уже не является bit.ly URL
- Проверьте URL-адрес (сделайте запрос и убедитесь, что ответ http не является ошибкой, bit.ly уже делает это?)
- Если допустимо, отправьте URL в API bit.ly и получите ответ
- Замените длинный URL-адрес коротким URL-адресом в текстовой области.
Мысли?
6 ответов
Вот пример того, как получить сокращенный URL с помощью Bitly API и jQuery:
function get_short_url(long_url, login, api_key, func)
{
$.getJSON(
"http://api.bitly.com/v3/shorten?callback=?",
{
"format": "json",
"apiKey": api_key,
"login": login,
"longUrl": long_url
},
function(response)
{
func(response.data.url);
}
);
}
Следующий код может быть использован для получения короткого URL:
/*
Sign up for Bitly account at
https://bitly.com/a/sign_up
and upon completion visit
https://bitly.com/a/your_api_key/
to get "login" and "api_key" values
*/
var login = "LOGIN_HERE";
var api_key = "API_KEY_HERE";
var long_url = "http://www.kozlenko.info";
get_short_url(long_url, login, api_key, function(short_url) {
console.log(short_url);
});
Я думаю, что API Bitly немного изменился. Теперь вам действительно нужен токен доступа для запроса короткого URL.
Следуя рекомендациям, я создал следующий фрагмент кода только для Javascript:
getShortUrl: function(url, callback)
{
var accessToken = '___YOUR_ACCESS_TOKEN___';
var url = 'https://api-ssl.bitly.com/v3/shorten?access_token=' + accessToken + '&longUrl=' + encodeURIComponent(url);
$.getJSON(
url,
{},
function(response)
{
if(callback)
callback(response.data.url);
}
);
},
Вы также можете создать короткий URL-адрес с php и curl на сервере, таким образом, вам не нужно выставлять свой ключ API на веб-странице:
<?php
//the long url posted by your webpage
$url = strip_tags($_POST["url"]);
$api_user = "your_bitly_user_name";
$api_key = "your_bitly_api_key";
//send it to the bitly shorten webservice
$ch = curl_init ("http://api.bitly.com/v3/shorten?login=$api_user&apiKey=$api_key&longUrl=$url&format=json");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//the response is a JSON object, send it to your webpage
echo curl_exec($ch);
?>
Тогда на вашей веб-странице код должен выглядеть примерно так:
//the long url that you want to shorten
var longUrl = escape(window.location.href)
$.ajax({
url : "php/getShortUrl.php",//this is the php script above
dataType : "json",
type : "POST",
data : {
url : longUrl
},
success : function(data) {
if(data.status_txt === "OK"){
shortUrl = data.data.url;
}
},
error : function(xhr, error, message) {
//no success, fallback to the long url
shortUrl = longUrl
}
});
Смотрите bitly API для более подробной информации
Бит на лету будет сложно сделать надежным и быстрым.
Люди не будут вводить http большую часть времени или даже www.
Конец, как вы сказали, будет трудно определить, содержит ли URL-адрес пробел или хуже, переходит к следующему предложению, потому что пользователь не вставил пробел.
А что, если людям нужно изменить URL-адрес после факта, потому что они набрали http://stakoverflow.com/ вместо https://stackru.com/?
Я думаю, что лучшим решением была бы кнопка "вставить сокращенный URL" в вашем текстовом редакторе, которая позволяла людям делать именно это. Или, сделайте это на стороне сервера, когда пост сделан.
Почему бы не сделать JQuery POST для API Bit.ly? http://blog.themeforest.net/tutorials/creating-an-ajax-web-app-using-the-bitly-api/
Я нашел ваш пост, когда искал что-то похожее, и в конце концов просто написал плагин jQuery, который обеспечивает (по крайней мере часть) то, что вы ищете.
Мой JQuery Url Shortener на Bitbucket
Это очень простой плагин; Мне не нужно было сокращать URL-адреса пользователя, поэтому у меня нет проверки длины или проверки URL-адреса перед его сокращением, хотя я не против добавления этих типов функций.
Просто подумал, что это может оказаться полезным.
Что касается распознавания URL в вашем текстовом поле, я бы предложил использовать RegEx для соответствия URL.