You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言如何遍历查询词列表批量调用Bing新闻搜索API获取数据

错误原因

  • 变量赋值逻辑错误:queryString[i]、response[i]、df[i]是普通向量的元素赋值逻辑,但你需要存储的请求参数、响应对象都是列表结构,需要提前将变量初始化为列表,且用[[i]]做列表元素赋值,否则会触发长度不匹配的警告,导致后续响应对象不合法,调用content()时报错。
  • 查询词取值错误:q = "[i]"是将固定字符串"[i]"作为查询词,没有实际读取查询词列表中的对应值。
  • 语法缺失:你给出的循环代码末尾缺少闭合的}。

循环版正确实现

library(httr)
library(jsonlite)

# 配置参数
API_KEY <- "替换为你自己的RapidAPI密钥"
querylist <- c("query1","query2", "query3")
url <- "https://bing-news-search1.p.rapidapi.com/news/search"
# 提前初始化存储结果的列表
result_list <- list()

for (i in seq_along(querylist)) {
  # 构造当前查询的参数
  current_query <- list(
    q = querylist[i],
    safeSearch = "Off",
    textFormat = "Raw",
    freshness = "Month"
  )
  # 发起请求
  response <- VERB("GET", url, 
                   add_headers(
                     'x-bingapis-sdk' = "true", 
                     'x-rapidapi-host' = "bing-news-search1.p.rapidapi.com",
                     'x-rapidapi-key' = API_KEY
                   ), 
                   query = current_query, 
                   content_type("application/octet-stream")
  )
  # 解析返回结果,提取新闻条目
  res_json <- content(response, "text") |> fromJSON()
  result_list[[i]] <- res_json$value
  # 可选:添加1秒延迟避免触发API限流
  Sys.sleep(1)
}

# 合并所有查询结果为统一数据框
final_df <- do.call(rbind, result_list)

更优实现:purrr向量化迭代

无需手动处理循环索引和赋值,代码更简洁易维护:

library(htTR)
library(jsonlite)
library(purrr)

# 配置参数
API_KEY <- "替换为你自己的RapidAPI密钥"
querylist <- c("query1","query2", "query3")
url <- "https://bing-news-search1.p.rapidapi.com/news/search"

# 定义单查询的请求函数
get_bing_news <- function(keyword) {
  current_query <- list(
    q = keyword,
    safeSearch = "Off",
    textFormat = "Raw",
    freshness = "Month"
  )
  response <- VERB("GET", url, 
                   add_headers(
                     'x-bingapis-sdk' = "true", 
                     'x-rapidapi-host' = "bing-news-search1.p.rapidapi.com",
                     'x-rapidapi-key' = API_KEY
                   ), 
                   query = current_query, 
                   content_type("application/octet-stream")
  )
  res_json <- content(response, "text") |> fromJSON()
  Sys.sleep(1)
  return(res_json$value)
}

# 批量迭代查询,直接合并为数据框
final_df <- map_dfr(querylist, get_bing_news)

内容的提问来源于stack exchange,提问作者Evan C

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 07:36:03