找到t.co链接的去向

时间:2011-06-28 01:40:58

标签: twitter url-shortener

给定t.co链接,我如何找到链接解析的位置?例如,如果我有t.co/foo,我想要一个返回domain.com/bar的函数或进程。

9 个答案:

答案 0 :(得分:19)

我会远离你无法控制的外部API。这将简单地在您的应用程序中引入一个潜在的失败点,并且可能需要花钱才能使用。

CURL可以很好地做到这一点。以下是我在PHP中的表现:

function unshorten_url($url) {
  $ch = curl_init($url);
  curl_setopt_array($ch, array(
    CURLOPT_FOLLOWLOCATION => TRUE,  // the magic sauce
    CURLOPT_RETURNTRANSFER => TRUE,
    CURLOPT_SSL_VERIFYHOST => FALSE, // suppress certain SSL errors
    CURLOPT_SSL_VERIFYPEER => FALSE, 
  ));
  curl_exec($ch); 
  return curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
}

我确信这可以适用于其他语言,甚至可以在UNIXy系统上使用curl命令编写脚本。

http://jonathonhill.net/2012-05-18/unshorten-urls-with-php-and-curl/

答案 1 :(得分:7)

curl -s -o /dev/null --head -w "%{url_effective}\n" -L "https://t.co/6e7LFNBv"

  • --head-I仅下载HTTP标头
  • -w--write-out在输出
  • 之后输出指定的字符串
  • -L--location跟随位置标题

答案 2 :(得分:6)

如果您想从命令行执行此操作,请使用curl的详细选项:

curl -v <url>

为您提供HTTP回复。对于t.co,它似乎给你一个HTTP / 301回复(永久移动)。然后,有一个位置字段,指向缩短后的URL。

答案 3 :(得分:5)

你可以给unshorten.me一个机会。它有一个API

<强> JSON

http://api.unshort.me/?r=http://theshorturl.ly/28292&t=json

会给你:

{
   "requestedURL":"http://theshorturl.ly/28292",
   "success":"true",
   "resolvedURL":"http://thefullurl.com/a-webiste/what-a-long-url"
}

答案 4 :(得分:4)

这是一个Python解决方案。

import urllib2

class HeadRequest(urllib2.Request):
    def get_method(self): return "HEAD"

def get_real(url):
    res = urllib2.urlopen(HeadRequest(url))
    return res.geturl()

使用实际的twitter t.co链接进行测试:

url = "http://t.co/yla4TZys"
expanded = get_real(url)

expanded = http://twitter.com/shanselman/status/276958062156320768/photo/1

尝试使用 - 除外,你很高兴。

答案 5 :(得分:2)

另一个Python解决方案,这次依赖于请求模块而不是urllib2(以及其他所有库):

#!/usr/bin/env python

import requests

shorturl = raw_input("Enter the shortened URL in its entirety: ")
r = requests.get(shorturl)

print("""
The shortened URL forwards to:

    %s
""" % r.url)

答案 6 :(得分:1)

这是一个R解决方案,从此线程中的其他答案移植,并从RCurl包的example()代码移植:

unshorten_url <- function(uri){
        require(RCurl)
        if(RCurl::url.exists(uri)){
                # listCurlOptions()
                opts <- list(
                        followlocation = TRUE,  # resolve redirects
                        ssl.verifyhost = FALSE, # suppress certain SSL errors
                        ssl.verifypeer = FALSE, 
                        nobody = TRUE, # perform HEAD request
                        verbose = FALSE
                );
                curlhandle = getCurlHandle(.opts = opts)
                getURL(uri, curl = curlhandle)
                info <- getCurlInfo(curlhandle)
                rm(curlhandle)  # release the curlhandle!
                info$effective.url
        } else {
                # just return the url as-is
                uri
        }
}

答案 7 :(得分:0)

您可以尝试使用此Java代码。这是一个使用java拥有的HttpURLConnection的代码。 : http://www.srccodes.com/p/article/37/expand-shortened-link-using-java?fb_action_ids=1544985322486585&fb_action_types=og.likes

此网址扩展程序如何工作? 将HttpURLConnection设为缩短的网址(例如http://goo.gl/WT6eFw)。

提取HTTP标题字段“Location”的值。此值只是扩展的或实际的目标URL。

关闭连接。

答案 8 :(得分:0)

Twitter扩展了网址。假设您使用Twitter API发送了一条推文 编码为json文件。

import json
urlInfo=[]

tweet=json.loads(tweet)
keyList=tweet.keys() # list of all posssible keys
tweet['entities'] # gives us values linked to entities 

您可以观察到有一个名为&#39; urls&#39;     推文[&#39;实体&#39;] [&#39;网址&#39;]#给出映射到关键网址的值

urlInfo=tweet['entities']['expanded_url'] # move it to a list
# iterating over the list.. gives shortened URL
# and expanded URL
for item in urlInfo:
  if "url" and "expanded_url" in urlInfo.keys():
    print(item["url"] + " "+item["expanded_url"])