メディア アイテムにアクセスする

呼び出し後: フォト ライブラリやアルバムのコンテンツをリストする 返されたメディア アイテムを保存する代わりに、アプリケーションで メディア アイテムの ID です。これは、メディア アイテムのコンテンツが 変更され、一定の時間が経過すると、レスポンスに含まれる URL が期限切れになります。「 メディア アイテム ID は、写真や動画などのメディア アイテムを一意に識別する ID です。 ユーザーのライブラリ内に表示されます

アプリケーションでは、ユーザーの写真や動画を長期間キャッシュに保存すべきではありません。 ユースケースによっては、ストレージまたは メディア アイテム ID を ロング 必要。 また、ユーザーのアクセス権は データはプライバシーによって管理される あります。

必要な認可スコープ

メディア アイテムにアクセスするには、アプリで次のうち少なくとも 1 つをリクエストする必要があります 認可スコープ。 レスポンスで返されるメディア アイテムへのアクセス権は、指定したスコープによって異なります。 表示されます。

  • photoslibrary.readonly を使用すると、ユーザーのすべてのメディア アイテムに ライブラリ
  • photoslibrary.readonly.appcreateddata を許可すると、アクセスできるのは次のメディア アイテムに限られます。 アプリによって作成された

メディア項目

mediaItem にアップロードされた写真や動画などのメディアを表します。 Google フォト ライブラリです。これは最上位のオブジェクトであり、そのプロパティは 基になるメディアタイプによって異なります

次の表に、mediaItem のプロパティを示します。

プロパティ
id オブジェクトの識別に使用される永続的で不変の ID。
description 内側から見たメディア アイテムの説明 Google フォト
baseUrl 生のバイトへのアクセスに使用されます。詳細については、ベース URL をご覧ください。
productUrl

Google フォト内の画像へのリンク。このリンクは使用できません 開発者が開いたもので、ユーザーだけが開けます。URL は ライブラリです。アルバム検索で取得された URL は、 アルバム内のアイテムを指します。

mimeType メディアのタイプを簡単に識別するためのメディア アイテムのタイプ (例: image/jpg)。
filename Google フォトでユーザーに表示されるメディア アイテムのファイル名 (アイテムの情報セクション内)。
mediaMetadata メディアの基になるタイプ(photo など)によって異なる または video。 ペイロードを削減するために、フィールド マスクを使用できます。
contributorInfo

このフィールドは、メディア アイテムが共有アルバムにある場合にのみ入力されます。 作成され、ユーザーは photoslibrary.sharing スコープ。

このメディアを追加した投稿者に関する情報が含まれます 表示されます。詳しくは、メディアを共有するをご覧ください。

メディア アイテムを取得する

メディア アイテムを取得するには、呼び出します。 mediaItems.getmediaItemId。このリクエストでは 1 つのメディア アイテムが返されます。

mediaItem には、ID、説明、URL などのプロパティが含まれます。「 photo または video 内の追加情報は、その中のメタデータに基づきます。 表示されます。すべてのプロパティが存在するとは限りません。ContributorInfo にはメタデータが含まれています。 共有アルバム内のアイテムを検索します。このフィールドは、 メッセージの内容をリストする ユーザーが photoslibrary.sharing を付与した共有アルバム 認可スコープ

メディア アイテムが動画の場合は、まず動画ファイルを処理する必要があります。「 mediaItem には、mediaMetadata 内の status フィールドが含まれています。 動画ファイルの処理状態を確認できます。新しくアップロードされたファイルには videoProcessingStatus 最初に値 PROCESSING を割り当て、その前に READY を使用します。baseUrl 動画メディア アイテムは、動画の処理が完了するまで使用できません。

REST

以下は GET リクエストです。

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

写真メディア アイテムに対するレスポンスは次のようになります。写真 プロパティには、写真アイテムのメタデータが含まれます。

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

動画メディア アイテムに対するレスポンスは次のようになります。動画 プロパティには動画アイテムのメタデータが含まれます。

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

フォト プロパティには、写真アイテムのメタデータが含まれます。

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 プロパティには、動画アイテムのメタデータが含まれます。

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

フォト プロパティには、写真アイテムのメタデータが含まれます。

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 プロパティには、動画アイテムのメタデータが含まれます。

  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
}

複数のメディア アイテムを取得する

複数のメディア アイテムを識別子で取得するには、呼び出します。 mediaItems.batchGet mediaItemId を使用します。

このリクエストにより、 MediaItemResults リクエストで指定されたメディア アイテム ID の順序で移動します。各結果 MediaItem が含まれている エラーが発生した場合は Status

1 回の呼び出しでリクエストできるメディア アイテムの最大数は 50 です。リスト メディア アイテムに重複する ID を含めることはできません。また、メディア アイテムが空にすることもできません。

REST

この GET リクエストは、次のリソースへのアクセスの成否を示す できます。各メディア アイテムの ID を新しい mediaItemIds クエリ パラメータを渡す必要があります。

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 リクエストは次のレスポンスを返します。

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

ベース URL

Google Photos Library API 内のベース URL を使用すると、メディアのバイト数にアクセスできます。 あります。アプリはさまざまなベース URL を使用して、メディア アイテムをダウンロードまたは アプリ内でメディア アイテムを表示したりできます。ベース URL は文字列で、 アルバムの一覧を取得するとき、またはメディア アイテムにアクセスするときに返信メッセージに記載されます。内容は次のとおりです。 有効期間は 60 分で、サービス アカウントとして使用できないため、追加のパラメータが必要です。 あります

さまざまなベース URL は次のとおりです。

  • baseUrl: 写真や動画のサムネイルに直接アクセスしたり、動画バイトをダウンロードしたりできます。
  • coverPhotoBaseUrl: アルバムのカバー写真に直接アクセスできます。
  • profilePictureBaseUrl: オーナーのプロフィール写真に直接アクセスする mediaItem

画像のベース URL

画像のベース URL で使用できるオプションは次のとおりです。

パラメータ
wh

説明

幅(w)と高さ(h) あります。

写真やサムネイルなど、画像のメディア アイテムにアクセスするには、 動画を作成するには、 それによって、画像を実際のサイズに合わせて アスペクト比はそのまま維持されます)。そのためには、 次のスライドに示すように、ベース URL を必要なディメンションと連結します。 説明します。

例:

base-url=wmax-width-hmax-height

以下は、最大幅のメディア アイテムを表示する場合の例です。 2,048 ピクセル、高さ 1,024 ピクセル以下:

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

説明

切り抜き c パラメータ。

画像を適切な幅と高さに切り抜く場合 ベース URL を 省略可能な -c パラメータと必須のパラメータ w パラメータと h パラメータ。

サイズ(ピクセル単位)は [1, 16383] の範囲内である必要があります。次のいずれかに該当する場合 画像の幅または高さがリクエストされたサイズを超えた場合、 画像が縮小および切り抜かれます(アスペクト比は維持されます)。

例:

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

この例では、アプリケーションで表示されるメディア アイテムに (例: 幅 256 px、高さ 256 px にする)。 サムネイル:

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

説明

ダウンロードの d パラメータ。

EXIF メタデータをすべて保持している画像をダウンロードする場合 ベース URL を d パラメータ。

例:

base-url=d

この例では、アプリケーションは、ダウンロードしたすべての (位置情報メタデータを除く):

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

動画のベース URL

動画のベース URL で使用できるオプションは次のとおりです。

パラメータ
dv

説明

動画の mediaItem のバイトにアクセスするには、 ダウンロード動画(dv)を含む baseUrl パラメータを指定します。

dv パラメータは高品質で、 元の動画のコード変換されたバージョンです。このパラメータは、 wh に対応 あります。

動画をダウンロードする際、ベース URL がダウンロードされるまで数秒かかる 返すことができます。動画のダウンロードはデフォルトで H.264 エンコードされます。H.264 エンコードが失敗した場合は、VP9 が使用されます。

このパラメータを使用する前に、メディア アイテムの mediaMetadata.status フィールドが READY。 そうでなければ、メディア アイテムに 処理が完了した場合、 エラーが発生します。

例:

base-url=dv

次の例は、Dataflow のバイト数を 動画:

https://lh3.googleusercontent.com/p/AF....BsdZ=dv
whcd

説明

動画のサムネイルにアクセスするには、画像のベース URL パラメータのいずれかを使用します。

デフォルトでは、すべての動画のサムネイルに再生のオーバーレイが含まれます ] ボタンを離します。このオーバーレイを削除するには、-no パラメータを参照してください。

例:

画像のベース URL の表を参照 をご覧ください。

no

説明

サムネイル オーバーレイ削除の no パラメータ。

オーバーレイのない動画のサムネイルを取得する場合 再生ボタンの場合は、ベース URL を no と パラメータを指定します。

no パラメータは、次のうち少なくとも 1 つとともに使用する必要があります。 画像のベース URL パラメータ

例:

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

次の例では、幅 1,280 px、高さ 720 px で、再生ボタンのオーバーレイを含まない動画サムネイルを表示します。

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

モーション フォトのベース URL

モーション フォトには写真と動画の両方の要素が含まれます。次のパラメータを使用できます: 画像のベース URL モーション フォトの baseUrl リクエストの動画ベース URL

パラメータ
dv

説明

モーション フォト メディア アイテムの動画要素を取得するには、次のコマンドを使用します。 動画のベース URL からダウンロードする場合と同様に dv パラメータを追加します。

whcd

説明

モーション フォト メディア アイテムの写真要素を取得するには、次のコマンドを使用します。 画像のベース URL の形式。