Auf Medienelemente zugreifen

Nachdem Sie Aufrufe zum Auflisten des Inhalts einer Fotogalerie oder eines Albums ausgeführt haben, sollte Ihre Anwendung nicht die zurückgegebenen Medienelemente speichern, sondern die IDs der Medienelemente. Das liegt daran, dass sich die Inhalte der Medienelemente ändern können und die in der Antwort enthaltenen URLs nach einer bestimmten Zeit ablaufen. Die Medienelement-ID identifiziert ein Medienelement eindeutig, z. B. ein Foto oder ein Video in der Mediathek eines Nutzers.

Das Foto oder Video eines Nutzers sollte in Ihrer App nicht für längere Zeit im Cache gespeichert werden. Je nach Anwendungsfall können Sie die Medienelement-ID jedoch so lange speichern oder im Cache speichern, wie es erforderlich ist. Beachten Sie außerdem, dass der Zugriff auf Nutzerdaten Datenschutzverpflichtungen unterliegt.

Erforderliche Autorisierungsbereiche

Damit Ihre App auf Medienelemente zugreifen kann, muss sie mindestens einen der folgenden Autorisierungsbereiche anfordern. Der Zugriff auf die in der Antwort zurückgegebenen Medienelemente hängt von den angeforderten Bereichen ab.

  • photoslibrary.readonly ermöglicht den Zugriff auf alle Medienelemente in der Mediathek des Nutzers.
  • photoslibrary.readonly.appcreateddata erlaubt nur den Zugriff auf Medienelemente, die von der App erstellt wurden.

Medienelemente

Ein mediaItem ist eine Darstellung von Medien wie Fotos oder Videos, die in die Google Fotos-Galerie hochgeladen wurden. Es ist ein Objekt der obersten Ebene und seine Eigenschaften können je nach zugrunde liegendem Medientyp variieren.

In der folgenden Tabelle sind die mediaItem-Attribute aufgeführt:

Attribute
id Eine dauerhafte, stabile ID, die zum Identifizieren des Objekts verwendet wird.
description Beschreibung des Medienelements in Google Fotos
baseUrl Wird für den Zugriff auf die Rohbytes verwendet. Weitere Informationen finden Sie unter Basis-URLs.
productUrl

Ein Link zum Bild in Google Fotos. Dieser Link kann nicht vom Entwickler, sondern vom Nutzer geöffnet werden. URLs verweisen auf ein Medienelement in der Mediathek. Wenn die URL aus einer Albumsuche abgerufen wurde, verweist sie auf das Element im Album.

mimeType Der Typ des Medienelements, anhand dessen sich der Medientyp leicht identifizieren lässt (z. B. image/jpg).
filename Der Dateiname des Medienelements, das dem Nutzer in der Google Fotos App (im Infobereich des Artikels) angezeigt wird.
mediaMetadata Variiert je nach zugrunde liegendem Medientyp, z. B. photo oder video. Feldmasken können verwendet werden, um die Nutzlast zu reduzieren.
contributorInfo

Dieses Feld wird nur ausgefüllt, wenn sich das Medienelement in einem geteilten Album befindet, das von dieser App erstellt wurde, und der Nutzer den Bereich photoslibrary.sharing gewährt hat.

Enthält Informationen zum Mitwirkenden, der dieses Medienelement hinzugefügt hat. Weitere Informationen finden Sie unter Medien freigeben.

Medienelement abrufen

Rufe mediaItems.get mit der mediaItemId auf, um ein Medienelement abzurufen. Die Anfrage gibt ein einzelnes Medienelement zurück.

mediaItem enthält Eigenschaften wie die ID, die Beschreibung und die URL. Die zusätzlichen Informationen in photo oder video basieren auf den Metadaten in der Datei. Möglicherweise sind nicht alle Properties vorhanden. ContributorInfo enthält Metadaten für Elemente, die Teil eines geteilten Albums sind. Dieses Feld wird nur bei der Auflistung der Inhalte eines geteilten Albums eingefügt, für das der Nutzer den photoslibrary.sharing Autorisierungsbereich gewährt hat.

Wenn es sich um ein Video handelt, muss die Videodatei zuerst verarbeitet werden. Die mediaItem enthält das Feld status in mediaMetadata, das den Verarbeitungsstatus der Videodatei beschreibt. Eine neu hochgeladene Datei gibt zuerst das videoProcessingStatus mit dem Wert PROCESSING zurück, bevor es READY zur Verwendung ist. Die baseUrl eines Videomedienelements ist erst verfügbar, wenn das Video verarbeitet wurde.

REST

Hier ist eine GET-Anfrage:

GET https://photoslibrary.googleapis.com/v1/mediaItems/media-item-id
Content-type: application/json
Authorization: Bearer oauth2-token

Die Antwort für ein Foto-Medienelement sieht so aus: Das Attribut „photo“ enthält Metadaten für Fotoelemente.

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

Die Antwort für ein Videomedienelement sieht so aus: Das Attribut „video“ enthält Metadaten für Videoelemente.

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

Das Attribut „photo“ enthält Metadaten für Fotoelemente.

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
}

Die Videoeigenschaft enthält Metadaten für Videoelemente.

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

Das Attribut „photo“ enthält Metadaten für Fotoelemente.

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
}

Die Videoeigenschaft enthält Metadaten für Videoelemente.

  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
}

Mehrere Medienelemente abrufen

Wenn du mehrere Medienelemente anhand ihrer IDs abrufen möchtest, rufe mediaItems.batchGet mit den mediaItemIds auf.

Die Anfrage gibt eine Liste von MediaItemResults zurück, die in der Reihenfolge der in der Anfrage angegebenen Medienelement-IDs sortiert ist. Jedes Ergebnis enthält MediaItem oder Status, wenn ein Fehler aufgetreten ist.

Du kannst maximal 50 Medienelemente in einem Aufruf anfordern. Die Liste der Medienelemente darf keine doppelten IDs enthalten und darf nicht leer sein.

REST

Hier ist eine GET-Anfrage, die den erfolgreichen und fehlgeschlagenen Zugriff auf Medienelemente zeigt. Gib die ID jedes Medienelements als neuen mediaItemIds-Abfrageparameter in der Anfrage an:

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

Die GET-Anfrage gibt die folgende Antwort zurück:

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

Basis-URLs

Über Basis-URLs in der Google Fotos-Mediathek-API können Sie auf die Bytes der Medienelemente zugreifen. Mithilfe der verschiedenen Basis-URLs kann deine App die Medienelemente entweder herunterladen oder in der App anzeigen. Basis-URLs sind Strings, die in der Antwort enthalten sind, wenn du Alben auflistest oder auf Medienelemente zugreifst. Sie sind 60 Minuten gültig und erfordern zusätzliche Parameter, da sie nicht unverändert verwendet werden können.

Die verschiedenen Basis-URLs sind:

  • baseUrl: Direkt auf ein Foto oder Thumbnail für ein Video zugreifen oder Video-Bytes herunterladen.
  • coverPhotoBaseUrl: Direkt auf das Cover des Albums zugreifen.
  • profilePictureBaseUrl: Direkt auf das Profilbild des Inhabers eines mediaItem zugreifen

Basis-URLs für Bilder

Hier sind die Optionen, die Sie mit den Basis-URLs von Bildern verwenden können:

Parameter
w, h

Beschreibung

Die Parameter „width“, w und „height“, h

Wenn Sie auf ein Bildmedium wie ein Foto oder eine Miniaturansicht für ein Video zugreifen möchten, müssen Sie die Abmessungen angeben, die Sie in Ihrer Anwendung anzeigen möchten. So kann das Bild auf diese Abmessungen skaliert werden, wobei das Seitenverhältnis beibehalten wird. Dazu müssen Sie die Basis-URL mit den erforderlichen Dimensionen zusammenführen, wie in den Beispielen gezeigt.

Beispiele:

base-url=wmax-width-hmax-height

Hier ist ein Beispiel für die Anzeige eines Medienelements, das maximal 2.048 Pixel breit und 1.024 Pixel hoch ist:

https://lh3.googleusercontent.com/p/AF....VnnY=w2048-h1024
c

Beschreibung

Der Parameter „Zuschneiden“ (c).

Wenn Sie das Bild genau auf die von Ihnen angegebenen Abmessungen für Breite und Höhe zuschneiden möchten, verketten Sie die Basis-URL mit dem optionalen -c-Parameter und den obligatorischen w- und h-Parametern.

Die Größe (in Pixeln) muss im Bereich [1, 16383] liegen. Wenn die Breite oder Höhe des Bildes die angeforderte Größe überschreitet, wird das Bild unter Beibehaltung des Seitenverhältnisses verkleinert und zugeschnitten.

Beispiele:

base-url=wmax-width-hmax-height-c

In diesem Beispiel zeigt die Anwendung ein Medienelement, das genau 256 Pixel breit und 256 Pixel hoch ist, z. B. eine Miniaturansicht an:

https://lh3.googleusercontent.com/p/AF....VnnY=w256-h256-c
d

Beschreibung

Der Downloadparameter d.

Wenn Sie das Bild mit allen Exif-Metadaten außer den Standortmetadaten herunterladen möchten, verknüpfen Sie die Basis-URL mit dem Parameter d.

Beispiele:

base-url=d

In diesem Beispiel lädt die Anwendung ein Bild mit allen Metadaten außer den Standortmetadaten herunter:

https://lh3.googleusercontent.com/p/Az....XabC=d

Basis-URLs des Videos

Hier findest du eine Liste der Optionen, die du mit den Basis-URLs von Videos verwenden kannst:

Parameter
dv

Beschreibung

Wenn du auf die Bytes eines Videos zugreifen möchtest, mediaItem, konkateniere den Parameter baseUrl mit dem Parameter dv für den Download des Videos.

Mit dem Parameter dv wird eine hochqualitative, transcodierte Version des Originalvideos angefordert. Der Parameter ist nicht mit den Parametern w und h kompatibel.

Es kann einige Sekunden dauern, bis über Basis-URLs für Videodownloads Bytes zurückgegeben werden.

Bevor du diesen Parameter verwendest, prüfe, ob das Feld mediaMetadata.status der Medienelemente READY ist. Andernfalls wird möglicherweise eine Fehlermeldung angezeigt, wenn die Verarbeitung deines Medienelements noch nicht abgeschlossen wurde.

Beispiele:

base-url=dv

Im folgenden Beispiel wird gezeigt, wie du die Bytes eines Videos herunterlädst:

https://lh3.googleusercontent.com/p/AF....BsdZ=dv
w, h, c und d

Beschreibung

Verwende einen der Parameter für die Basis-URL des Bilds, um auf die Miniaturansicht des Videos zuzugreifen.

Standardmäßig enthalten alle Video-Thumbnails ein Overlay der Wiedergabeschaltfläche. Mit dem Parameter -no können Sie dieses Overlay entfernen.

Beispiele:

Beispiele finden Sie in der Tabelle mit Basis-Image-URLs.

no

Beschreibung

Entfernen des Thumbnail-Overlays, Parameter no

Wenn du die Miniaturansicht eines Videos ohne das Overlay einer Wiedergabeschaltfläche abrufen möchtest, verbinde die Basis-URL mit dem Parameter no.

Der Parameter no muss mit mindestens einem der Parameter für die Basis-URL des Bilds verwendet werden.

Beispiele:

base-url=wmax-width-hmax-height-no

Im folgenden Beispiel ist ein Video-Thumbnail zu sehen, das genau 1.280 Pixel breit und 720 Pixel hoch ist und kein Overlay mit einer Wiedergabeschaltfläche enthält:

https://lh3.googleusercontent.com/p/AF....VnnY=w1280-h720-no

Basis-URLs für Fotos mit Bewegtbild

Fotos mit Bewegtbild enthalten sowohl Foto- als auch Videoelemente. Sie können Parameter aus Bild-Basis-URLs oder Video-Basis-URLs für baseUrl-Anfragen für animierte Fotos verwenden.

Parameter
dv

Beschreibung

Wenn du das Videoelement eines Medienelements mit einer Motion-Foto-Funktion abrufen möchtest, verwende den Parameter dv, wie du es auch beim Herunterladen von Video-Basis-URLs tun würdest.

w, h, c und d

Beschreibung

Verwende das Format für Bild-Basis-URLs, um das Fotoelement eines Medienelements mit einer Bewegungsaufnahme abzurufen.