tiny shortener link gratis bitly acortador twitter url-shortener

twitter - shortener - Encuentre dónde va un enlace t.co



tiny url (9)

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


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


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 un enlace de twitter t.co real:

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

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

Concluye con un intento, excepto y estás listo para ir.


Me mantendría alejado de API externas sobre las cuales no tienes 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. Así es como 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 adaptarse a otros idiomas o incluso con guiones con el comando curl en sistemas UNIXy.

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


Otra solución de Python, esta vez confiando en el módulo de solicitudes en lugar de urllib2 (y el resto de esas 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)


Podrías dar unshorten.me una oportunidad. Tiene una API .

JSON :

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

Te daría:

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



Si quieres hacerlo desde la línea de comando, la opción verbosa de curl 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.


Twitter expande la URL. Supongamos que tiene un solo tweet con la API de Twitter codificada 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

Puedes observar que hay un valor llamado ''urls'' tweet [''entities''] [''urls''] # da valores asignados a las 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"])


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

  • --head o -I Solo descargo encabezados HTTP
  • -w o --write-out imprime la cadena especificada después de la salida
  • -L o --location ubicación sigue a los encabezados de ubicación