1

我尝试向 API 发送请求,使用 RCurl 库。

我的代码:

start = "2018-07-30"
end = "2018-08-15"

api_request <- paste("https://api-metrika.yandex.ru/stat/v1/data.csv?id=34904255&date1=",
                     start,
                     "&date2=",
                     end,
                     "&dimensions=ym:s:searchEngine&metrics=ym:s:visits&dimensions=ym:s:<attribution>SearchPhrase&filters=ym:s:<attribution>SearchPhrase!~'some|phrases|here'&limit=100000&oauth_token=OAuth_token_here", sep="")
s <- getURL(api_request)

每次我尝试这样做时,如果我改用 getUrlContent,我都会得到响应“错误 400”或“错误请求”。当我在浏览器中打开这个 url 时 - 它工作正常。我仍然找不到这个问题的任何解决方案,所以如果有人对此有所了解 - 请帮助我,好心人=)

4

1 回答 1

0

如果 URL 正确,您可以使用多种方法。首先,您可以将以下参数添加到getURL函数中。将参数设置为followlocationTRUE 允许跟随服务器作为 HTTP 标头的一部分返回的任何“Location:”标头。处理是递归的,PHP 将遵循任何“Location:”标头。

> s <- getURL(url1, .opts=curlOptions(followlocation = TRUE))

如果这不起作用,另一种方法是XML通过调用htmlParse方法而不是使用包getURL

> library(XML)
> s <- htmlParse(api_request)

另一种方法是使用httr包并调用GET函数:

> library(httr)
> s <- GET(api_request)
于 2018-08-16T08:31:47.780 回答