Cómo mostrar el contenido de la biblioteca, los álbumes y los elementos multimedia

Alcances de autorización obligatorios

La API de la Biblioteca de Google Fotos contiene varios permisos que se usan para acceder a álbumes y elementos multimedia. Los elementos multimedia que se muestran en varias llamadas son diferentes según los permisos que haya solicitado el desarrollador.

El alcance photoslibrary.readonly permite el acceso a todos los elementos multimedia de la biblioteca del usuario. El alcance photoslibrary.readonly.appcreateddata permite acceder solo a los elementos multimedia que creó la app. Para obtener más información, consulta Permisos de autorización.

Descripción general

Un uso importante de la API es para enumerar los elementos multimedia de los que el usuario haya creado una copia de seguridad en Google Fotos. Se pueden enumerar los elementos de un álbum en particular o de toda la biblioteca del usuario (la vista predeterminada en la app de Google Fotos).

Puedes usar filtros para seleccionar fotos que coincidan con una fecha, una categoría de contenido o un tipo de medio específicos cuando muestres elementos de la biblioteca del usuario. Esta función no se admite cuando enumeras elementos de álbumes.

Cuando se enumera el contenido de la biblioteca y del álbum, se muestra una lista de elementos multimedia. No se incluyen los enriquecimientos que forman parte de un álbum. Los elementos multimedia describen una foto, un video o algún otro contenido multimedia. Una mediaItem incluye un vínculo directo al elemento, un vínculo al elemento en Google Fotos y otros metadatos relevantes. Para obtener más información, consulta Cómo acceder a elementos multimedia y mediaItems.

Lista de álbumes

Para recuperar una lista de los álbumes del usuario, puedes usar albums.list.

REST

A continuación, se muestra una solicitud de ejemplo:

GET https://photoslibrary.googleapis.com/v1/albums

La solicitud muestra el siguiente resultado:

{
  "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
}

Cada álbum que se muestra tiene un ID que se puede usar para recuperar el contenido del álbum como se muestra en Cómo mostrar una lista del contenido del álbum. También incluye el título y la cantidad de elementos multimedia que contiene.

La productUrl apunta al álbum de Google Fotos que el usuario puede abrir.

coverPhotoMediaItemId contiene el ID de elemento multimedia que representa la foto de portada de este álbum. Para acceder a esta imagen de portada, usa coverPhotoBaseUrl. No debes usar coverPhotoBaseUrl directamente sin especificar parámetros adicionales.

Los álbumes que se crearon en la cuenta del usuario o se agregaron a esta y que tu app compartió incluyen una propiedad shareInfo adicional. Para obtener más detalles, consulta Cómo compartir contenido multimedia.

Los álbumes también pueden tener una marca isWriteable para indicar si puedes crear elementos multimedia en ellos. El valor predeterminado de esta marca es false si no se muestra. Depende del acceso otorgado a la aplicación, incluidos los siguientes:

  • Quién creó el álbum
  • Si se comparte o no
  • Qué alcances aprobó el usuario

Esta marca puede cambiar si cambia alguno de estos criterios. Para obtener más información, consulta Cómo crear álbumes. La respuesta también contiene un nextPageToken. Para obtener más información, consulta Paginación.

La respuesta para los álbumes vacíos varía en el sentido de que mediaItemsCount y coverPhotoMediaItemId se establecen en 0 de forma predeterminada y se omiten de la respuesta de REST. Además, ten en cuenta que coverPhotoBaseUrl apunta a una imagen de marcador de posición predeterminada.

Enumera el contenido de la biblioteca

Puedes enumerar todos los elementos multimedia de la biblioteca de Google Fotos del usuario. Excluye los elementos archivados y borrados. Puedes enumerar elementos multimedia según su contenido, fecha y otras propiedades aplicando filtros. Si el usuario no agregó a su biblioteca un elemento disponible en la pestaña Compartir de Google Fotos, ese elemento no se incluirá en esta lista.

Para recuperar un elemento multimedia, llama a mediaItems.list.

REST

A continuación, se muestra una solicitud de ejemplo:

GET https://photoslibrary.googleapis.com/v1/mediaItems
Content-type: application/json
Authorization: Bearer oauth2-token
{
  "pageSize": "100",
}

La solicitud GET muestra la siguiente respuesta:

{
  "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
}

La respuesta contiene una lista de elementos multimedia, ordenados de los más recientes a los menos recientes. Para obtener más información, consulta mediaItems. También contiene un nextPageToken, que se describe con más detalle en Paginación.

Cómo visualizar el contenido de un álbum

Para enumerar todos los elementos multimedia de un álbum, agrega el campo albumId a tu solicitud de búsqueda. Para obtener más información sobre albumId, consulta Cómo crear una lista de álbumes y Cómo crear una lista de álbumes compartidos. Si albumId no es válido, se muestra un error Bad Request. Si el ID es válido, pero el álbum no existe para el usuario autenticado, se muestra un error Not Found. Para obtener más detalles sobre el manejo de errores,consulta Sugerencias de rendimiento y Prácticas recomendadas.

REST

A continuación, se muestra una solicitud de ejemplo:

POST https://photoslibrary.googleapis.com/v1/mediaItems:search
Content-type: application/json
Authorization: Bearer oauth2-token
{
  "pageSize": "100",
  "albumId": "album-id"
}

La solicitud POST muestra la siguiente respuesta:

{
  "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
}

La respuesta contiene un nextPageToken y la lista de elementos multimedia. A diferencia de cuando se enumera el contenido de la biblioteca, los elementos multimedia se muestran según su orden en el álbum. Para obtener más detalles, consulta mediaItems y Paginación. El usuario puede editar el pedido en la interfaz de Google Fotos.

Si se establece albumId, no puedes aplicar un filtro cuando se muestra el contenido de un álbum. Si lo haces, se mostrará un error Bad Request.

Cómo mostrar una lista de los álbumes compartidos

Puedes recuperar una lista de todos los álbumes que el usuario compartió o que se compartieron con un usuario. Esto es similar a la pestaña Compartir en la app de Google Fotos.

Los álbumes compartidos que el usuario agregó a su biblioteca de Google Fotos también se muestran en la llamada para mostrar la lista de álbumes. Realiza la siguiente llamada para enumerar álbumes compartidos a través de la API de la Biblioteca:

REST

A continuación, se muestra una solicitud de ejemplo:

GET https://photoslibrary.googleapis.com/v1/sharedAlbums

La solicitud muestra el siguiente resultado:

{
  "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
}

En sharedAlbums se incluye una lista de álbumes. Para obtener más información, consulta Cómo crear una lista de álbumes. La respuesta también contiene un nextPageToken. Para obtener más información, consulta Paginación.

Los álbumes que creó y compartió tu app incluyen una propiedad shareInfo adicional. Para obtener más detalles, consulta Cómo compartir contenido multimedia.

Enumera los álbumes creados por la app

Puedes enumerar los álbumes que haya creado tu app con el parámetro excludeNonAppCreatedData configurado como true en las siguientes llamadas:

REST

A continuación, se incluye una solicitud GET para enumerar todos los álbumes de la biblioteca de Google Fotos del usuario que solo tu app creó:

GET https://photoslibrary.googleapis.com/v1/albums?excludeNonAppCreatedData=true
Content-type: application/json
Authorization: Bearer oauth2-token

A continuación, se incluye una solicitud GET para enumerar todos los álbumes compartidos de la biblioteca de Google Fotos del usuario que creó solo tu app:

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
}

Paginación para REST

Para mejorar el rendimiento, los métodos que muestran una gran cantidad de resultados (como los métodos de lista) pueden paginar la respuesta. El parámetro pageSize proporciona la cantidad máxima de resultados en cada página.

Para las llamadas a mediaItems:search y mediaItems:list, el tamaño predeterminado de la página es de 25 elementos. Recomendamos este tamaño de página porque logra un equilibrio entre el tamaño de la respuesta y la tasa de relleno. El tamaño máximo de página para las solicitudes de búsqueda y lista de elementos multimedia es de 100 elementos.

El tamaño de página predeterminado y recomendado cuando se crea una lista de álbumes es de 20 álbumes, con un máximo de 50.

Cuando la cantidad de resultados disponibles es mayor que el tamaño de la página, la respuesta incluye un nextPageToken, que le indica a tu aplicación que hay más resultados para recuperar del servidor.

Ejemplo

Debes agregar el nextPageToken a las solicitudes posteriores en el parámetro pageToken, como se muestra en el siguiente ejemplo. Especifica el pageToken junto con otros parámetros obligatorios para la operación, ya sea en el cuerpo de la solicitud o como un parámetro de consulta.

Solicitud n° 1

{
  "pageSize": "5",
  "filters": { … }
}

Respuesta n° 1

{
  "mediaItem": [ … ],
  "nextPageToken": "next-page-token"
}

Solicitud n° 2

{
  "pageSize": "5",
  "filters": { … },
  "pageToken": "page-token"
}

Respuesta n° 2

{
  "mediaItem": [ … ],
  "nextPageToken": "next-page-token"
}

Continúa con este patrón hasta que no haya más objetos nextPageToken.

El nextPageToken solo es válido para la misma solicitud. Si se cambia algún parámetro, un nextPageToken usado con anterioridad no se debe usar en la misma solicitud.