这篇文章解释了如何通过R编程使用谷歌照片库API。你可以使用这个API来创建新的相册和上传图片到该相册,并与他人分享。你还可以获取你可以访问的相册的信息。 请确保你能访问以下R库。如果你没有访问它们的权限,你可以使用install.packages("packagename") 。一旦安装完毕,你可以通过命令加载库,library(packagename)
-
library(httr)
-
library(jsonlite)
-
library(dplyr)
-
library(glue)
-
library(googleAuthR)
谷歌照片库的API需要以下两个范围的oauth2.0认证
www.googleapis.com/auth/photos… 要获取oauth2.0令牌,你可以按照googleAuthR R包的文档进行。一旦你完成了认证,你可以使用以下命令获取令牌。
k <- gargle::token_fetch(token = gar_token())
authorization = paste('Bearer ', k$credentials$access_token)
列出用户可以访问的所有相册
下面的程序返回所有的相册,包括它们的标题和URL,以及相册中的图片数量。它还给出了相册是否可以共享的信息。
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()
创建新专辑
在这里,我正在创建一个新的相册,标题为Myblog 。你可以把它改成你想要的任何名字。
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()
分享相册
在下面的代码中,你需要在API中提供 albumID https://photoslibrary.googleapis.com/v1/albums/{albumId}:share.我使用的是上一步的 albumID,在这一步中我创建了一个新的相册。
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"]]
上传图片
上传图片需要两个步骤--首先你需要上传token到谷歌服务器。一旦完成,你就可以继续上传图片了。在这里,我使用存储在我当前工作目录中的图片myimage.png 。
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")
仅仅是前一步并没有上传图片。你还需要上传令牌。请参考下面的程序。
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()
列出一个相册的所有图片
如果你想看到一个相册的每张图片的URL,你可以使用和运行下面的程序。你可以增加pageSize 参数来查看超过25个图像/视频文件。
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()