แสดงเนื้อหาในคลัง อัลบั้ม และสื่อ

ขอบเขตการให้สิทธิ์ที่จำเป็น

Google Photos Library API มีขอบเขตหลายรายการที่ใช้ในการเข้าถึงรายการสื่อและอัลบั้ม รายการสื่อที่แสดงผลจากการเรียกหลายครั้งจะแตกต่างกันไปตามขอบเขต ตามที่นักพัฒนาซอฟต์แวร์ขอ

ขอบเขต photoslibrary.readonly อนุญาตให้เข้าถึงรายการสื่อทั้งหมดใน ไลบรารีของผู้ใช้ ขอบเขต photoslibrary.readonly.appcreateddata อนุญาตให้เข้าถึง ไปยังรายการสื่อที่แอปสร้างขึ้นเท่านั้น สำหรับข้อมูลเพิ่มเติม โปรดดู ขอบเขตการให้สิทธิ์

ภาพรวม

การใช้งานที่สำคัญของ API คือเพื่อแสดงรายการสื่อที่ผู้ใช้ได้สำรองข้อมูลไว้ ไปยัง Google Photos รายการในอัลบั้มใดอัลบั้มหนึ่ง หรือจากทั้งหมดของผู้ใช้ ไลบรารี (มุมมองเริ่มต้นในแอป Google Photos) สามารถแสดงในรายการได้

คุณใช้ตัวกรองเพื่อเลือกรูปภาพได้ ที่ตรงกับวันที่ หมวดหมู่เนื้อหา หรือประเภทสื่อที่ระบุเมื่อคุณแสดงรายการ จากคลังของผู้ใช้ ระบบจะไม่รองรับฟีเจอร์นี้เมื่อคุณแสดงรายการจาก

การแสดงรายการเนื้อหาในคลังเพลงและอัลบั้มจะแสดงรายการสื่อ ส่วนเสริมที่เป็นส่วนหนึ่งของอัลบั้ม ผลิตภัณฑ์ดังกล่าว รายการสื่อจะอธิบายรูปภาพ วิดีโอ หรือสื่ออื่นๆ ต mediaItem มีลิงก์โดยตรงไปยังรายการ ลิงก์ไปยังรายการใน Google Photos และข้อมูลเมตาอื่นๆ ที่เกี่ยวข้อง สำหรับข้อมูลเพิ่มเติม โปรดดู เข้าถึงรายการสื่อและ mediaItems

แสดงรายการอัลบั้ม

คุณสามารถเรียกดูรายการอัลบั้มของผู้ใช้ได้โดยใช้ albums.list.

REST

ตัวอย่างคำขอมีดังนี้

GET https://photoslibrary.googleapis.com/v1/albums

คำขอแสดงผลลัพธ์ต่อไปนี้

{
  "albums": [
    {
      "id": "album-id",
      "title": "album-title",
      "productUrl": "album-product-url",
      "coverPhotoBaseUrl": "album-cover-base-url_do-not-use-directly",
      "coverPhotoMediaItemId": "album-cover-media-item-id",
      "isWriteable": "whether-you-can-write-to-this-album",
      "mediaItemsCount": "number-of-media-items-in-album"
    },
    ...
  ],
  "nextPageToken": "token-for-pagination"
}

Java

try {
  // Make a request to list all albums in the user's library
  // Iterate over all the albums in this list
  // Pagination is handled automatically
  ListAlbumsPagedResponse response = photosLibraryClient.listAlbums();

  for (Album album : response.iterateAll()) {
    // Get some properties of an album
    String id = album.getId();
    String title = album.getTitle();
    String productUrl = album.getProductUrl();
    String coverPhotoBaseUrl = album.getCoverPhotoBaseUrl();
    // The cover photo media item id field may be empty
    String coverPhotoMediaItemId = album.getCoverPhotoMediaItemId();
    boolean isWritable = album.getIsWriteable();
    long mediaItemsCount = album.getMediaItemsCount();
  }

} catch (ApiException e) {
  // Handle error
}

PHP

try {
    // Make a request to list all albums in the user's library
    // Iterate over all the albums in this list
    // Pagination is handled automatically
    $response = $photosLibraryClient->listAlbums();
    foreach ($response->iterateAllElements() as $album) {
        // Get some properties of an album
        $albumId = $album->getId();
        $title = $album->getTitle();
        $productUrl = $album->getProductUrl();
        $coverPhotoBaseUrl = $album->getCoverPhotoBaseUrl();
        // The cover photo media item id field may be empty
        $coverPhotoMediaItemId = $album->getCoverPhotoMediaItemId();
        $isWriteable = $album->getIsWriteable();
        $totalMediaItems = $album->getTotalMediaItems();
    }
} catch (\Google\ApiCore\ApiException $e) {
    // Handle error
}

อัลบั้มที่ส่งคืนแต่ละอัลบั้มจะมีรหัสซึ่งสามารถใช้เรียกเนื้อหาของ ตามที่แสดงในการแสดงเนื้อหาอัลบั้ม และ ประกอบด้วยชื่อและจำนวนรายการสื่อภายในวิดีโอ

productUrl ชี้ไปที่อัลบั้มใน Google Photos ที่สามารถ เปิดโดยผู้ใช้

coverPhotoMediaItemId ประกอบด้วยรายการสื่อ รหัสที่ แสดงรูปภาพปกของอัลบั้มนี้ ในการเข้าถึงภาพหน้าปกนี้ ให้ใช้ coverPhotoBaseUrl คุณไม่ควรใช้ coverPhotoBaseUrl โดยตรงโดยไม่มี การระบุเพิ่มเติม

อัลบั้มที่มีการสร้างในบัญชีของผู้ใช้หรือเพิ่มลงใน และที่แอปของคุณได้แชร์ไว้จะมีพร็อพเพอร์ตี้ shareInfo เพิ่มเติม โปรดดูรายละเอียดเพิ่มเติมที่หัวข้อแชร์สื่อ

อัลบั้มอาจมีแฟล็ก isWriteable เพื่อระบุว่าคุณสามารถสร้างสื่อได้ไหม รายการในอัลบั้ม ธงนี้จะมีค่าเริ่มต้นเป็น false หากไม่มีการส่งคืน ใช่เลย ตามสิทธิ์เข้าถึงที่ให้ไว้กับแอปพลิเคชันของคุณ ซึ่งรวมถึงสิ่งต่อไปนี้

  • ใครสร้างอัลบั้ม
  • ว่าแชร์แล้วหรือไม่
  • สิ่งที่กำหนดขอบเขตผู้ใช้ อนุมัติแล้ว

ธงนี้อาจเปลี่ยนแปลงหากเกณฑ์ใดๆ เหล่านี้มีการเปลี่ยนแปลง ดูรายละเอียดเพิ่มเติมได้ที่ สร้างอัลบั้ม การตอบกลับยังมี nextPageToken ด้วย สำหรับข้อมูลเพิ่มเติม โปรดดู การใส่เลขหน้า

การตอบสนองสำหรับอัลบั้มเปล่าจะแตกต่างกันไปใน mediaItemsCount และ coverPhotoMediaItemId ได้รับการตั้งค่าเป็น 0 โดยค่าเริ่มต้นและจะไม่แสดงใน REST คำตอบ โปรดทราบว่า coverPhotoBaseUrl ชี้ไปที่ตัวยึดตำแหน่งเริ่มต้น รูปภาพ

เนื้อหาในคลังข้อมูล

คุณสามารถแสดงรายการสื่อทั้งหมดจากคลังภาพ Google Photos ของผู้ใช้ โดยไม่รวมรายการที่เก็บถาวรและถูกลบ คุณสามารถแสดงรายการสื่อตาม เนื้อหา วันที่ และพร็อพเพอร์ตี้อื่นๆ โดยการใช้ ตัวกรอง หากผู้ใช้ยังไม่ได้เพิ่ม รายการที่อยู่ในแท็บการแชร์ของ Google Photos กับ คลัง แต่รายการนั้นจะไม่รวมอยู่ในรายการนี้

หากต้องการเรียกรายการสื่อ ให้เรียกใช้ mediaItems.list.

REST

ตัวอย่างคำขอมีดังนี้

GET https://photoslibrary.googleapis.com/v1/mediaItems
Content-type: application/json
Authorization: Bearer oauth2-token
{
  "pageSize": "100",
}

คำขอ GET จะแสดงการตอบกลับต่อไปนี้

{
  "mediaItems": [
    ...
  ],
  "nextPageToken": "token-for-pagination"
}

Java

try {
  // Make a request to list all media items in the user's library
  // Iterate over all the retrieved media items
  // Pagination is handled automatically
  ListMediaItemsPagedResponse response = photosLibraryClient.listMediaItems();
  for (MediaItem item : response.iterateAll()) {
    // Get some properties of a media item
    String id = item.getId();
    String description = item.getDescription();
    String mimeType = item.getMimeType();
    String productUrl = item.getProductUrl();
    String filename = item.getFilename();
  }
} catch (ApiException e) {
  // Handle error
}

PHP

try {
    // Make a request to list all media items in the user's library
    // Iterate over all the retrieved media items
    // Pagination is handled automatically
    $response = $photosLibraryClient->listMediaItems();
    foreach ($response->iterateAllElements() as $item) {
        // Get some properties of a media item
        /* @var $item \Google\Photos\Library\V1\MediaItem */
        $id = $item->getId();
        $description = $item->getDescription();
        $mimeType = $item->getMimeType();
        $productUrl = $item->getProductUrl();
        $filename = $item->getFilename();
    }
} catch (\Google\ApiCore\ApiException $e) {
    // Handle error
}

การตอบกลับจะมีลิสต์รายการสื่อโดยเรียงลำดับจากใหม่สุดไปเก่าสุด สำหรับข้อมูลเพิ่มเติม โปรดดู mediaItems และ มี nextPageToken ซึ่งอธิบายไว้โดยละเอียดใน การใส่เลขหน้า

แสดงเนื้อหาของอัลบั้ม

หากต้องการแสดงรายการสื่อทั้งหมดในอัลบั้ม ให้เพิ่มช่อง albumId ลงใน คำขอการค้นหา สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ albumId โปรดดู รายชื่อ อัลบั้ม และการแสดงอัลบั้มที่แชร์ ถ้า albumId ไม่ถูกต้อง ระบบจะแสดงผลข้อผิดพลาด Bad Request หากรหัสถูกต้อง แต่อัลบั้มไม่มีสำหรับผู้ใช้ที่ตรวจสอบสิทธิ์ ข้อผิดพลาด Not Found คือ ส่งคืนแล้ว ดูรายละเอียดเพิ่มเติมเกี่ยวกับการจัดการข้อผิดพลาดได้ที่ประสิทธิภาพ เคล็ดลับและขอแสดงความนับถือ แนวทางปฏิบัติที่ดี

REST

ตัวอย่างคำขอมีดังนี้

POST https://photoslibrary.googleapis.com/v1/mediaItems:search
Content-type: application/json
Authorization: Bearer oauth2-token
{
  "pageSize": "100",
  "albumId": "album-id"
}

คำขอ POST จะแสดงการตอบกลับต่อไปนี้

{
  "mediaItems": [
    ...
  ],
  "nextPageToken": "token-for-pagination"
}

Java

try {
  // Make a request to list all media items in an album
  // Provide the ID of the album as a parameter in the searchMediaItems call
  // Iterate over all the retrieved media items
  SearchMediaItemsPagedResponse response = photosLibraryClient.searchMediaItems(albumId);

  for (MediaItem item : response.iterateAll()) {
    // ...
  }

} catch (ApiException e) {
  // Handle error
}

PHP

try {
    // Make a request to list all media items in an album
    // Provide the ID of the album as a parameter in the searchMediaItems call
    // Iterate over all the retrieved media items
    $response = $photosLibraryClient->searchMediaItems(['albumId' => $albumId]);
    foreach ($response->iterateAllElements() as $item) {
        // ...
    }
} catch (\Google\ApiCore\ApiException $e) {
    // Handle error
}

การตอบกลับจะมี nextPageToken และลิสต์สื่อ ไม่เหมือนกับตอนที่ แสดงรายการเนื้อหาในคลัง มีการแสดงรายการสื่อตามลำดับใน ดูรายละเอียดเพิ่มเติมได้ที่ mediaItems และการใส่เลขหน้า ผู้ใช้แก้ไขลำดับใน อินเทอร์เฟซของ Google Photos

หากตั้งค่า albumId ไว้ คุณจะใช้ตัวกรองเมื่อแสดงเนื้อหาอัลบั้มไม่ได้ การดำเนินการดังกล่าวจะส่งผลให้เกิดข้อผิดพลาด Bad Request

แสดงรายการอัลบั้มที่แชร์

คุณสามารถเรียกดูรายการอัลบั้มทั้งหมดที่ผู้ใช้ได้แชร์หรือที่ แชร์กับผู้ใช้ ซึ่งคล้ายกับแท็บการแชร์ใน แอป Google Photos

อัลบั้มที่แชร์ซึ่งผู้ใช้เพิ่มไปยังคลังภาพ Google Photos จะแสดงในการเรียกอัลบั้มที่แสดงด้วย ทำ การเรียกต่อไปนี้เพื่อแสดงอัลบั้มที่แชร์ผ่านทาง Library API:

REST

ตัวอย่างคำขอมีดังนี้

GET https://photoslibrary.googleapis.com/v1/sharedAlbums

คำขอแสดงผลลัพธ์ต่อไปนี้

{
  "sharedAlbums": [...]
  "nextPageToken": "token-for-pagination"
}

Java

try {
  // Make a request to list all albums that have been shared by the user
  // Iterate over all the albums in this list
  // Pagination is handled automatically
  ListSharedAlbumsPagedResponse response = photosLibraryClient.listSharedAlbums();

  for (Album album : response.iterateAll()) {
    // ..
  }

} catch (ApiException e) {
  // Handle error
}

PHP

try {
    // Make a request to list all albums that have been shared by the user
    // Iterate over all the albums in this list
    // Pagination is handled automatically
    $response = $photosLibraryClient->listSharedAlbums();
    foreach ($response->iterateAllElements() as $album) {
        // ...
    }
} catch (\Google\ApiCore\ApiException $e) {
    // Handle error
}

รายการอัลบั้มรวมอยู่ใน sharedAlbums สำหรับข้อมูลเพิ่มเติม โปรดดู การแสดงอัลบั้ม การตอบกลับยังมี nextPageToken ด้วย ดูข้อมูลเพิ่มเติมได้ที่การใส่เลขหน้า

อัลบั้มที่แอปของคุณสร้างขึ้นและแชร์จะมี shareInfo เพิ่มเข้ามา โปรดดูรายละเอียดเพิ่มเติมที่ แชร์ สื่อ

แอปแสดงรายการอัลบั้มที่สร้าง

คุณสามารถแสดงรายการอัลบั้มที่สร้างโดยแอปของคุณได้โดยใช้ ตั้งค่า excludeNonAppCreatedData เป็น true ในการโทรต่อไปนี้

REST

ต่อไปนี้เป็นคำขอ GET เพื่อแสดงรายการอัลบั้มทั้งหมดจาก คลังภาพ Google Photos ที่แอปของคุณสร้างขึ้นเท่านั้น ได้แก่

GET https://photoslibrary.googleapis.com/v1/albums?excludeNonAppCreatedData=true
Content-type: application/json
Authorization: Bearer oauth2-token

ต่อไปนี้เป็นคำขอ GET เพื่อแสดงรายการอัลบั้มที่แชร์ทั้งหมดจาก คลังภาพ Google Photos ที่แอปของคุณสร้างขึ้นเท่านั้น ได้แก่

GET https://photoslibrary.googleapis.com/v1/sharedAlbums?excludeNonAppCreatedData=true
Content-type: application/json
Authorization: Bearer oauth2-token

Java

try {
  // Make a request to list all albums that have been created by your app
  boolean excludeNonAppCreatedData = true;

  // Iterate over all the albums in this list
  // Pagination is handled automatically
  ListAlbumsPagedResponse response = photosLibraryClient.listAlbums(excludeNonAppCreatedData);

  for (Album album : response.iterateAll()) {
    // ..
  }

} catch (ApiException e) {
  // Handle error
}

try {
  // Make a request to list all shared albums that have been created by your app
  boolean excludeNonAppCreatedData = true;

  // Iterate over all the albums in this list
  // Pagination is handled automatically
  ListSharedAlbumsPagedResponse response =
      photosLibraryClient.listSharedAlbums(excludeNonAppCreatedData);

  for (Album album : response.iterateAll()) {
    // ..
  }

} catch (ApiException e) {
  // Handle error
}

PHP

try {
    // Make a request to list all albums that have been created by your app
    $response = $photosLibraryClient->listAlbums(['excludeNonAppCreatedData' => true]);

    // Iterate over all the albums in this list
    // Pagination is handled automatically
    foreach ($response->iterateAllElements() as $album) {
        // ...
    }
} catch (\Google\ApiCore\ApiException $e) {
    // Handle error
}

try {
    // Make a request to list all shared albums that have been created by your app
    $response = $photosLibraryClient->listSharedAlbums(['excludeNonAppCreatedData' => true]);

    // Iterate over all the albums in this list
    // Pagination is handled automatically
    foreach ($response->iterateAllElements() as $album) {
        // ...
    }
} catch (\Google\ApiCore\ApiException $e) {
    // Handle error
}

การใส่เลขหน้าสำหรับ REST

ในการปรับปรุงประสิทธิภาพ วิธีการที่ส่งคืนผลลัพธ์จำนวนมาก (เช่น ที่ใช้) อาจใส่เลขหน้าให้คำตอบได้ จำนวนผลลัพธ์สูงสุดในแต่ละรายการ จะกําหนดโดยพารามิเตอร์ pageSize

สำหรับการเรียกไปยัง mediaItems:search และ mediaItems:list ขนาดหน้าตามค่าเริ่มต้นคือ 25 รายการ เราแนะนำขนาดของหน้าเว็บนี้ เนื่องจากจะรักษาสมดุลระหว่าง ของการตอบกลับและอัตราการส่งโฆษณา ขนาดหน้าสูงสุดสำหรับรายการสื่อ คำขอค้นหาและแสดงรายการเท่ากับ 100 รายการ

ขนาดหน้าเริ่มต้นและที่แนะนำเมื่อแสดงอัลบั้มคือ 20 อัลบั้ม พร้อมด้วย สูงสุด 50 อัลบั้ม

เมื่อจำนวนผลลัพธ์ที่ใช้ได้มากกว่าขนาดหน้า มี nextPageToken ซึ่งบ่งชี้ให้แอปพลิเคชันของคุณทราบว่ามี ผลลัพธ์เพิ่มเติมที่จะดึงจากเซิร์ฟเวอร์

ตัวอย่าง

คุณต้องเพิ่ม nextPageToken ต่อท้ายคำขอต่อๆ มาในพารามิเตอร์ pageToken ดังที่แสดงในตัวอย่างต่อไปนี้ ระบุ pageToken ร่วมกัน ร่วมกับพารามิเตอร์อื่นๆ ที่จำเป็นสำหรับการดำเนินการ ในเนื้อหาของพารามิเตอร์ หรือเป็นพารามิเตอร์การค้นหา

คำขอ #1

{
  "pageSize": "5",
  "filters": { … }
}

คำตอบที่ 1

{
  "mediaItem": [ … ],
  "nextPageToken": "next-page-token"
}

คำขอ #2

{
  "pageSize": "5",
  "filters": { … },
  "pageToken": "page-token"
}

คำตอบที่ 2

{
  "mediaItem": [ … ],
  "nextPageToken": "next-page-token"
}

ใช้รูปแบบนี้ต่อไปจนกว่าจะไม่มีวัตถุ nextPageToken อีก

nextPageToken ใช้ได้กับคำขอเดียวกันเท่านั้น หากมีพารามิเตอร์ nextPageToken ที่ใช้ก่อนหน้านี้ไม่ควรจะใช้ในแคมเปญเดียวกัน อีกครั้ง