2010-03-23 3 views

답변

16

다음은 신속하고 더러운 솔루션입니다,하지만 작업을 완수해야합니다

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

변수 '유'아래 하나 개 shortend URL 및 한 일반 URL을 포함하고 있습니다.

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

그러면 다음을 수행하여 확장 된 결과를 얻을 수 있습니다.

sapply(u, decode.short.url) 

위의 내용은 tinyURL뿐만 아니라 URL을 줄이는 대부분의 서비스에서 작동합니다. 나는 생각한다. 토니 Breyal

1

R을 모르지만 일반적으로 tinyurl-url에 http 요청을해야합니다. 실제 URL을 사용하여 301 응답을 다시 받아야합니다.

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

토니, 당신은 두 개의 계정을 가지고 : 여기

내가 그 다루는 토니의 코드를 수정하는 방법입니다? –

+0

@ JD-Long 예.하지만 두 계정을 결합하는 방법을 모르겠습니다. 맨 위에있는 것은 OpenID를 사용합니다. 나는 아래쪽에 로그인하는 방법을 기억조차 못한다 (위험 마우스 그림 사용). 나는 stackoverflow에 게시하는 새로운입니다. –

1

HTH

는 토니 Breyal의 코드를 사용하지만, 함수는 URL 리디렉션이 없었다 해당 URL에 대한 NA 값을 반환했습니다. Tony가 자신의 예에서 'google.com'을 표시했지만 Google은 어떤 경우에도 google.com의 현지화 된 버전으로 사용자를 리디렉션합니다.

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) 
관련 문제