Depois de fazer chamadas para listar o conteúdo de uma biblioteca ou álbum de fotos, em vez de armazenar os itens de mídia retornados, o app precisa armazenar os IDs dos itens de mídia. Isso acontece porque o conteúdo dos itens de mídia pode mudar e, após um determinado período, os URLs incluídos na resposta expiram. O ID do item de mídia identifica exclusivamente um item de mídia, como uma foto ou um vídeo, na biblioteca de um usuário.
Seu aplicativo não pode armazenar em cache a foto ou o vídeo de um usuário por períodos longos, mas, dependendo do caso de uso, você pode armazenar ou armazenar em cache o ID do item de mídia por tanto tempo quanto necessário. O acesso aos dados do usuário é regido por obrigações de privacidade.
Escopos de autorização necessários
Para acessar itens de mídia, seu app precisa solicitar pelo menos um dos escopos de autorização abaixo. O acesso aos itens de mídia retornados na resposta depende dos escopos que você pediu.
photoslibrary.readonly
permite o acesso a todos os itens de mídia na biblioteca do usuário.- A
photoslibrary.readonly.appcreateddata
permite o acesso apenas a itens de mídia criados pelo app.
Itens de mídia
Um
mediaItem
é uma representação de mídia, como uma foto ou um vídeo que foi enviado para a
biblioteca do Google Fotos. Ele é um objeto de nível superior, e as propriedades dele podem
diferir com base no tipo de mídia.
A tabela abaixo lista as propriedades de mediaItem
:
Propriedades | |
---|---|
id |
Um ID permanente e estável usado para identificar o objeto. |
description |
Descrição do item de mídia no Google Fotos. |
baseUrl |
Usado para acessar os bytes brutos. Para mais informações, consulte URLs base. |
productUrl |
Um link para a imagem no Google Fotos. Esse link não pode ser aberto pelo desenvolvedor, apenas pelo usuário. Os URLs apontam para um item de mídia na biblioteca. Se o URL foi extraído de uma pesquisa de álbum, ele aponta para o item dentro do álbum. |
mimeType |
O tipo do item de mídia para ajudar a identificar facilmente o tipo de mídia
(por exemplo: image/jpg ). |
filename |
O nome de arquivo do item de mídia mostrado ao usuário no app Google Fotos (na seção de informações do item). |
mediaMetadata |
Varia de acordo com o tipo de mídia, como photo
ou video .
Para reduzir o payload, é possível usar máscaras de campo.
|
contributorInfo |
Esse campo só será preenchido se o item de mídia estiver em um álbum compartilhado
criado por esse app e o usuário tiver concedido o
escopo Contém informações sobre o colaborador que adicionou este item de mídia. Para mais detalhes, consulte Compartilhar mídia. |
Acessar um item de mídia
Para recuperar um item de mídia, chame
mediaItems.get usando o
mediaItemId
. A solicitação retorna um único item de mídia.
O mediaItem
contém propriedades, como o ID, a descrição e o URL. As
informações adicionais em photo
ou video
são baseadas nos metadados
do arquivo. Nem todas as propriedades podem estar presentes. ContributorInfo
contém metadados
para itens que fazem parte de um álbum compartilhado. Esse campo só é incluído ao listar o conteúdo de um álbum compartilhado em que o usuário concedeu o escopo de autorização photoslibrary.sharing
.
Se o item de mídia for um vídeo, o arquivo de vídeo precisa ser processado primeiro. O
mediaItem
contém um campo status
dentro de mediaMetadata
, que descreve o
estado de processamento do arquivo de vídeo. Um arquivo recém-enviado retorna a
videoProcessingStatus
com o valor PROCESSING
primeiro, antes de ser READY
para uso. O baseUrl
de um item de mídia em vídeo não estará disponível até que o vídeo seja processado.
REST
Confira uma solicitação GET:
GET https://photoslibrary.googleapis.com/v1/mediaItems/media-item-id Content-type: application/json Authorization: Bearer oauth2-token
A resposta para um item de mídia de foto tem esta aparência. A propriedade de foto contém metadados para itens de foto.
{ "id": "media-item-id", "description": "item-description", "productUrl": "url-to-open-in-google-photos", "baseUrl": "base-url_do-not-use-directly", "mimeType": "mime-type-of-media", "filename": "item-filename", "mediaMetadata": { "width": "media-item-width", "height": "media-item-height", "creationTime": "media-item-creation-time", "photo": { "cameraMake": "make-of-the-camera", "cameraModel": "model-of-the-camera", "focalLength": "focal-length-of-the-camera-lens", "apertureFNumber": "aperture-f-number-of-the-camera-lens", "isoEquivalent": "iso-of-the-camera", "exposureTime": "exposure-time-of-the-camera-aperture" } }, "contributorInfo": { "profilePictureBaseUrl": "profile-picture-base-url_do-not-use-directly", "displayName": "name-of-user" } }
A resposta para um item de mídia de vídeo é assim: A propriedade de vídeo contém metadados para itens de vídeo.
{ "id": "media-item-id", "description": "item-description", "productUrl": "url-to-open-in-google-photos", "baseUrl": "base-url_do-not-use-directly", "mimeType": "mime-type-of-media", "filename": "item-filename", "mediaMetadata": { "width": "media-item-width", "height": "media-item-height", "creationTime": "media-item-creation-time", "video": { "cameraMake": "make-of-the-camera", "cameraModel": "model-of-the-camera", "fps": "frame-rate-of-the-video", "status": "READY" }, }, "contributorInfo": { "profilePictureBaseUrl": "profile-picture-base-url_do-not-use-directly", "displayName": "name-of-user" } }
Java
A propriedade foto contém metadados para itens de foto.
try { // Get a media item using its ID String mediaItemId = "..."; MediaItem item = photosLibraryClient.getMediaItem(mediaItemId); // Get some properties from the retrieved media item String id = item.getId(); String description = item.getDescription(); String baseUrl = item.getBaseUrl(); String productUrl = item.getProductUrl(); // ... if (item.hasMediaMetadata()) { // The media item contains additional metadata, such as the height and width MediaMetadata metadata = item.getMediaMetadata(); long height = metadata.getHeight(); long width = metadata.getWidth(); Timestamp creationTime = metadata.getCreationTime(); // ... if (metadata.hasPhoto()) { // This media item is a photo and has additional photo metadata Photo photoMetadata = metadata.getPhoto(); String cameraMake = photoMetadata.getCameraMake(); String cameraModel = photoMetadata.getCameraModel(); float aperture = photoMetadata.getApertureFNumber(); int isoEquivalent = photoMetadata.getIsoEquivalent(); // ... } } if (item.hasContributorInfo()) { // A user has contributed this media item to a shared album ContributorInfo contributorInfo = item.getContributorInfo(); String profilePictureBaseUrl = contributorInfo.getProfilePictureBaseUrl(); String displayName = contributorInfo.getDisplayName(); } } catch (ApiException e) { // Handle error }
A propriedade de vídeo contém metadados para itens de vídeo.
try { // Get a media item using its ID String mediaItemId = "..."; MediaItem item = photosLibraryClient.getMediaItem(mediaItemId); // Get some properties from the retrieved media item String id = item.getId(); String description = item.getDescription(); String baseUrl = item.getBaseUrl(); String productUrl = item.getProductUrl(); // ... if (item.hasMediaMetadata()) { // The media item contains additional metadata, such as the height and width MediaMetadata metadata = item.getMediaMetadata(); long height = metadata.getHeight(); long width = metadata.getWidth(); Timestamp creationTime = metadata.getCreationTime(); // ... if (metadata.hasVideo()) { // This media item is a video and has additional video metadata Video videoMetadata = metadata.getVideo(); VideoProcessingStatus status = videoMetadata.getStatus(); if (status.equals(VideoProcessingStatus.READY)) { // This video media item has been processed String cameraMake = videoMetadata.getCameraMake(); String cameraModel = videoMetadata.getCameraModel(); double fps = videoMetadata.getFps(); // ... } } } if (item.hasContributorInfo()) { // A user has contributed this media item to a shared album ContributorInfo contributorInfo = item.getContributorInfo(); String profilePictureBaseUrl = contributorInfo.getProfilePictureBaseUrl(); String displayName = contributorInfo.getDisplayName(); } } catch (ApiException e) { // Handle error }
PHP
A propriedade foto contém metadados para itens de foto.
try { // Get a media item using its ID $mediaItemId = "..."; $item = $photosLibraryClient->getMediaItem($mediaItemId); // Get some properties from the retrieved media item $id = $item->getId(); $description = $item->getDescription(); $baseUrl = $item->getBaseUrl(); $productUrl = $item->getProductUrl(); // ... $metadata = $item->getMediaMetadata(); if (!is_null($metadata)) { // The media item contains additional metadata, such as the height and width $height = $metadata->getHeight(); $width = $metadata->getWidth(); $creationTime = $metadata->getCreationTime(); // ... $photoMetadata = $metadata->getPhoto(); if (!is_null($photoMetadata)) { // This media item is a photo and has additional photo metadata $cameraMake = $photoMetadata->getCameraMake(); $cameraModel = $photoMetadata->getCameraModel(); $aperture = $photoMetadata->getApertureFNumber(); $isoEquivalent = $photoMetadata->getIsoEquivalent(); // ... } } $contributorInfo = $item->getContributorInfo(); if (!is_null($contributorInfo)) { // A user has contributed this media item to a shared album $profilePictureBaseUrl = $contributorInfo->getProfilePictureBaseUrl(); $displayName = $contributorInfo->getDisplayName(); } } catch (\Google\ApiCore\ApiException $e) { // Handle error }
A propriedade de vídeo contém metadados para itens de vídeo.
try { // Get a media item using its ID $mediaItemId = "..."; $item = $photosLibraryClient->getMediaItem($mediaItemId); // Get some properties from the retrieved media item $id = $item->getId(); $description = $item->getDescription(); $baseUrl = $item->getBaseUrl(); $productUrl = $item->getProductUrl(); // ... $metadata = $item->getMediaMetadata(); if (!is_null($metadata)) { // The media item contains additional metadata, such as the height and width $height = $metadata->getHeight(); $width = $metadata->getWidth(); $creationTime = $metadata->getCreationTime(); // ... $videoMetadata = $metadata->getVideo(); if (!is_null($videoMetadata)) { // This media item is a video and has additional video metadata if (VideoProcessingStatus::READY == $videoMetadata->getStatus()) { // This video media item has been processed $cameraMake = $videoMetadata->getCameraMake(); $cameraModel = $videoMetadata->getCameraModel(); $fps = $videoMetadata->getFps(); // ... } } } $contributorInfo = $item->getContributorInfo(); if (!is_null($contributorInfo)) { // A user has contributed this media item to a shared album $profilePictureBaseUrl = $contributorInfo->getProfilePictureBaseUrl(); $displayName = $contributorInfo->getDisplayName(); } } catch (\Google\ApiCore\ApiException $e) { // Handle error }
Acessar vários itens de mídia
Para recuperar vários itens de mídia pelos identificadores, chame
mediaItems.batchGet
usando os mediaItemId
s.
A solicitação retorna uma lista de
MediaItemResults
na ordem dos identificadores de itens de mídia fornecidos na solicitação. Cada resultado
contém um MediaItem
ou um Status
se houver um erro.
O número máximo de itens de mídia que você pode solicitar em uma chamada é 50. A lista de itens de mídia não pode estar vazia e não pode conter identificadores duplicados.
REST
Esta é uma solicitação GET que mostra o acesso bem-sucedido e com falha de
itens de mídia. Especifique cada identificador de item de mídia como um novo
parâmetro de consulta mediaItemIds
como parte da solicitação:
GET https://photoslibrary.googleapis.com/v1/mediaItems:batchGet?mediaItemIds=media-item-id&mediaItemIds=another-media-item-id&mediaItemIds=incorrect-media-item-id Content-type: application/json Authorization: Bearer oauth2-token
A solicitação GET retorna a seguinte resposta:
{ "mediaItemResults": [ { "mediaItem": { "id": "media-item-id", ... } }, { "mediaItem": { "id": "another-media-item-id", ... } }, { "status": { "code": 3, "message": "Invalid media item ID." } } ] }
Java
try { // List of media item IDs to retrieve List<String> mediaItemIds = Arrays .asList("MEDIA_ITEM_ID", "ANOTHER_MEDIA_ITEM_ID", "INCORRECT_MEDIA_ITEM_ID"); // Get a list of media items using their IDs BatchGetMediaItemsResponse response = photosLibraryClient .batchGetMediaItems(mediaItemIds); // Loop over each result for (MediaItemResult result : response.getMediaItemResultsList()) { // Each MediaItemresult contains a status and a media item if (result.hasMediaItem()) { // The media item was successfully retrieved, get some properties MediaItem item = result.getMediaItem(); String id = item.getId(); // ... } else { // If the media item is not set, an error occurred and the item could not be loaded // Check the status and handle the error Status status = result.getStatus(); // ... } } } catch (ApiException e) { // Handle error }
PHP
try { // List of media item IDs to retrieve $mediaItemIds = ["MEDIA_ITEM_ID", "ANOTHER_MEDIA_ITEM_ID", "INCORRECT_MEDIA_ITEM_ID"]; // Get a list of media items using their IDs $response = $photosLibraryClient->batchGetMediaItems($mediaItemIds); // Loop over each result foreach ($response->getMediaItemResults() as $itemResult) { // Each MediaItemresult contains a status and a media item $mediaItem = $itemResult->getMediaItem(); if(!is_null($mediaItem)){ // The media item was successfully retrieved, get some properties $id = $mediaItem->getId(); // ... } else { // If the media item is null, an error occurred and the item could not be loaded } } } catch (\Google\ApiCore\ApiException $e) { // Handle error }
URLs base
Os URLs de base na API Library do Google Fotos permitem acessar os bytes dos itens de mídia. Usando os vários URLs de base, o app pode fazer o download ou exibir os itens de mídia. Os URLs de base são strings incluídas na resposta quando você lista álbuns ou acessa itens de mídia. Elas são válidas por 60 minutos e exigem parâmetros adicionais, já que não podem ser usadas como estão.
Os vários URLs base são:
baseUrl
: acessa diretamente a foto, a miniatura de um vídeo ou faz o download dos bytes de um vídeo.coverPhotoBaseUrl
: acessar diretamente a foto da capa do álbum.profilePictureBaseUrl
: acessa diretamente a foto do perfil do proprietário de umamediaItem
.
URLs de base de imagem
Confira a lista de opções que podem ser usadas com os URLs de base de imagem:
Parâmetro | |
---|---|
w , h |
Descrição Os parâmetros de largura, Para acessar um item de mídia de imagem, como uma foto ou uma miniatura de um vídeo, especifique as dimensões que você planeja mostrar no aplicativo para que a imagem possa ser dimensionada nessas dimensões, preservando a proporção. Para fazer isso, concatene o URL de base com as dimensões necessárias, conforme mostrado nos exemplos. Exemplos: base-url=wmax-width-hmax-height Confira um exemplo de como mostrar um item de mídia com largura máxima de 2.048 px e altura máxima de 1.024 px: https://lh3.googleusercontent.com/p/AF....VnnY=w2048-h1024 |
c |
Descrição O parâmetro Se você quiser cortar a imagem para as dimensões exatas de largura e altura especificadas, concatenar o URL de base com o parâmetro opcional O tamanho (em pixels) deve estar no intervalo [1, 16383]. Se a largura ou a altura da imagem exceder o tamanho solicitado, ela será reduzida e cortada (mantendo a proporção). Exemplos: base-url=wmax-width-hmax-height-c Neste exemplo, o aplicativo exibe um item de mídia com exatamente 256 px de largura por 256 px de altura, como uma miniatura: https://lh3.googleusercontent.com/p/AF....VnnY=w256-h256-c |
d |
Descrição O download, parâmetro Se você quiser fazer o download da imagem mantendo todos os metadados do Exif,
exceto os metadados de local, concatenar o URL base com o
parâmetro Exemplos: base-url=d Neste exemplo, o aplicativo faz o download de uma imagem com todos os metadados, exceto os de local: https://lh3.googleusercontent.com/p/Az....XabC=d |
URLs de base dos vídeos
Esta é a lista de opções que você pode usar com os URLs de base de vídeo:
Parâmetro | |
---|---|
dv |
Descrição Para acessar os bytes de um vídeo O parâmetro dv solicita uma versão transcodificada de alta qualidade do vídeo original. O parâmetro não é compatível com os parâmetros w e h. Os URLs de base para downloads de vídeo podem levar alguns segundos para retornar bytes. Antes de usar esse parâmetro, verifique se o campo
Exemplos: base-url=dv O exemplo a seguir mostra como fazer o download dos bytes de um vídeo: https://lh3.googleusercontent.com/p/AF....BsdZ=dv |
w , h , c e
d |
Descrição Para acessar a miniatura do vídeo, use qualquer um dos parâmetros de URL de base da imagem. Por padrão, todas as miniaturas de vídeo incluem uma sobreposição de um botão de reprodução. Consulte o parâmetro -no para remover essa sobreposição. Exemplos: Consulte a tabela de URLs de imagem de base para conferir exemplos. |
no |
Descrição A sobreposição de miniaturas a ser removida, parâmetro Para recuperar a miniatura de um vídeo sem a sobreposição de um botão de reprodução, concatene o URL de base com o parâmetro no. O parâmetro no precisa ser usado com pelo menos um dos parâmetros de URL de base da imagem. Exemplos: base-url=wmax-width-hmax-height-no O exemplo a seguir exibe uma miniatura de vídeo com exatamente 1280 px de largura por 720 px de altura e não inclui uma sobreposição do botão de reprodução: https://lh3.googleusercontent.com/p/AF....VnnY=w1280-h720-no |
URLs base de fotos com movimento
As fotos com movimento contêm elementos de fotos e vídeos. É possível usar parâmetros de
URLs de base de imagem ou
URLs de base de vídeo para solicitações baseUrl
de fotos em movimento.
Parâmetro | |
---|---|
dv |
Descrição Para recuperar o elemento de vídeo de um item de mídia de foto com movimento, use
o parâmetro |
w , h , c e
d |
Descrição Para recuperar o elemento de foto de um item de mídia de foto em movimento, use o formato de URLs de base de imagens. |