Декодировать tinyurl в R, чтобы получить полный URL-адрес?
Есть ли способ декодировать tinyURL ссылки в R, чтобы я мог видеть, на каких веб-страницах они действительно ссылаются?
Ответы
Ответ 1
Ниже представлено быстрое и грязное решение, но должно быть выполнено:
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' ниже содержит один shortend url и один регулярный url.
u <- c("http://tinyurl.com/adcd", "http://www.google.com")
Затем вы можете получить расширенные результаты, выполнив следующие действия.
sapply(u, decode.short.url)
Вышеупомянутое должно работать для большинства служб, которые сокращают URL-адрес, а не только tinyURL. Я думаю.
НТН
Тони Брейал
Ответ 2
Я не знаю R, но в целом вам нужно сделать http-запрос на tinyurl-url. Вы должны вернуть ответ 301 с фактическим URL.
Ответ 3
Я использовал код Тони Брейла, но функция вернула значения NA
для тех URL-адресов, где перенаправления URL-адресов не было. Хотя Тони перечислил "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)
Ответ 4
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) )