2010-03-23 5 views

Antwort

16

Hier ist eine schnelle und schmutzige Lösung, sollte aber den Job erledigen:

library(RCurl) 

decode.short.url <- function(u) { 
    x <- try(getURL(u, header = TRUE, nobody = TRUE, followlocation = FALSE)) 
    if(class(x) == 'try-error') { 
    return(u) 
    } else { 
    x <- strsplit(x, "Location: ")[[1]][2] 
    return(strsplit(x, "\r")[[1]][1]) 
    } 
} 

Die Variable 'u' unten enthält eine verkürzte URL, und eine normale URL.

u <- c("http://tinyurl.com/adcd", "http://www.google.com") 

Sie können dann die erweiterten Ergebnisse erhalten, indem Sie Folgendes tun.

Das oben genannte sollte für die meisten Dienste funktionieren, die die URL nicht nur tinyURL verkürzen. Ich denke.

HTH

Tony Breyal

1

Ich weiß nicht, R aber im Allgemeinen müssen Sie eine HTTP-Anfrage an die tinyurl-URL machen. Sie sollten eine 301-Antwort mit der tatsächlichen URL zurückbekommen.

0
library(RCurl) 

decode.short.url <- function(u) { 
    x <- try(getURL(u, header = TRUE, nobody = TRUE, followlocation = FALSE)) 
    if(class(x) == 'try-error') { 
    return(u) 
    } else { 
    x <- strsplit(x, "Location: ")[[1]][2] 
    return(strsplit(x, "\r")[[1]][1]) 
    } 
} 


(u <- c("http://tinyurl.com/adcd", "http://tinyurl.com/fnqsh")) 
(sapply(u, decode.short.url)) 
+0

Tony, haben Sie zwei Konten? –

+0

@ JD-Long Ja, aber ich weiß nicht, wie man die beiden Konten kombiniert. Der obere verwendet OpenID. Ich kann mich nicht einmal daran erinnern, wie ich mich in den unteren einloggen kann (mit dem Bild Danger Mouse). Ich bin neu beim Posten auf Stackoverflow. –

1

verwendete ich Tony Breyal den Code, aber die Funktion zurückgegeben NA Werte für diese URLs in denen es keine URL-Umleitung war. Obwohl Tony in seinem Beispiel "google.com" aufgeführt hat, denke ich, dass Google Sie auf jeden Fall an eine lokalisierte Version von google.com weiterleitet.

Hier ist, wie ich Tonys Code damit umgehen geändert:

decode.short.url <- function(u) { 
    x <- try(getURL(u, header = TRUE, nobody = TRUE, followlocation = FALSE)) 
    if(class(x) == 'try-error') { 
    print(paste("***", u, "--> ERORR!!!!"))  
    return(u) 
    } else { 
    x <- strsplit(x, "Location: ")[[1]][2] 
    x.2 <- strsplit(x, "\r")[[1]][1] 
    if (is.na(x.2)){ 
     print(paste("***", u, "--> No change.")) 
     return(u) 
    }else{ 
     print(paste("***", x.2, "--> resolved in -->", x.2)) 
     return(x.2) 
    } 
    } 
} 


u <- list("http://www.amazon.com", "http://tinyurl.com/adcd") 
urls <- sapply(u, decode.short.url) 
Verwandte Themen