按地理位置搜索YouTube内容的OAuth scope配置及R脚本问题
解决方案
1. 接口权限配置方案
做公开YouTube视频搜索不需要OAuth授权,也不需要配置复杂的scope,使用API密钥即可实现:
- 登录Google Cloud Console,创建新项目,搜索并启用「YouTube Data API v3」
- 在「凭据」页面选择「创建凭据」→「API密钥」,保存生成的密钥即可,全程不需要配置OAuth同意屏幕,也不需要申请任何scope权限
注意:YouTube Data API v3有免费配额限制,单项目每日默认配额为10000,每次搜索请求消耗100配额,每日最多可发起100次搜索请求,超出后需要申请提额。
2. 报错原因及修复
你遇到的Error: $ operator is invalid for atomic vectors报错,是因为你试图用$符号提取原子向量(比如字符串、数值向量、未解析的接口返回体)的嵌套字段,属于R基础语法错误。从你的代码截图来看,错误出在接口返回结果解析的步骤:你直接对httr请求返回的response对象用$提取字段,没有先把返回的JSON内容解析为R列表结构。
3. 可直接运行的R脚本示例
先安装依赖包:
install.packages(c("httr", "jsonlite", "dplyr"))
运行搜索代码:
library(httr) library(jsonlite) library(dplyr) # 替换为你自己的API密钥 api_key <- "YOUR_GOOGLE_API_KEY" # 搜索关键词 search_keyword <- "城市风光" # 目标城市经纬度,示例为北京坐标,可自行替换为对应城市的经纬度 city_location <- "39.9042,116.4074" # 搜索范围半径,单位为米,示例为50公里 search_radius <- "50000" # 发起接口请求 api_response <- GET( url = "https://www.googleapis.com/youtube/v3/search", query = list( part = "snippet", q = search_keyword, type = "video", location = city_location, locationRadius = search_radius, maxResults = 50, key = api_key ) ) # 校验请求状态 if (status_code(api_response) != 200) { stop("请求失败:", content(api_response)$error$message) } # 解析返回内容,只有解析后才能用$提取字段 parsed_result <- content(api_response, as = "parsed") video_list <- parsed_result$items # 转换为结构化数据框 video_df <- lapply(video_list, function(item) { data.frame( 视频ID = item$id$videoId, 视频标题 = item$snippet$title, 发布时间 = item$snippet$publishedAt, 频道名称 = item$snippet$channelTitle, 视频简介 = item$snippet$description, stringsAsFactors = FALSE ) }) %>% bind_rows() # 查看结果 head(video_df)
内容的提问来源于stack exchange,提问作者SarahR
相关产品推荐
相关产品推荐

