Dostęp do elementów multimedialnych

Po nawiązaniu połączenia z numerem wyświetlić zawartość biblioteki zdjęć lub albumu, zamiast przechowywać zwrócone elementy multimedialne, aplikacja powinna przechowywać Identyfikatory elementów multimedialnych. Dzieje się tak, ponieważ zawartość elementów multimedialnych może i po pewnym czasie adresy URL podane w odpowiedzi wygasną. identyfikator elementu multimedialnego jednoznacznie identyfikuje element multimedialny, np. zdjęcie lub film. w bibliotece użytkownika.

Pamiętaj, że aplikacja nie powinna zapisywać zdjęć ani filmów użytkownika w pamięci podręcznej na długo przez różne okresy, ale w zależności od przypadku użycia można przechowywać lub zapisz w pamięci podręcznej identyfikator elementu multimedialnego jako długi jak jest niezbędna. Pamiętaj też, że dostęp do użytkowników dane są objęte ochroną prywatności zobowiązań.

Wymagane zakresy autoryzacji

Aby uzyskać dostęp do elementów multimedialnych, aplikacja musi zażądać co najmniej jednego z tych elementów zakresów autoryzacji. Dostęp do elementów multimedialnych zwróconych w odpowiedzi zależy od wybranych przez Ciebie zakresów o dostęp do informacji, o które prosili.

  • photoslibrary.readonly zezwala na dostęp do wszystkich elementów multimedialnych w urządzeniu użytkownika biblioteka
  • Aplikacja photoslibrary.readonly.appcreateddata zezwala na dostęp tylko do elementów multimedialnych, które: utworzone przez aplikację

Elementy multimedialne

O mediaItem jest reprezentacją multimediów, np. zdjęć lub filmów, które zostały przesłane do bibliotece Zdjęć Google. Jest to obiekt najwyższego poziomu, a jego właściwości różnią się w zależności od typu mediów.

W tabeli poniżej wymienione są właściwości mediaItem:

Właściwości
id Stały, niezmienny identyfikator służący do identyfikacji obiektu.
description Opis elementu multimedialnego widoczny w środku Zdjęcia Google.
baseUrl Służy do uzyskiwania dostępu do nieprzetworzonych bajtów. Więcej informacji znajdziesz w artykule Podstawowe adresy URL.
productUrl

Link do obrazu w Zdjęciach Google. Tego linku nie można otwarty przez dewelopera, tylko przez użytkownika. Adresy URL wskazują element multimedialny w do biblioteki. Jeśli adres URL został pobrany z wyszukiwania albumu, wskazuje element w albumie.

mimeType Typ elementu multimedialnego, który pozwala łatwo zidentyfikować typ mediów (na przykład: image/jpg).
filename Nazwa pliku elementu multimedialnego widocznego użytkownikowi w Zdjęciach Google aplikacji (w sekcji informacji o elemencie).
mediaMetadata Zależy od rodzaju mediów, np. photo lub video. Aby zmniejszyć ładunek, możesz użyć masek pól.
contributorInfo

To pole jest wypełniane tylko wtedy, gdy element multimedialny znajduje się w albumie udostępnionym utworzonych przez tę aplikację, a użytkownik przyznał Zakres: photoslibrary.sharing.

Zawiera informacje o współtwórcy, który dodał te multimedia elementu. Więcej informacji znajdziesz w artykule Udostępnianie multimediów.

Pobieranie elementu multimedialnego

Aby pobrać element multimedialny, wywołaj mediaItems.get za pomocą mediaItemId Żądanie zwraca 1 element multimedialny.

Element mediaItem zawiera właściwości takie jak identyfikator, opis i adres URL. dodatkowe informacje w kolumnie photo lub video są oparte na metadanych w plik. Niektóre właściwości mogą być niedostępne. Plik ContributorInfo zawiera metadane w przypadku elementów, które należą do albumu udostępnionego. To pole jest uwzględniane tylko wtedy, gdy zawieranie treści album udostępniony, w którym użytkownik przyznał element: photoslibrary.sharing. zakres autoryzacji.

Jeśli element multimedialny to film, najpierw musi zostać przetworzony plik wideo. mediaItem zawiera pole status wewnątrz mediaMetadata, które opisuje przetwarzania pliku wideo. Nowo przesłany plik zwraca wartość videoProcessingStatus z wartością PROCESSING, a następnie READY do użycia. baseUrl elementu multimedialnego wideo nie jest dostępne do czasu przetworzenia filmu.

REST

Oto żądanie GET:

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

Odpowiedź dotycząca elementu multimedialnego ze zdjęciami wygląda tak. Zdjęcie zawiera metadane elementów zdjęć.

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

Odpowiedź na element multimedialny wideo wygląda tak. Film zawiera metadane elementów wideo.

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

Właściwość zdjęcia zawiera metadane elementów zdjęć.

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
}

Właściwość wideo zawiera metadane elementów wideo.

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

Właściwość zdjęcia zawiera metadane elementów zdjęć.

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
}

Właściwość wideo zawiera metadane elementów wideo.

  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
}

Pobierz wiele elementów multimedialnych

Aby pobrać wiele elementów multimedialnych według ich identyfikatorów, wywołaj mediaItems.batchGet za pomocą mediaItemId.

Żądanie zwraca listę MediaItemResults w kolejności według identyfikatorów elementów multimedialnych podanych w żądaniu. Każdy wynik zawiera MediaItem lub Status, jeśli wystąpił błąd.

Maksymalna liczba elementów multimedialnych, o które możesz poprosić w ramach jednego połączenia, to 50. Lista elementy multimedialne nie mogą zawierać zduplikowanych identyfikatorów ani być puste.

REST

Oto żądanie GET, które pokazuje udany i nieudany dostęp do elementów multimedialnych. Podaj identyfikator każdego elementu multimedialnego jako nowy Parametr zapytania mediaItemIds w ramach żądania:

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

Żądanie GET zwraca następującą odpowiedź:

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

Podstawowe URL-e

Podstawowe adresy URL w interfejsie Google Photos Library API umożliwiają dostęp do bajtów multimediów elementy(ów). Aplikacja może pobierać elementy multimedialne przy użyciu różnych podstawowych adresów URL lub wyświetlanie elementów multimedialnych w aplikacji. Podstawowe adresy URL są ciągami znaków, które są dołączane do odpowiedzi podczas wyświetlania listy albumów lub elementów multimedialnych. Są ważne przez 60 minut i wymagają dodatkowych parametrów, ponieważ nie można ich używać jako

Różne podstawowe adresy URL to:

  • baseUrl: bezpośredni dostęp do zdjęcia lub miniatury filmu oraz pobieranie bajtów filmu.
  • coverPhotoBaseUrl: bezpośredni dostęp do zdjęcia na okładkę albumu.
  • profilePictureBaseUrl: bezpośredni dostęp do zdjęcia profilowego właściciela mediaItem
.

Podstawowe adresy URL obrazu

Oto lista opcji, których możesz używać w przypadku bazowych adresów URL obrazów:

Parametr
w, h

Opis

Szerokość, w i wysokość, h .

Aby uzyskać dostęp do graficznego elementu multimedialnego, takiego jak zdjęcie lub miniatura, musisz określić wymiary, w jakich chcesz wyświetlać aplikacji (aby obraz mógł być skalowany wymiarów, zachowując współczynnik proporcji). Aby to zrobić: połącz podstawowy adres URL z wymaganymi wymiarami, tak jak w tym przykładzie. z przykładami.

Przykłady:

base-url=wmax-width-hmax-height

Oto przykład, jak wyświetlić element multimedialny nie szerszy niż 2048 pikseli i nie większe niż 1024 piksele:

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

Opis

Parametr przycinania, c.

Jeśli chcesz przyciąć obraz do takiej samej szerokości i wysokości wymiarów, połącz podstawowy adres URL z opcjonalny parametr -c z wymaganym Parametry w i h.

Rozmiar (w pikselach) powinien mieścić się w zakresie [1, 16 383]. Jeśli któryś szerokość lub wysokość obrazu przekracza żądany rozmiar, obraz zostanie pomniejszony i przycięty (z zachowaniem proporcji).

Przykłady:

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

W tym przykładzie aplikacja wyświetla element multimedialny, który jest dokładnie 256 pikseli szerokości i 256 pikseli wysokości, jak w przypadku miniatura:

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

Opis

Parametr pobierania (d).

Jeśli chcesz pobrać obraz ze wszystkimi metadanymi Exif oprócz metadanych lokalizacji połącz podstawowy adres URL z elementem d.

Przykłady:

base-url=d

W tym przykładzie aplikacja pobiera obraz ze wszystkimi metadanych oprócz metadanych lokalizacji:

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

Podstawowe adresy URL filmów

Poniżej znajdziesz listę opcji, których możesz użyć w przypadku bazowych adresów URL filmów:

Parametr
dv

Opis

Aby uzyskać dostęp do bajtów filmu mediaItem, połącz baseUrl z filmem do pobrania, dv .

Parametr dv wymaga wysokiej jakości, transkodowana wersja oryginalnego filmu. Parametr nie jest zgodne z znakami w i h .

Podstawowe adresy URL pobierania filmów mogą potrwać kilka sekund zwracanych bajtów. Pobrane filmy są domyślnie kodowane w kodowaniu H.264. Jeśli kodowanie H.264 nie powiedzie się, zostanie użyty kod VP9.

Przed użyciem tego parametru sprawdź, czy Pole mediaMetadata.status zawiera wartość READY. W przeciwnym razie, jeśli element multimedialny nie został po zakończeniu przetwarzania możesz otrzymać .

Przykłady:

base-url=dv

Z przykładu poniżej dowiesz się, jak pobrać bajty pliku film:

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

Opis

Aby uzyskać dostęp do miniatury filmu, użyj dowolnego z podstawowych parametrów adresu URL obrazu.

Domyślnie wszystkie miniatury filmów zawierają nakładkę z odtwarzaniem Przycisk Aby usunąć tę nakładkę, sprawdź parametr -no.

Przykłady:

Zapoznaj się z tabelą bazowych adresów URL obrazów. .

no

Opis

Usunięcie nakładki miniatury, parametr no.

Jeśli chcesz pobrać miniaturę filmu bez nakładki przycisku odtwarzania, połącz podstawowy adres URL za pomocą parametru no .

Parametru no należy używać z co najmniej jedną z tych wartości: image base url parameters.

Przykłady:

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

Poniższy przykład przedstawia miniaturę filmu, która ma dokładnie 1280 pikseli szerokości i 720 pikseli wysokości i nie zawiera nakładki z przyciskiem odtwarzania:

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

Podstawowe adresy URL zdjęć ruchomych

Zdjęcia ruchome zawierają zarówno elementy zdjęć, jak i filmów. Możesz używać parametrów z podstawowe adresy URL obrazów albo Podstawowe adresy URL filmów na potrzeby żądań zdjęć ruchomych baseUrl.

Parametr
dv

Opis

Aby pobrać element wideo ze zdjęcia ruchomego, użyj dv, tak jak w przypadku pobierania z podstawowych adresów URL filmów.

w, h, c i d

Opis

Aby pobrać element zdjęcia ze zdjęcia ruchomego, użyj format podstawowych adresów URL obrazów.