Требуемые области авторизации
API библиотеки Google Фото содержит несколько областей, используемых для доступа к элементам мультимедиа и альбомам. Элементы мультимедиа, возвращаемые из разных вызовов, различаются в зависимости от того, какие области были запрошены разработчиком.
Область photoslibrary.readonly
разрешает доступ ко всем элементам мультимедиа в библиотеке пользователя. Область photoslibrary.readonly.appcreateddata
разрешает доступ только к элементам мультимедиа, созданным приложением. Дополнительные сведения см. в разделе Области авторизации .
Обзор
Важным применением API является составление списка элементов мультимедиа, резервные копии которых пользователь скопировал в Google Фото. Элементы в определенном альбоме или из всей библиотеки пользователя (представление по умолчанию в приложении Google Фото) могут быть перечислены.
Вы можете использовать фильтры для выбора фотографий , которые соответствуют указанной дате, категории контента или типу мультимедиа, когда вы перечисляете элементы из библиотеки пользователя. Эта функция не поддерживается при перечислении элементов из альбомов.
Список содержимого библиотеки и альбома возвращает список элементов мультимедиа. Расширения , являющиеся частью альбома, не включены. Медиа-элементы описывают фото, видео или другие медиафайлы. mediaItem
включает в себя прямую ссылку на элемент, ссылку на элемент в Google Фото и другие соответствующие метаданные. Дополнительные сведения см. в разделе Доступ к элементам мультимедиа и элементам mediaItems
.
Список альбомов
Вы можете получить список альбомов пользователя, используя Albums.list .
ОТДЫХАТЬ
Вот пример запроса:
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" }
Ява
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 }
Каждый возвращенный альбом имеет идентификатор, который можно использовать для извлечения содержимого альбома, как показано в разделе Список содержимого альбома . Он также включает заголовок и количество содержащихся в нем элементов мультимедиа.
productUrl
указывает на альбом в Google Фото, который может быть открыт пользователем.
coverPhotoMediaItemId
содержит идентификатор элемента мультимедиа, который представляет фотографию обложки этого альбома. Чтобы получить доступ к этому изображению обложки, используйте coverPhotoBaseUrl
. Вы не должны использовать coverPhotoBaseUrl
напрямую без указания дополнительных параметров .
Альбомы, которые были созданы в учетной записи пользователя или добавлены в учетную запись пользователя и к которым ваше приложение предоставило общий доступ, включают дополнительное свойство shareInfo
. Дополнительные сведения см. в разделе Общий доступ к мультимедиа .
Альбомы также могут иметь флаг isWriteable
, чтобы указать, можете ли вы создавать элементы мультимедиа в альбоме. Этот флаг по умолчанию имеет значение false
, если он не возвращается. Это зависит от доступа, предоставленного вашему приложению, включая следующее:
- Кто создал альбом.
- Если он общий или нет.
- Какие области пользователь одобрил.
Этот флаг может измениться, если изменится любой из этих критериев. Дополнительные сведения см. в разделе Создание альбомов . Ответ также содержит nextPageToken
. Дополнительные сведения см. в разделе Разбивка на страницы.
Ответ для пустых альбомов отличается тем, что mediaItemsCount
и coverPhotoMediaItemId
по умолчанию установлено значение 0, и они отсутствуют в ответе REST. Также обратите внимание, что coverPhotoBaseUrl
указывает на изображение-заполнитель по умолчанию.
Список содержимого библиотеки
Вы можете перечислить все элементы мультимедиа из библиотеки Google Фото пользователя. Он исключает заархивированные и удаленные элементы. Вы можете составить список элементов мультимедиа на основе их содержания, даты и других свойств, применяя фильтры . Если пользователь не добавил элемент, доступный на вкладке « Общий доступ » его Google Фото, в свою библиотеку, этот элемент не будет включен в этот список.
Чтобы получить элемент мультимедиа, вызовите mediaItems.list .
ОТДЫХАТЬ
Вот пример запроса:
GET https://photoslibrary.googleapis.com/v1/mediaItems
Content-type: application/json
Authorization: Bearer oauth2-token
{
"pageSize": "100",
}
Запрос GET возвращает следующий ответ:
{ "mediaItems": [ ... ], "nextPageToken": "token-for-pagination" }
Ява
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
, который более подробно описан в Pagination .
Список содержимого альбома
Чтобы вывести список всех элементов мультимедиа в альбоме, добавьте в поисковый запрос поле « albumId
. Дополнительные сведения об albumId
альбома см. в разделах Список альбомов и Список общих альбомов . Если albumId
недействителен, возвращается ошибка неверного Bad Request
. Если идентификатор действителен, но альбом не существует для аутентифицированного пользователя, возвращается ошибка Not Found
. Дополнительные сведения об обработке ошибок см. в разделе Советы по повышению производительности и рекомендации .
ОТДЫХАТЬ
Вот пример запроса:
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" }
Ява
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
и Pagination . Пользователь может редактировать заказ в интерфейсе Google Фото.
Если для albumId
установлен идентификатор, вы не можете применить фильтр при выводе списка содержимого альбома. Это приводит к ошибке Bad Request
.
Список общих альбомов
Вы можете получить список всех альбомов, к которым пользователь предоставил доступ или которые были предоставлены пользователю. Это похоже на вкладку «Общий доступ» в приложении Google Фото.
Общие альбомы, которые пользователь добавил в свою библиотеку Google Фото, также возвращаются при вызове списка альбомов . Выполните следующий вызов, чтобы получить список общих альбомов через API библиотеки:
ОТДЫХАТЬ
Вот пример запроса:
GET https://photoslibrary.googleapis.com/v1/sharedAlbums
Запрос возвращает следующий результат:
{ "sharedAlbums": [...] "nextPageToken": "token-for-pagination" }
Ява
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
в следующих вызовах:
ОТДЫХАТЬ
Вот запрос 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
Ява
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
Для повышения производительности методы, возвращающие большое количество результатов (например, методы списка), могут разбивать ответ на страницы. Максимальное количество результатов на каждой странице задается параметром pageSize
.
Для вызовов mediaItems:search
и mediaItems:list
размер страницы по умолчанию составляет 25 элементов. Мы рекомендуем этот размер страницы, потому что он обеспечивает баланс между размером ответа и скоростью заполнения. Максимальный размер страницы для поиска элементов мультимедиа и запросов списка составляет 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
не должен использоваться в том же запросе.