18

我正在寻找一个动态 URL 缩短器,就像 tweetdeck 的工作方式一样。我发现了许多 jQuery 和通用 javascript 插件,它们接受一个 url,并在按下按钮时通过缩短服务(如 bit.ly)运行它。但是,我还没有找到一个可以即时完成的。我的第一个问题是这是否已经存在于某个地方?其次,如果没有,那么识别需要在文本框中缩短的 URL 的最佳方法是什么?我的想法:

  1. 在该文本区域的 onKeyUp 上,通过文本查找 http
  2. 如果找到获取整个 URL(我如何确定结尾?可能是句号、逗号、空格等...)
  3. 确保 URL 不是 bit.ly URL
  4. 验证 URL(发出请求并确保 http 响应不是错误,bit.ly 是否已经这样做了?)
  5. 如果有效,将 url 发送到 bit.ly 的 API 并获取响应
  6. 将文本区域中的长 URL 替换为短 URL。

想法?

4

6 回答 6

18

以下是如何使用 Bitly API 和 jQuery 获取缩短 URL 的示例:

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);
});
于 2011-08-10T03:49:50.607 回答
8

我猜 Bitly 的 API 发生了轻微的变化。您现在只需要一个访问令牌来请求一个短 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);
        }
    );
},
于 2014-02-27T09:22:41.297 回答
4

飞行钻头将很难可靠和快速地制造。

人们大部分时间都不会输入http,甚至不会输入www。

就像你说的那样,最后将很难确定 url 是否包含空格或更糟,因为用户没有输入空格,所以会进入下一个句子。

如果人们因为输入http://stakoverflow.com/而不是https://stackoverflow.com/而需要在事后更改 url怎么办?

我认为最好的解决方案是文本编辑器上的“插入缩短的 url”按钮,它允许人们这样做。或者,在发布帖子时在服务器端进行。

于 2009-11-20T16:12:24.733 回答
4

您还可以在服务器上使用 php 和 curl 生成一个短 url,这样您就不必在网页中公开您的 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

于 2011-10-15T10:36:28.543 回答
0

为什么不对 Bit.ly API 做一个 jQuery POST? http://blog.themeforest.net/tutorials/creating-an-ajax-web-app-using-the-bitly-api/

于 2009-11-20T19:02:09.170 回答
0

我在寻找类似的东西时发现了你的帖子,最终只写了一个 jQuery 插件,提供(至少部分)你正在寻找的东西。

我在 Bitbucket 上的jQuery Url Shortener

这是一个非常简单的插件;我不需要缩短用户的 url,所以在缩短之前我没有任何长度检查或 url 测试,尽管我并不反对添加这些类型的功能。

只是想你可能会发现它很有用。

至于识别文本框中的 URL,我建议使用RegEx 来匹配 url

于 2010-03-19T14:23:52.637 回答