install.packages("packagename")
. Once installed you can load library via command library(packagename)
- library(httr)
- library(jsonlite)
- library(dplyr)
- library(glue)
- library(googleAuthR)
Google Photos library API requires oauth2.0 authentication of the following two scopes.
https://www.googleapis.com/auth/photoslibraryTo fetch oauth2.0 token, you can follow documentation of
https://www.googleapis.com/auth/photoslibrary.sharing
googleAuthR
R package. Once you are done with authentication, you can fetch token using the following command :
k <- gargle::token_fetch(token = gar_token()) authorization = paste('Bearer ', k$credentials$access_token)
Lists all albums user has access to
The program below returns all albums with their title and URLs along with number of pictures album has. It also gives information whether album is shareable or not.
getalbum <- GET(glue("https://photoslibrary.googleapis.com/v1/albums"), add_headers( 'Authorization' = authorization, 'Accept' = 'application/json')) %>% content(., as = "text", encoding = "UTF-8") %>% fromJSON(., flatten = TRUE) %>% data.frame()
Create new album
Here I am creating a new album with title Myblog
. You can change it to any name you want.
Album <- POST("https://photoslibrary.googleapis.com/v1/albums", add_headers( 'Authorization' = authorization, 'Content-Type' = 'application/json'), body = list("album" = list("title" = "Myblog")), encode = "json") %>% content(., as = "text", encoding = "UTF-8") %>% fromJSON(., flatten = TRUE) %>% data.frame()
Share album
In the code below you need to provide albumID in the API https://photoslibrary.googleapis.com/v1/albums/{albumId}:share
. I am using albumID from the previous step wherein I created a new album.
request0 <- POST(glue('https://photoslibrary.googleapis.com/v1/albums/{Album[1,1]}:share'), add_headers( 'Authorization' = authorization, 'Content-Type' = 'application/json'), body = list("sharedAlbumOptions" = list( "isCollaborative" = "true", "isCommentable" = "true")), encode = "json") shareableUrl <- content(request0, as = "text", encoding = "UTF-8") %>% fromJSON(., flatten = TRUE) %>% .[["shareInfo"]] %>% .[["shareableUrl"]]
Upload picture
Uploading picture requires two steps - first you need to upload token to a Google Server. Once done you can proceed with uploading image. Here I am using the image myimage.png
which is stored in my current working directory.
imageFile <- "myimage.png" request <- POST("https://photoslibrary.googleapis.com/v1/uploads", add_headers( 'Authorization' = authorization, 'Content-Type' = 'application/octet-stream', 'X-Goog-Upload-File-Name' = imageFile, 'X-Goog-Upload-Protocol' = 'raw'), body=upload_file(imageFile)) response <- content(request, as = "text", encoding = "UTF-8")Previous step alone didn't upload the picture. You also need to upload token. Refer the program below.
request2 <- POST("https://photoslibrary.googleapis.com/v1/mediaItems:batchCreate", add_headers( 'Authorization' = authorization, 'Content-Type' = 'application/json'), body = list( "albumId" = Album[1,1], 'newMediaItems' = list( list("description" = "test upload", "simpleMediaItem" = list("uploadToken" = response) ) ) ), encode = "json" ) result <- content(request2, as = "text", encoding = "UTF-8") %>% fromJSON(., flatten = TRUE) %>% data.frame()
Lists all pictures of an album
If you want to see the URLs of each image of an album, you can use and run the program below. You can increase pageSize
parameter to see more than 25 images/videos files.
getmedia <- POST(glue("https://photoslibrary.googleapis.com/v1/mediaItems:search"), add_headers( 'Authorization' = authorization, 'Accept' = 'application/json'), body = list("albumId" = Album[1,1], "pageSize" = 25), encode = "json" ) %>% content(., as = "text", encoding = "UTF-8") %>% fromJSON(., flatten = TRUE) %>% data.frame()
Share Share Tweet