미디어 항목에 액세스

통화한 후 사진 라이브러리 또는 앨범의 콘텐츠 나열 반환된 미디어 항목을 저장하는 대신 애플리케이션이 미디어 항목의 ID입니다. 이는 미디어 항목의 콘텐츠가 특정 시간이 지나면 응답에 포함된 URL이 만료됩니다. 이 미디어 항목 ID로 사진, 동영상 등의 미디어 항목을 고유하게 식별할 수 있습니다. 찾을 수 있습니다.

애플리케이션이 오랫동안 사용자의 사진이나 동영상을 하지만 사용 사례에 따라 데이터를 저장하거나 미디어 항목 ID를 캐시합니다. 길이 필요합니다. 또한 사용자 계정에 대한 사용자 액세스 권한은 개인 정보 보호가됩니다. 의무사항입니다.

필수 승인 범위

미디어 항목에 액세스하려면 앱에서 다음 중 하나 이상을 요청해야 합니다. 승인 범위를 참조하세요. 응답에 반환된 미디어 항목에 대한 액세스 권한은 확인할 수 있습니다

  • 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.get을 호출하려면 mediaItemId입니다. 요청은 단일 미디어 항목을 반환합니다.

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

자바

사진 속성에는 사진 항목의 메타데이터가 포함됩니다.

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
}

동영상 속성에는 동영상 항목의 메타데이터가 포함됩니다.

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
}

동영상 속성에는 동영상 항목의 메타데이터가 포함됩니다.

  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 드림 미디어 항목 식별자 순서대로 표시됩니다. 각 결과 MediaItem 포함 오류가 발생한 경우 Status를 반환합니다.

호출 한 번으로 요청할 수 있는 미디어 항목의 최대 개수는 50개입니다. 목록의 미디어 항목은 중복 식별자를 포함할 수 없으며 비워둘 수 없습니다.

REST

다음은 액세스 성공 및 실패를 보여주는 GET 요청입니다. 미디어 항목입니다. 각 미디어 항목 식별자를 새 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."
      }
    }
  ]
}

자바

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 포토 라이브러리 API 내의 기본 URL을 통해 미디어 바이트에 액세스할 수 있습니다. 개의 항목이 있습니다. 앱은 다양한 기본 URL을 사용하여 미디어 항목을 다운로드하거나 앱 내에 미디어 항목을 표시해야 합니다. 기본 URL은 앨범을 나열하거나 미디어 항목에 액세스할 때 응답에 포함됩니다. 그들은 60분 동안 유효하며 있습니다.

다양한 기본 URL은 다음과 같습니다.

  • baseUrl: 동영상의 사진, 썸네일에 직접 액세스하거나 동영상 바이트를 다운로드합니다.
  • coverPhotoBaseUrl: 앨범의 표지 사진에 직접 액세스합니다.
  • profilePictureBaseUrl: 기기 소유자의 프로필 사진에 직접 액세스 mediaItem입니다.
를 통해 개인정보처리방침을 정의할 수 있습니다.

이미지 기본 URL

다음은 이미지 기본 URL과 함께 사용할 수 있는 옵션 목록입니다.

매개변수
w, h

설명

너비(w) 및 높이(h) 매개변수입니다.

다음 인스턴스의 사진이나 썸네일 이미지와 같은 이미지 미디어 항목에 동영상의 경우 표시할 크기를 이렇게 하면 이미지를 애플리케이션 크기에 맞게 크기(가로세로 비율을 유지함) 이렇게 하려면 다음과 같이 기본 URL을 필수 크기와 연결합니다. 살펴보겠습니다

예:

base-url=wmax-width-hmax-height

다음은 2048픽셀 이상 1024픽셀 이하:

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

설명

자르기, c 매개변수

이미지를 정확한 너비와 높이로 자르려는 경우 측정기준을 지정하려면 기본 URL을 선택적 -c 매개변수와 wh 매개변수

크기 (픽셀)는 [1, 16383] 범위 내에 있어야 합니다. 다음 중 하나에 해당하는 경우 이미지의 너비 또는 높이가 요청된 크기를 초과하면 이미지가 축소되고 잘립니다 (가로세로 비율 유지).

예:

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

이 예에서 애플리케이션은 가로 256px, 높이 256px이어야 합니다(예: 썸네일:

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

다음 예는 클러스터의 바이트를 다운로드하는 방법을 보여줍니다. 동영상:

https://lh3.googleusercontent.com/p/AF....BsdZ=dv
w, h, cd

설명

동영상의 썸네일에 액세스하려면 이미지 기본 URL 매개변수를 사용합니다.

기본적으로 모든 동영상 썸네일에는 재생 오버레이가 포함됩니다. 버튼을 클릭합니다. 이 오버레이를 제거하려면 -no 매개변수를 참조하세요.

예:

이미지 기본 URL 표를 참조하세요. 를 참조하세요.

no

설명

썸네일 오버레이 삭제, no 매개변수

오버레이 없이 동영상의 썸네일을 검색하려는 경우 재생 버튼이 있으면 기본 URL을 no 매개변수 값으로 사용됩니다.

no 매개변수는 다음 중 하나 이상과 함께 사용해야 합니다. 이미지 기본 URL 매개변수.

예:

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

다음 예는 가로 1280픽셀, 세로 720픽셀 크기의 동영상 썸네일을 표시하며 재생 버튼 오버레이를 포함하지 않습니다.

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

모션 사진 기본 URL

모션 사진에는 사진과 동영상 요소가 모두 포함됩니다. 다음과 같은 매개변수를 사용할 수 있습니다. 이미지 기본 URL 또는 모션 사진 baseUrl 요청의 동영상 기본 URL

매개변수
dv

설명

모션 사진 미디어 항목의 동영상 요소를 검색하려면 동영상 기본 URL에서 다운로드하는 것처럼 dv 매개변수를 사용합니다.

w, h, cd

설명

모션 사진 미디어 항목의 사진 요소를 검색하려면 이미지 기본 URL의 형식입니다.