GreenManXY
GreenManXY

Reputation: 462

How to access Youtube Data API v3 with R

I am trying to use R to retrieve data from the YouTube API v3 and there are few/no tutorials out there that show the basic process. I have figured out this much so far:

# 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")

But I am just getting some general meta-data and not the search results. Help?

PS. I know there is a package 'tuber' out there but I found it very unstable and I just need to perform simple searches so I prefer to code the requests myself.

Upvotes: 0

Views: 401

Answers (1)

Abdessabour Mtk
Abdessabour Mtk

Reputation: 3888

Sadly there is no way to directly get the durations, you'll need to call the videos endpoint (with the part set to part=contentDetails) after doing the search if you want to get those infos, however you can pass as much as 50 ids in a single call thus we can save some time by pasting all the ids together.

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 

Upvotes: 1

Related Questions