【问题标题】:R - Loop API CallR - 循环 API 调用
【发布时间】:2020-02-10 04:24:32
【问题描述】:

我正在使用 R 成功地进行 API 调用。对于每个单独的呼叫,我需要更改一个或两个可区分的 ID(在 activity_id 和/或 name_id 下面的代码的情况下)。该代码运行良好,但是我现在处于一个我喜欢自动化此过程的位置,而不是手动更改每个呼叫的 ID。我想知道是否有一种方法可以使用数据框或列表来循环它来存储相关的 ID。

我已经在 Stack 中进行了搜索,但尚未找到或执行合适的解决方案。

任何帮助将不胜感激。

谢谢,

JPC

apiKey <-"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI"
example<- GET("url?activity_id=b5cb9359-f0e5-4939-9be3-fc95f8bc7d6b&name_id=f1e17fa6-c40c-4810-9c43-60939e2a9a99",add_headers(Authorization = paste("Bearer", apiKey)))
example <-content(example,"text")
example <-fromJSON(example,flatten = TRUE)
example <-unnest(example,data)
write.csv(example,"example.csv",row.names=F)

【问题讨论】:

    标签: r api loops


    【解决方案1】:

    我们可以编写一个函数,根据传递的activity_idname_id 使用sprintf 动态生成url。

    get_data <- function(activity_id, name_id) {
    
       url <- sprintf('url?activity_id=%s&name_id=%s', activity_id, name_id)
       example<- httr::GET(url,add_headers(Authorization = paste("Bearer", apiKey)))
       example <- httr::content(example,"text")
       example <- jsonlite::fromJSON(example,flatten = TRUE)
       example <- tidyr::unnest(example,data)
       return(example)
    }
    

    然后使用Map 调用它。

    out <- Map(get_data, activity_vec, name_vec)
    

    这里activity_vecname_vec是各自id的向量。这将返回out 中的数据帧列表,如果需要,可以在写入 csv 之前将其组合成一个数据帧。


    如果只有name_id 发生变化,我们可以做到

    get_data <- function(name_id) {
        url <- sprintf('url?activity_id=b5cb9359-f0e5-4939-9be3-fc95f8bc7d6&name_id=%s', name_id)
        example<- httr::GET(url,add_headers(Authorization = paste("Bearer", apiKey)))
        example <- httr::content(example,"text")
        example <- jsonlite::fromJSON(example,flatten = TRUE)
        example <- tidyr::unnest(example,data)
        return(example)
      }
    
    out <- lapply(name_vec, get_data)
    

    【讨论】:

    • 嗨 Ronak - 感谢您对这篇文章的看法。它似乎没有解决问题。也许如果 activitiy_id 是一个常量值并且只有 name_id 正在改变,这会简化事情吗?任何进一步的帮助将不胜感激。
    • @JPC 如果只有 name_id 发生变化,请查看更新,其中 name_vec 是您要使用的名称 id 的向量。
    • 谢谢 Ronak - 感谢您的快速回复。会让你知道我是怎么做的。
    • 嗨@Ronak Shah。在过去的几天里,我一直在玩这个,但没有运气。以下错误是一致的“ UseMethod(“unnest”)中的错误:没有适用于“unnest”的适用方法应用于“list”类的对象。
    • 那么您需要提供一个有效的 URL,我可以在该 URL 上测试我的解决方案,从而使这篇文章可重现。 url?activity_id=b5cb9359-f0e5-4939-9be3-fc95f8bc7d6&amp;name_id 不是一个有效的 URL,所以我不知道它返回什么类型的数据。
    猜你喜欢
    • 2016-03-18
    • 1970-01-01
    • 1970-01-01
    • 2019-08-15
    • 2019-05-09
    • 2020-07-03
    • 1970-01-01
    • 2022-03-11
    • 2016-11-18
    相关资源
    最近更新 更多