Функция decode_short_URL из пакета twitteR не работает
Я использую decode_short_url
из twitteR
пакет для декодирования сокращенных URL-адресов из сообщений Twitter, но я не могу получить желаемые результаты, он всегда возвращает одинаковые результаты, такие как:
decode_short_url(decode_short_url("http://bit.ly/23226se656"))
## http://bit.ly/23226se656
## [1] "http://bit.ly/23226se656
1 ответ
ОБНОВЛЕНИЕ Я упаковал эту функциональность в пакет и сумел получить ее в CRAN в тот же день. Теперь вы можете просто сделать:
library(longurl)
expand_urls("http://bit.ly/23226se656", check=TRUE, warn=TRUE)
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100%
## Source: local data frame [1 x 2]
##
## orig_url expanded_url
## 1 http://bit.ly/23226se656 NA
##
## Warning message:
## In FUN(X[[i]], ...) : client error: (404) Not Found
Вы можете передать вектор URL-адресов и получить data_frame
/data.frame
обратно в том виде.
Этот конкретный URL-адрес bit.ly дает 404
ошибка. Вот версия decode_short_url
который имеет необязательный check
параметр, который будет пытаться HEAD
запросить и выдать предупреждающее сообщение для любого состояния HTTP, кроме 200.
Вы можете дополнительно изменить его, чтобы вернуть NA
в случае "расширенной" ссылки 404 (я понятия не имею, что вам нужно, чтобы действительно делать, если ссылка плохая).
Обратите внимание, что добавление HEAD
Запрос значительно замедлит процесс, поэтому вы можете сделать первый проход с check=FALSE
в отдельный столбец, затем сравните те, которые не были "расширены", затем отметьте те, которые check=TRUE
,
Вы также можете переименовать это, чтобы избежать конфликтов пространства имен с тем из twitteR
,
decode_short_url <- function(url, check=FALSE, ...) {
require(httr)
request_url <- paste("http://api.longurl.org/v2/expand?url=",
url, "&format=json", sep="")
response <- GET(request_url, query=list(useragent="twitteR"), ...)
parsed <- content(response, as="parsed")
ret <- NULL
if (!("long-url" %in% names(parsed))) {
ret <- url
} else {
ret <- parsed[["long-url"]]
}
if (check) warn_for_status(HEAD(url))
return(url)
}
decode_short_url("http://bit.ly/23226se656", check=TRUE)
## [1] "http://bit.ly/23226se656"
## Warning message:
## In decode_short_url("http://bit.ly/23226se656", check = TRUE) :
## client error: (404) Not Found