如何查找“t.co”链接解析到哪里?例如,如果我有“t.co/foo”,我想要一个函数或过程返回“domain.com/bar”。
如何查找“t.co”链接解析到哪里?例如,如果我有“t.co/foo”,我想要一个函数或过程返回“domain.com/bar”。
我建议远离那些你无法控制的外部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);
}
我相信这可以适应其他语言,甚至可以在UNIX系统上使用curl命令进行脚本编写。 http://jonathonhill.net/2012-05-18/unshorten-urls-with-php-and-curl/CURLOPT_NOBODY => true
,这样就会执行一个 HEAD 请求,而最终的资源实际上并没有被获取? - MaxArtcurl -v <url>
该命令将返回HTTP响应。对于t.co,它似乎会给出一个HTTP/301响应(永久移动)。然后,有一个Location字段,指向缩短网址背后的URL。
curl -s -o /dev/null --head -w "%{url_effective}\n" -L "https://t.co/6e7LFNBv"
--head
或-I
仅下载HTTP头文件-w
或--write-out
在输出后打印指定的字符串-L
或--location
跟随位置标头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
在try-except语句中包装它,你就可以开始了。
http://t.co/OFlTpTzCqt
不兼容。抛出HTTPError:HTTP错误303:HTTP服务器返回将导致无限循环的重定向错误。最后的30x错误消息是:查看其他
。 - Moj#!/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)
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
}
}
Twitter扩展了URL。假设您有一个使用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
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"])