【问题标题】:jQuery on the fly URL shortenerjQuery on the fly URL 缩短器
【发布时间】:2010-12-18 18:55:33
【问题描述】:

我正在寻找一个动态 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。

想法?

【问题讨论】:

  • 不确定您将使用它来做什么,但如果您要让用户输入数据,您可能需要扩展第 3 步以包含更多 URL 缩短服务,而不仅仅是 bit.ly。除非您可以将 bit.ly 地址重定向到 tinyurl.com 地址(例如)重定向到最终目的地。
  • 您可以只缩短长度超过 x 个字符的 URL,而不是确保它不是 bit.ly URL。例如,今天 tinyurl.com 使用 27 个字符。
  • earcar 你在哪里找到不同服务的最小长度?

标签: javascript jquery url-rewriting bit.ly url-shortener


【解决方案1】:

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

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

正如您所说,结尾将很难确定网址是否包含空格,或者更糟的是,由于用户没有输入空格,因此会进入下一个句子。

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

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

【讨论】:

  • 帖子有一个最大长度,动态缩短可以让他们有更多的字符来发布他们的帖子
【解决方案2】:

【讨论】:

  • 问题是他们的帖子中只能包含 X 个字符,并且即时缩短他们的 URL 会给他们额外的字符
【解决方案3】:

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

我在 Bitbucket 上的jQuery Url Shortener

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

只是觉得你可能会觉得它很有用。

至于识别文本框中的 URL,我建议使用 RegEx to match the url

【讨论】:

  • 嗨 Jiaaro - 我使用了这个,并且必须进行一些小改动以支持 URL 编码。将第 6 行更改为:+"&longUrl="+encodeURIComponent(longUrl) - 感谢有用的插件。
【解决方案4】:

这是一个如何使用 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);
        }
    );
}

以下代码可用于获取短网址:

/*
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);
});

【讨论】:

【解决方案5】:

您还可以在服务器上使用 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了解更多详情

【讨论】:

    【解决方案6】:

    我猜 Bitly 的 API 有轻微的变化。您现在只需要一个访问令牌来请求一个短 URL。

    按照best practices,我创建了以下纯Javascript sn-p:

    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);
            }
        );
    },
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-10
      • 2023-03-06
      • 2011-10-22
      • 2016-02-06
      • 2011-08-20
      • 2011-02-25
      • 1970-01-01
      • 2018-06-16
      相关资源
      最近更新 更多