twitteR包中的函数decode_short_URL无法正常工作

时间:2015-06-23 13:09:52

标签: r twitter-oauth sentiment-analysis tweets url-shortener

我正在使用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

1 个答案:

答案 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