С учетом ссылки t.co, как я могу узнать, где находится ссылка? Например, если у меня есть t.co/foo, мне нужна функция или процесс, который возвращает domain.com/bar.
Найдите, где находится ссылка t.co
Ответ 1
Я бы держался подальше от внешних 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);
}
Я уверен, что это может быть адаптировано к другим языкам или даже написано с помощью команды curl
в системах UNIXy.
http://jonathonhill.net/2012-05-18/unshorten-urls-with-php-and-curl/
Ответ 2
Если вы хотите сделать это из командной строки, зависает опция curl verbose:
curl -v <url>
дает вам ответ HTTP. Для t.co он, кажется, дает вам ответ HTTP/301 (постоянно перемещается). Затем есть поле Location, которое указывает на URL-адрес за сокращенным.
Ответ 3
curl -s -o /dev/null --head -w "%{url_effective}\n" -L "https://t.co/6e7LFNBv"
-
--head
или-I
загружает только HTTP-заголовки -
-w
или--write-out
печатает указанную строку после вывода -
-L
или--location
следует за заголовками местоположений.
Ответ 4
Вы можете дать unshorten.me a go. Он имеет 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"
}
Ответ 5
Вот решение 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)
expand = http://twitter.com/shanselman/status/276958062156320768/photo/1
Заверните его с помощью try-except, и вам хорошо идти.
Ответ 6
Другое решение 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)
Ответ 7
Вот решение R, портированное из других ответов в этом потоке, и из example()
кода пакета RCurl:
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
}
}
Ответ 8
Вы можете попробовать этот Java-код. Такой код использует HttpURLConnection, принадлежащий java.: http://www.srccodes.com/p/article/37/expand-shortened-link-using-java?fb_action_ids=1544985322486585&fb_action_types=og.likes
Как будет работать этот расширитель URL? Сделайте HttpURLConnection к сокращенному URL (скажем http://goo.gl/WT6eFw).
Извлечь значение поля заголовка HTTP "Местоположение". И это значение не что иное, как расширенный или фактический целевой URL.
Закройте соединение.
Ответ 9
Twitter расширяет URL. Предположим, у вас есть один твит с помощью API twitter закодированный как json файл.
import json
urlInfo=[]
tweet=json.loads(tweet)
keyList=tweet.keys() # list of all posssible keys
tweet['entities'] # gives us values linked to entities
Вы можете заметить, что есть значение, называемое 'urls' tweet ['entities'] ['urls'] # дает значения, сопоставленные ключевым URL-адресам
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"])