2011-06-28 30 views
28

Dado un enlace t.co, ¿cómo puedo saber ver donde el enlace se resuelve? Por ejemplo, si tengo t.co/foo, quiero una función o proceso que devuelva domain.com/bar.donde un enlace t.co va a

Respuesta

5

Usted podría dar unshorten.me una oportunidad. Tiene un API.

JSON:

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

le daría:

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

unshorten.me se está cerrando su API, víctima de su propio éxito. (No puede pagar el costo de alojamiento de 6 millones de llamadas API por día) – Shewfig

+0

Creé una pequeña aplicación para este propósito. Visite www.find-t.co. –

+1

El sitio unshorten.me ya no está. –

6

Si desea hacerlo desde la línea de comandos, opción detallada de rizo viene al rescate:

curl -v <url> 

te da la respuesta HTTP. Para t.co parece darle una respuesta HTTP/301 (movida permanentemente). Luego, hay un campo de Ubicación, que apunta a la URL detrás del acortado.

+2

también curl -I le dará la información del encabezado – minaz

18

me mantendría alejado de las API externas sobre las que no tiene control. Eso simplemente introducirá una dependencia en su aplicación que es un posible punto de falla, y podría costarle dinero para usar.

CURL puede hacer esto bastante bien. He aquí cómo lo hice en 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); 
} 

Estoy seguro de que esto podría ser adaptado a otros idiomas o incluso secuencias de comandos con el comando curl en sistemas UNIXy.

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

+3

Buena solución. ¿Puedo sugerir establecer 'CURLOPT_NOBODY => true' para que se realice una solicitud HEAD en su lugar y el recurso final no se recupere realmente? – MaxArt

+0

¿Cuál es la línea de comando equivalente aquí? –

+3

No es un idiota, pero RTFM. http://curl.haxx.se/docs/manpage.html –

6

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

  • --head o -I sólo descarga los encabezados HTTP
  • -w o --write-out imprime la cadena especificada después de la salida de
  • -L o --location siguiente manera cabeceras ubicación
4

Aquí hay una solución de 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() 

probado con una vinculación efectiva Twitter t.co:

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

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

envolverlo con un try-salvo y que son buenos para ir.

+0

no funciona con 'http://t.co/OFlTpTzCqt'.throws' HTTPError: HTTP Error 303: el servidor HTTP devolvió un error de redirección que conduciría a un ciclo infinito. El último mensaje de error de 30x fue: See Other' – Moj

2

Otra solución Python, esta vez apoyándose en el módulo de peticiones en lugar de urllib2 (y todo el resto de las bibliotecas):

#!/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) 
1

Aquí es una solución de R, portado de otras respuestas en este hilo, y example() de código del paquete 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 
     } 
} 
0

Usted puede probar este código Java. Tal es un código de uso de la HttpURLConnection propiedad de java. : http://www.srccodes.com/p/article/37/expand-shortened-link-using-java?fb_action_ids=1544985322486585&fb_action_types=og.likes

¿Cómo funcionará este expansor de URL? Haga HttpURLConnection a la url acortada (digamos http://goo.gl/WT6eFw).

Extraiga el valor del campo del encabezado HTTP "Ubicación". Y este valor no es más que la URL de destino expandida o real.

Cierre la conexión.

0

Twitter expande la URL. Supongamos que tiene un solo tweet utilizando twitter API codificado como archivo json.

import json 
urlInfo=[] 

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

Se puede observar que hay un valor llamado 'URL' Tweet [ 'entidades'] [ ''] # urls da valores asignados a las direcciones URL clave

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"])