必需的授权范围
Google Photos Library API 包含多个用于访问媒体内容和影集的范围。 从各种调用返回的媒体内容会因范围而异 已由开发者提出请求
photoslibrary.readonly
范围允许访问
用户的内容库。photoslibrary.readonly.appcreateddata
范围允许访问
仅应用于应用创建的媒体内容。如需了解详情,请参阅
授权范围。
概览
该 API 的一个重要用途是列出用户已备份的媒体内容 Google 相册。特定影集或用户整个页面中的内容 (Google 相册应用中的默认视图)。
您可以使用滤镜选择照片 与指定日期、内容类别或媒体类型匹配的项目时, 用户的内容库。当你列出来自以下来源的项时,不支持此功能 影集。
列出媒体库和影集内容会返回媒体内容列表。
属于影集的扩充项
未包含在内。媒体内容用于描述照片、视频或其他媒体内容。答
mediaItem
包含指向相应内容的直接链接,以及指向此内容的链接
Google 相册和其他相关元数据。如需了解详情,请参阅
访问媒体内容和
mediaItems
。
列出影集
您可以使用 albums.list.
REST
以下是请求示例:
GET https://photoslibrary.googleapis.com/v1/albums
该请求会返回以下结果:
{ "albums": [ { "id": "album-id", "title": "album-title", "productUrl": "album-product-url", "coverPhotoBaseUrl": "album-cover-base-url_do-not-use-directly", "coverPhotoMediaItemId": "album-cover-media-item-id", "isWriteable": "whether-you-can-write-to-this-album", "mediaItemsCount": "number-of-media-items-in-album" }, ... ], "nextPageToken": "token-for-pagination" }
Java
try { // Make a request to list all albums in the user's library // Iterate over all the albums in this list // Pagination is handled automatically ListAlbumsPagedResponse response = photosLibraryClient.listAlbums(); for (Album album : response.iterateAll()) { // Get some properties of an album String id = album.getId(); String title = album.getTitle(); String productUrl = album.getProductUrl(); String coverPhotoBaseUrl = album.getCoverPhotoBaseUrl(); // The cover photo media item id field may be empty String coverPhotoMediaItemId = album.getCoverPhotoMediaItemId(); boolean isWritable = album.getIsWriteable(); long mediaItemsCount = album.getMediaItemsCount(); } } catch (ApiException e) { // Handle error }
PHP
try { // Make a request to list all albums in the user's library // Iterate over all the albums in this list // Pagination is handled automatically $response = $photosLibraryClient->listAlbums(); foreach ($response->iterateAllElements() as $album) { // Get some properties of an album $albumId = $album->getId(); $title = $album->getTitle(); $productUrl = $album->getProductUrl(); $coverPhotoBaseUrl = $album->getCoverPhotoBaseUrl(); // The cover photo media item id field may be empty $coverPhotoMediaItemId = $album->getCoverPhotoMediaItemId(); $isWriteable = $album->getIsWriteable(); $totalMediaItems = $album->getTotalMediaItems(); } } catch (\Google\ApiCore\ApiException $e) { // Handle error }
每个返回的影集都有一个 ID,可用于检索 相册,如列出影集内容中所述。它还 包括标题和其中包含的媒体项数量。
productUrl
指向 Google 相册中可用作影集的影集,
。
coverPhotoMediaItemId
包含媒体内容
ID
代表此相册的封面照片。如需访问此封面图片,请使用
coverPhotoBaseUrl
。如果没有指定,则不应直接使用 coverPhotoBaseUrl
指定额外
参数。
在用户账号中创建或添加到用户
并且您的应用已共享其他 shareInfo
资源。
有关详情,请参阅分享媒体内容。
影集还可能包含一个 isWriteable
标记,用于指明您能否创建媒体内容
相册中有 项。如果未返回该标记,则其默认为 false
。时间是
取决于向您的应用授予的访问权限,包括:
- 影集的创建者。
- 是否共享。
- 用户的范围 已批准。
如果其中任何条件发生变化,该标志都可能会发生变化。有关详情,请参阅
创建影集。通过
响应还包含一个 nextPageToken
。如需了解详情,请参阅
分页。
空影集的响应各不相同,mediaItemsCount
和
coverPhotoMediaItemId
默认设置为 0,并且 REST 中会将其省略
响应。另请注意,coverPhotoBaseUrl
指向默认占位符
图片。
列出库内容
您可以列出用户 Google 相册媒体库中的所有媒体内容。 其中不包括已归档和已删除的内容。您可以根据媒体项的顺序列出媒体项, 通过应用 过滤器。如果用户尚未添加 可在 Google 相册的分享标签页中找到的内容 库,则该项不会包含在此列表中。
要检索媒体项,请调用 mediaItems.list.
REST
以下是请求示例:
GET https://photoslibrary.googleapis.com/v1/mediaItems
Content-type: application/json
Authorization: Bearer oauth2-token
{
"pageSize": "100",
}
GET 请求会返回以下响应:
{ "mediaItems": [ ... ], "nextPageToken": "token-for-pagination" }
Java
try { // Make a request to list all media items in the user's library // Iterate over all the retrieved media items // Pagination is handled automatically ListMediaItemsPagedResponse response = photosLibraryClient.listMediaItems(); for (MediaItem item : response.iterateAll()) { // Get some properties of a media item String id = item.getId(); String description = item.getDescription(); String mimeType = item.getMimeType(); String productUrl = item.getProductUrl(); String filename = item.getFilename(); } } catch (ApiException e) { // Handle error }
PHP
try { // Make a request to list all media items in the user's library // Iterate over all the retrieved media items // Pagination is handled automatically $response = $photosLibraryClient->listMediaItems(); foreach ($response->iterateAllElements() as $item) { // Get some properties of a media item /* @var $item \Google\Photos\Library\V1\MediaItem */ $id = $item->getId(); $description = $item->getDescription(); $mimeType = $item->getMimeType(); $productUrl = $item->getProductUrl(); $filename = $item->getFilename(); } } catch (\Google\ApiCore\ApiException $e) { // Handle error }
响应包含媒体内容列表,按时间由近到远排序。
如需了解详情,请参阅
mediaItems
。它还
包含 nextPageToken
,有关此内容的详细介绍,请参阅
分页。
列出影集内容
要列出影集中的所有媒体内容,请将 albumId
字段添加到您的
搜索请求。如需详细了解 albumId
,请参阅商品详情
影集和列出共享影集。如果
albumId
无效,系统会返回 Bad Request
错误。如果 ID 有效
但经过身份验证的用户没有该影集,则会显示 Not Found
错误
返回。如需了解有关错误处理的更多详情,请参阅性能
提示和最佳实践
做法。
REST
以下是请求示例:
POST https://photoslibrary.googleapis.com/v1/mediaItems:search
Content-type: application/json
Authorization: Bearer oauth2-token
{
"pageSize": "100",
"albumId": "album-id"
}
POST 请求会返回以下响应:
{ "mediaItems": [ ... ], "nextPageToken": "token-for-pagination" }
Java
try { // Make a request to list all media items in an album // Provide the ID of the album as a parameter in the searchMediaItems call // Iterate over all the retrieved media items SearchMediaItemsPagedResponse response = photosLibraryClient.searchMediaItems(albumId); for (MediaItem item : response.iterateAll()) { // ... } } catch (ApiException e) { // Handle error }
PHP
try { // Make a request to list all media items in an album // Provide the ID of the album as a parameter in the searchMediaItems call // Iterate over all the retrieved media items $response = $photosLibraryClient->searchMediaItems(['albumId' => $albumId]); foreach ($response->iterateAllElements() as $item) { // ... } } catch (\Google\ApiCore\ApiException $e) { // Handle error }
响应包含 nextPageToken
和媒体内容列表。取消
列出媒体库内容,媒体项将按照其在
影集。有关详情,请参阅
mediaItems
和分页。用户可以在
Google 相册界面。
设置 albumId
后,您在列出影集内容时就无法应用过滤条件。
这样做会导致 Bad Request
错误。
列出共享影集
您可以检索用户已分享或已被用户分享的所有影集的列表 与用户共享。这类似于“分享”标签 Google 相册应用。
用户添加到其 Google 相册媒体库中的共享影集 列出影集调用中也会返回这些影集。确保 以下调用通过 Library API 列出共享影集:
REST
以下是请求示例:
GET https://photoslibrary.googleapis.com/v1/sharedAlbums
该请求会返回以下结果:
{ "sharedAlbums": [...] "nextPageToken": "token-for-pagination" }
Java
try { // Make a request to list all albums that have been shared by the user // Iterate over all the albums in this list // Pagination is handled automatically ListSharedAlbumsPagedResponse response = photosLibraryClient.listSharedAlbums(); for (Album album : response.iterateAll()) { // .. } } catch (ApiException e) { // Handle error }
PHP
try { // Make a request to list all albums that have been shared by the user // Iterate over all the albums in this list // Pagination is handled automatically $response = $photosLibraryClient->listSharedAlbums(); foreach ($response->iterateAllElements() as $album) { // ... } } catch (\Google\ApiCore\ApiException $e) { // Handle error }
sharedAlbums
中包含影集列表。如需了解详情,请参阅
列出影集。该响应还包含一个 nextPageToken
。
如需了解详情,请参阅分页。
您的应用创建和共享的影集还会包含额外的 shareInfo
。
属性。有关详情,请参阅共享
媒体。
列出应用创建的影集
您可以使用
在以下调用中将 excludeNonAppCreatedData
设置为 true
:
REST
以下是一个 GET 请求,用于列出用户 仅由您的应用创建的 Google 相册媒体库:
GET https://photoslibrary.googleapis.com/v1/albums?excludeNonAppCreatedData=true Content-type: application/json Authorization: Bearer oauth2-token
这是一个 GET 请求,可列出用户 仅由您的应用创建的 Google 相册媒体库:
GET https://photoslibrary.googleapis.com/v1/sharedAlbums?excludeNonAppCreatedData=true Content-type: application/json Authorization: Bearer oauth2-token
Java
try { // Make a request to list all albums that have been created by your app boolean excludeNonAppCreatedData = true; // Iterate over all the albums in this list // Pagination is handled automatically ListAlbumsPagedResponse response = photosLibraryClient.listAlbums(excludeNonAppCreatedData); for (Album album : response.iterateAll()) { // .. } } catch (ApiException e) { // Handle error } try { // Make a request to list all shared albums that have been created by your app boolean excludeNonAppCreatedData = true; // Iterate over all the albums in this list // Pagination is handled automatically ListSharedAlbumsPagedResponse response = photosLibraryClient.listSharedAlbums(excludeNonAppCreatedData); for (Album album : response.iterateAll()) { // .. } } catch (ApiException e) { // Handle error }
PHP
try { // Make a request to list all albums that have been created by your app $response = $photosLibraryClient->listAlbums(['excludeNonAppCreatedData' => true]); // Iterate over all the albums in this list // Pagination is handled automatically foreach ($response->iterateAllElements() as $album) { // ... } } catch (\Google\ApiCore\ApiException $e) { // Handle error } try { // Make a request to list all shared albums that have been created by your app $response = $photosLibraryClient->listSharedAlbums(['excludeNonAppCreatedData' => true]); // Iterate over all the albums in this list // Pagination is handled automatically foreach ($response->iterateAllElements() as $album) { // ... } } catch (\Google\ApiCore\ApiException $e) { // Handle error }
REST 的分页
为了提高性能,返回大量结果的方法(如
list 方法)可对响应进行分页。每个类别中的结果数量上限
页面由 pageSize
参数指定。
对于 mediaItems:search
和 mediaItems:list
调用,默认页面大小为
25 项内容。我们建议您使用此页面大小,因为它能在
响应大小和填充率媒体项的页面大小上限
search 和 list 请求的形式为 100 项。
列出影集时,默认和建议的页面大小为 20 个影集,每个影集的 最多 50 个影集。
当可用结果数超过页面大小时,响应
包含一个 nextPageToken
,它向您的应用表明
更多结果。
示例
您必须将 nextPageToken
附加到参数中的后续请求
pageToken
,如以下示例所示。同时指定 pageToken
与操作所需的其他参数一起传递,可以放在
请求或作为查询参数。
请求 #1
{ "pageSize": "5", "filters": { … } }
响应 #1
{ "mediaItem": [ … ], "nextPageToken": "next-page-token" }
请求 2
{ "pageSize": "5", "filters": { … }, "pageToken": "page-token" }
响应 #2
{ "mediaItem": [ … ], "nextPageToken": "next-page-token" }
一直持续此模式,直到不再有 nextPageToken
对象为止。
nextPageToken
仅对同一请求有效。如果任何参数
不同,之前用过的 nextPageToken
不应在同一
请求。