我正在使用decode_short_url
twitteR
软件包解码来自Twitter帖子的缩短网址,但我无法获得所需的结果,它始终会返回相同的结果,例如:< / p>
decode_short_url(decode_short_url("http://bit.ly/23226se656"))
## http://bit.ly/23226se656
## [1] "http://bit.ly/23226se656
答案 0 :(得分:3)
更新我将此功能包装在package中并设法在当天获得on 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
您可以传入一个网址向量,然后以该格式获得data_frame
/ data.frame
。
该特定的bit.ly网址出现404
错误。这是decode_short_url
的一个版本,它有一个可选的check
参数,可以尝试HEAD
请求,并为除200以外的任何HTTP状态发出警告消息。
您可以进一步修改它以在“扩展”链接404的情况下返回NA
(我不知道在链接错误的情况下您需要做什么)。
请注意,添加的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