来自 twitteR 包的函数 decode_short_URL 不工作

Function decode_short_URL from twitteR package not working

我正在使用 twitteR 包的 decode_short_url 来解码来自 Twitter 帖子的缩短的 URL,但我无法获得所需的结果,它总是返回相同的结果,例如:

decode_short_url(decode_short_url("http://bit.ly/23226se656"))

## http://bit.ly/23226se656
## [1] "http://bit.ly/23226se656

更新 我在 package and managed to get it 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

您可以传入一个 URL 的向量,并以该形式返回 data_frame/data.frame


那个特定的 bit.ly URL 给出了 404 错误。这是 decode_short_url 的一个版本,它有一个可选的 check 参数,它将尝试 HEAD 请求并针对 200 以外的任何 HTTP 状态抛出警告消息。

如果出现 "expanded" link 404,您可以将其进一步修改为 return NA(我不知道您需要这样做才能在事件 link 是错误的)。

请注意,addd HEAD 请求会显着减慢处理速度,因此您可能希望首先将 check=FALSE 传递到单独的列,然后比较哪些不是 "expanded",然后用 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