如何使用 R 访问 Youtube 数据 API v3

How to access Youtube Data API v3 with R

我正在尝试使用 R 从 YouTube API v3 检索数据,那里有 few/no 教程展示了基本过程。到目前为止我已经明白了这么多:

# Youtube API query
base_url <- "https://youtube.googleapis.com/youtube/v3/"

my_yt_search <- function(search_term, max_results = 20) {
  my_api_url <- str_c(base_url, "search?part=snippet&", "maxResults=", max_results, "&", "q=", search_term, "&key=", 
                      my_api_key, sep = "")
  result <- GET(my_api_url)
  return(result)
}

my_yt_search(search_term = "salmon")

但我只是得到了一些一般的元数据,而不是搜索结果。帮忙?

PS。我知道那里有一个包 'tuber',但我发现它非常不稳定,我只需要执行简单的搜索,所以我更喜欢自己编写请求代码。

遗憾的是,没有办法直接获取持续时间,如果你想获取,则需要在搜索后调用 videos 端点(部分设置为 part=contentDetails)这些信息,但是您可以在一次调用中传递多达 50 个 ID,因此我们可以通过将所有 ID 粘贴在一起来节省一些时间。

library(httr)
library(jsonlite)
library(tidyverse)

my_yt_duration <- function(...){
  my_api_url <- paste0(base_url, "videos?part=contentDetails", paste0("&id=", ..., collapse=""), "&key=", 
                     my_api_key )
  GET(my_api_url) -> resp
  fromJSON(content(resp, "text"))$items %>% as_tibble %>% select(id, contentDetails) -> tb
  tb$contentDetails$duration %>% tibble(id=tb$id, duration=.)
}

### getting the video IDs

my_yt_search(search_term = "salmon")->res
## Converting from JSON then selecting all the video ids
# fromJSON(content(res,as="text") )$items$id$videoId 
my_yt_duration(fromJSON(content(res,as="text") )$items$id$videoId) -> tib.id.duration
# A tibble: 20 x 2
   id          duration
   <chr>       <chr>   
 1 -x2E7T3-r7k PT4M14S 
 2 b0ahREpQqsM PT3M35S 
 3 ROz8898B3dU PT14M17S
 4 jD9VJ92xyzA PT5M42S 
 5 ACfeJuZuyxY PT3M1S  
 6 bSOd8r4wjec PT6M29S 
 7 522BBAsijU0 PT10M51S
 8 1P55j9ub4es PT14M59S
 9 da8JtU1YAyc PT3M4S  
10 4MpYuaJsvRw PT8M27S 
11 _NbbtnXkL-k PT2M53S 
12 3q1JN_3s3gw PT6M17S 
13 7A-4-S_k_rk PT9M37S 
14 txKUTx5fNbg PT10M2S 
15 TSSPDwAQLXs PT3M11S 
16 NOHEZSVzpT8 PT7M51S 
17 4rTMdQzsm6U PT17M24S
18 V9eeg8d9XEg PT10M35S
19 K4TWAvZPURg PT3M3S  
20 rR9wq5uN_q8 PT4M53S