Trova dove va un link t.co

Dato un collegamento t.co, come posso trovare dove si risolve il collegamento? Ad esempio, se ho t.co/foo, voglio una funzione o un processo che restituisca domain.com/bar.

Starei lontano da API esterne su cui non hai alcun controllo. Ciò introdurrà semplicemente una dipendenza nell’applicazione che è un potenziale punto di errore e potrebbe costare denaro da utilizzare.

CURL può farlo abbastanza bene. Ecco come l’ho fatto in 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); } 

Sono sicuro che questo potrebbe essere adattato ad altri linguaggi o addirittura a script con il comando di curl sui sistemi UNIXy.

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

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

  • --head or -I scarica solo le intestazioni HTTP
  • -w o --write-out stampa la stringa specificata dopo l’output
  • -L o --location segue le intestazioni di posizione

Se vuoi farlo dalla riga di comando, l’opzione dettagliata di curl viene in soccorso:

 curl -v  

ti dà la risposta HTTP. Per t.co sembra darti una risposta HTTP / 301 (spostata permanentemente). Quindi, c’è un campo Location, che punta all’URL dietro quello abbreviato.

Potresti dare unshorten.me a go. Ha un’API .

JSON :

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

Ti darei:

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

Ecco una soluzione 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() 

Testato con un link twitter t.co attuale:

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

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

Avvolgi tutto con una prova, eccetto e sei a posto.

Un’altra soluzione Python, questa volta si basa sul modulo delle richieste anziché su urllib2 (e su tutto il resto di quelle librerie):

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

Ecco una soluzione R, portata da altre risposte in questo thread e dal codice example() del pacchetto 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 } } 

Puoi provare questo codice Java. Tale codice utilizza HttpURLConnection di proprietà di java. : http://www.srccodes.com/p/article/37/expand-shortened-link-using-java?fb_action_ids=1544985322486585&fb_action_types=og.likes

Come funzionerà questo Expander URL? Imposta HttpURLConnection sull’url abbreviato (ad esempio http://goo.gl/WT6eFw ).

Estrai il valore del campo di intestazione HTTP “Posizione”. E questo valore non è altro che l’URL di destinazione espanso o effettivo.

Chiudi la connessione.

Twitter espande l’URL. Supponi di avere un singolo tweet usando l’API di Twitter codificata come file json.

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

Puoi notare che esiste un valore chiamato “urls” tweet [“entity”] [“urls”] # fornisce valori associati agli URL delle chiavi

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