Medya öğelerine erişme

Uygulamanız döndürülen medya öğelerini depolamak yerine bir fotoğraf kitaplığının veya albümün içeriğini listelemek için çağrı yaptıktan sonra medya öğelerinin kimliklerini depolamalıdır. Bunun nedeni, medya öğelerinin içeriğinin değişebilmesi ve belirli bir süre sonra yanıta dahil edilen URL'lerin süresinin dolmasıdır. Medya öğesi kimliği, kullanıcının kitaplığındaki bir fotoğraf veya video gibi medya öğelerini benzersiz şekilde tanımlar.

Uygulamanızın, bir kullanıcının fotoğrafını veya videosunu uzun süre önbelleğe almaması gerektiğini unutmayın. Ancak kullanım alanınıza bağlı olarak, medya öğesi kimliğini gerektiği kadar süre boyunca depolayabilir veya önbelleğe alabilirsiniz. Kullanıcı verilerine erişimin gizlilik yükümlülüklerine tabi olduğunu da unutmayın.

Gerekli yetkilendirme kapsamları

Medya öğelerine erişmek için uygulamanızın aşağıdaki yetkilendirme kapsamlarından en az birini istemesi gerekir. Yanıtta döndürülen medya öğelerine erişim, istediğiniz kapsamlara bağlıdır.

  • photoslibrary.readonly, kullanıcının kitaplığındaki tüm medya öğelerine erişim izni verir
  • photoslibrary.readonly.appcreateddata, yalnızca uygulama tarafından oluşturulan medya öğelerine

Medya öğeleri

mediaItem, Google Fotoğraflar kitaplığına yüklenen fotoğraf veya video gibi medya öğelerini temsil eder. Bu, üst düzey bir nesnedir ve özellikleri temel medya türüne göre farklılık gösterebilir.

Aşağıdaki tabloda mediaItem özellikleri listelenmiştir:

Özellikler
id Nesneyi tanımlamak için kullanılan kalıcı ve sabit bir kimliktir.
description Medya öğesinin Google Fotoğraflar'da görünen açıklaması.
baseUrl Ham baytlara erişmek için kullanılır. Daha fazla bilgi için Temel URL'ler konusuna bakın.
productUrl

Google Fotoğraflar'daki resmin bağlantısı. Bu bağlantı geliştirici tarafından açılamaz, yalnızca kullanıcı tarafından açılabilir. URL'ler kitaplıktaki bir medya öğesine işaret eder. URL bir albüm aramasından alındıysa albümdeki öğeyi işaret eder.

mimeType Medya türünün kolayca tanımlanmasına yardımcı olan medya öğesinin türü (örneğin: image/jpg).
filename Kullanıcıya Google Fotoğraflar uygulamasında (öğenin bilgi bölümünde) gösterilen medya öğesinin dosya adı.
mediaMetadata Temel medya türüne (ör. photo veya video) bağlı olarak değişir. Yükü azaltmak için alan maskeleri kullanılabilir.
contributorInfo

Bu alan yalnızca medya öğesi bu uygulama tarafından oluşturulan paylaşılan bir albümdeyse ve kullanıcı photoslibrary.sharing kapsamını verdiyse doldurulur.

Bu medya öğesini ekleyen katkıda bulunan hakkındaki bilgileri içerir. Daha fazla ayrıntı için Medya paylaşma başlıklı makaleyi inceleyin.

Medya öğesi alma

Bir medya öğesini almak için mediaItemId kullanarak mediaItems.get yöntemini çağırın. İstek, tek bir medya öğesi döndürür.

mediaItem; kimlik, açıklama ve URL gibi özellikleri içerir. photo veya video içindeki ek bilgiler, dosyadaki meta verilere bağlıdır. Tüm özellikler mevcut olmayabilir. ContributorInfo, paylaşılan bir albümün parçası olan öğelere ait meta verileri içerir. Bu alan yalnızca kullanıcının photoslibrary.sharing yetkilendirme kapsamını verdiği paylaşılan bir albümün içerikleri listelenirken eklenir.

Medya öğesi bir videoysa önce video dosyası işlenmelidir. mediaItem, mediaMetadata içinde video dosyasının işleme durumunu açıklayan bir status alanı içerir. Yeni yüklenen bir dosya, kullanım READY olmadan önce PROCESSING değerine sahip videoProcessingStatus değerini döndürür. Bir video medya öğesinin baseUrl özelliği, video işlenene kadar kullanılamaz.

REST

Aşağıda bir GET isteği verilmiştir:

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

Bir fotoğraf medya öğesinin yanıtı şuna benzer: Fotoğraf özelliği, fotoğraf öğelerinin meta verilerini içerir.

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

Bir video medya öğesinin yanıtı şuna benzer: Video özelliği, video öğelerinin meta verilerini içerir.

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

Fotoğraf özelliği, fotoğraf öğelerine ilişkin meta verileri içerir.

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
}

Video özelliği, video öğelerinin meta verilerini içerir.

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

Fotoğraf özelliği, fotoğraf öğelerine ilişkin meta verileri içerir.

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
}

Video özelliği, video öğelerinin meta verilerini içerir.

  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
}

Birden çok medya öğesini alma

Birden fazla medya öğesini tanımlayıcılarına göre almak için mediaItemId kullanarak mediaItems.batchGet yöntemini çağırın.

İstek, istekte sağlanan medya öğesi tanımlayıcılarının sırasına göre MediaItemResults listesini döndürür. Her sonuç bir MediaItem veya hata varsa Status içerir.

Bir aramada en fazla 50 medya öğesi isteyebilirsiniz. Medya öğeleri listesi, yinelenen tanımlayıcılar içermemeli ve boş olamaz.

REST

Medya öğelerine başarılı ve başarısız erişimi gösteren bir GET isteğini burada bulabilirsiniz. Her medya öğesi tanımlayıcısını, isteğin parçası olarak yeni bir mediaItemIds sorgu parametresi olarak belirtin:

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

GET isteği aşağıdaki yanıtı döndürür:

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

Temel URL'ler

Google Photos Library API'deki temel URL'ler, medya öğelerinin baytlarına erişmenize olanak tanır. Uygulamanız çeşitli temel URL'leri kullanarak medya öğelerini indirebilir veya uygulamanızın içindeki medya öğelerini görüntüleyebilir. Temel URL'ler, albümleri listelediğinizde veya medya öğelerine eriştiğinizde yanıta dahil edilen dizelerdir. Bunlar 60 dakika boyunca geçerlidir ve olduğu gibi kullanılamayacağı için ek parametreler gerektirir.

Çeşitli temel URL'ler şunlardır:

  • baseUrl: Bir videonun fotoğrafına, küçük resmine doğrudan erişebilir veya video baytlarını indirebilirsiniz.
  • coverPhotoBaseUrl: Albümün kapak fotoğrafına doğrudan erişebilir.
  • profilePictureBaseUrl: Bir mediaItem sahibinin profil fotoğrafına doğrudan erişebilirsiniz.

Resim temel URL'leri

Resim temel URL'leriyle kullanabileceğiniz seçeneklerin listesi aşağıda verilmiştir:

Parametre
w, h

Açıklama

Genişlik, w ve yükseklik, h parametreleri.

Resim medya öğesine (ör. bir videonun fotoğrafı veya küçük resmi) erişmek için uygulamanızda görüntülemeyi planladığınız boyutları belirtmeniz gerekir (böylece, en boy oranı korunarak resim bu boyutlara göre ölçeklendirilebilir). Bunu yapmak için temel URL'yi, örneklerde gösterildiği gibi gerekli boyutlarla birleştirin.

Örnekler:

base-url=wmax-width-hmax-height

Aşağıda, 2048 pikselden geniş ve 1.024 pikselden uzun olmayan bir medya öğesini göstermeye ilişkin bir örnek verilmiştir:

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

Açıklama

Kırpma, c parametresi.

Resmi tam olarak belirttiğiniz genişlik ve yükseklik boyutlarına göre kırpmak isterseniz temel URL'yi, zorunlu w ve h parametreleriyle birlikte isteğe bağlı -c parametresiyle birleştirin.

Boyut (piksel cinsinden) [1, 16383] aralığında olmalıdır. Resmin genişliği veya yüksekliği istenen boyutu aşarsa resim küçültülür ve kırpılır (en boy oranı korunarak).

Örnekler:

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

Bu örnekte uygulama, tam olarak 256 piksel genişliğinde ve 256 piksel yüksekliğinde bir medya öğesi görüntüler (örneğin, küçük resim):

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

Açıklama

İndirme, d parametresi.

Resmi, konum meta verileri hariç tüm EXIF meta verilerini saklayacak şekilde indirmek isterseniz temel URL'yi d parametresiyle birleştirin.

Örnekler:

base-url=d

Bu örnekte uygulama, konum meta verileri hariç tüm meta verilere sahip bir resim indirir:

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

Video temel URL'leri

Video temel URL'leriyle kullanabileceğiniz seçeneklerin listesini burada bulabilirsiniz:

Parametre
dv

Açıklama

Bir videonun (mediaItem) baytlarına erişmek için baseUrl öğesini, indirilen video dv parametresiyle birleştirin.

dv parametresi, orijinal videonun yüksek kaliteli, dönüştürülmüş bir sürümünü ister. Parametre, w ve h parametreleriyle uyumlu değildir.

Video indirmeleri için temel URL'lerin bayt döndürmesi birkaç saniyeyi bulabilir.

Bu parametreyi kullanmadan önce medya öğelerinin mediaMetadata.status alanının READY olduğundan emin olun. Aksi takdirde, medya öğenizin işlenmesi tamamlanmamışsa hata mesajı alabilirsiniz.

Örnekler:

base-url=dv

Aşağıdaki örnekte bir videonun baytlarını nasıl indireceğiniz gösterilmektedir:

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

Açıklama

Videonun küçük resmine erişmek için görüntü temel URL parametrelerinden herhangi birini kullanın.

Varsayılan olarak tüm video küçük resimleri, bir oynatma düğmesinin yer paylaşımını içerir. Bu yer paylaşımını kaldırmak için -no parametresine bakın.

Örnekler:

Örnekler için görüntü temel URL'leri tablosuna bakın.

no

Açıklama

Küçük resim yer paylaşımını kaldır, no parametresi.

Bir videonun küçük resmini, oynatma düğmesinin yer paylaşımı olmadan almak istiyorsanız temel URL'yi no parametresiyle birleştirin.

no parametresi, resim temel URL parametrelerinden en az biriyle kullanılmalıdır.

Örnekler:

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

Aşağıdaki örnekte, tam olarak 1280 piksel genişliğinde ve 720 piksel yüksekliğinde olan ve oynatma düğmesi yer paylaşımı içermeyen bir video küçük resmi gösterilmektedir:

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

Hareketli fotoğraf tabanı URL'leri

Hareketli fotoğraflar hem fotoğraf hem de video öğeleri içerir. Hareketli fotoğraf baseUrl istekleri için görüntü temel URL'lerindeki veya video temel URL'lerindeki parametreleri kullanabilirsiniz.

Parametre
dv

Açıklama

Bir hareketli fotoğraf medya öğesinin video öğesini almak için dv parametresini, video temel URL'lerinden indirir gibi kullanın.

w, h, c ve d

Açıklama

Bir hareketli fotoğraf medya öğesinin fotoğraf öğesini almak için resim temel URL'lerinin biçimini kullanın.