【问题标题】:How to access air quality API through R?如何通过 R 访问空气质量 API?
【发布时间】:2019-10-23 15:52:21
【问题描述】:

尝试访问AirQuality API,对此非常陌生,看不到简单的 R 教程。

得到我的用户名和密码。

我有兴趣获取洛杉矶数据作为样本

api.airvisual.com/v2/city?city=Los Angeles&state=California&country=USA&key={{KEY}}

我的凭据

用户名 (他们是这样给的)

密码

然后我尝试使用教程中的一些代码

library(httr)
library(jsonlite)

url <- "api.airvisual.com/v2/city?city=Los Angeles&state=California&country=USA&key={{KEY}}"

endpoint <- "city"

some_data <- GET(url, endpoint)

它给了我一个错误

if (is_http) { 中的错误:参数长度为零

它们的参数是

参数

城市:城市的英文名称,可以使用相应的列表端点找到。

州:州的英文名称,可以使用相应的列表端点找到。

国家:国家的英文名称,可以使用相应的列表端点找到。

我确信这是非常简单的事情,但我以前从未做过,所以我跌跌撞撞。请指教。

UPD。

当我使用时

url <- "api.airvisual.com/v2/city?city=Los%20Angeles&state=California&country=USA&key={{KEY}}"

使用 %20 而不是空格,它会给我一个错误

UseMethod("as.request") 中的错误: 没有适用于“字符”类对象的“as.request”方法

【问题讨论】:

  • 什么是端点?
  • URL 中的空格可能会给您带来问题;它可能需要编码成%20 - reference
  • @Alex,我相信城市是终点
  • 这不在他们给curl --location --request GET "api.airvisual.com/v2/city?city=Los%20Angeles&amp;state=California&amp;country=USA&amp;key={{YOUR_API_KEY}}"的示例请求中 - 它已被编码为%20
  • 如果你只使用GET( url ) 会怎样?

标签: r api httr


【解决方案1】:

我认为您不需要指定端点。可以直接使用GET,如下:

require(httr)
response = GET("https://api.airvisual.com/v2/city?city=Los%20Angeles&state=California&country=USA&key={{my_private_key}}")

如果您还需要访问响应中的数据,代码将是:

data = content(response)

data 是一个看起来像这样的列表:

$status
[1] "success"

$data
$data$city
[1] "Los Angeles"

$data$state
[1] "California"

$data$country
[1] "USA"

$data$location
$data$location$type
[1] "Point"

$data$location$coordinates
$data$location$coordinates[[1]]
[1] -118.2417

$data$location$coordinates[[2]]
[1] 34.0669



$data$current
$data$current$weather
$data$current$weather$ts
[1] "2019-10-23T07:00:00.000Z"

$data$current$weather$tp
[1] 20

$data$current$weather$pr
[1] 1014

$data$current$weather$hu
[1] 52

$data$current$weather$ws
[1] 0.78

$data$current$weather$wd
[1] 345

$data$current$weather$ic
[1] "01n"


$data$current$pollution
$data$current$pollution$ts
[1] "2019-10-23T07:00:00.000Z"

$data$current$pollution$aqius
[1] 37

$data$current$pollution$mainus
[1] "p1"

$data$current$pollution$aqicn
[1] 41

$data$current$pollution$maincn
[1] "p1"

让我知道这是否有效。

附:我什至尝试在洛杉矶使用 %20 而不是空间,它可以工作。

【讨论】:

  • 谢谢!你能分享你的IDE中的完整代码吗?我还在挣扎。也许我错过了一些简单的东西。请稍微更新您的答案。带密码等
  • @Oleksiy 我已经从我的控制台和输出中添加了完整的代码。如果你告诉我你遇到了什么错误,我将能够调试。
  • library(httr) 响应
  • 在 URL 的开头添加“https://”。为了安全起见,请将您的密钥编码为URLencode(MYKEY),其中 MYKEY 是包含您的密钥的字符串对象。
  • 您确定 api 密钥正确吗?如果您 100% 确定,请删除 URLencode 部分。
【解决方案2】:

您必须提供方案作为 URL 的一部分:

library(httr)
GET("https://api.airvisual.com/....")
     ^^^^^^^^

【讨论】:

    猜你喜欢
    • 2018-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    • 2015-02-11
    • 1970-01-01
    相关资源
    最近更新 更多