پساز برقراری تماس برای فهرست کردن محتوای آلبوم یا کتابخانه عکس، برنامه شما باید بهجای ذخیره کردن موارد رسانهای برگرداندهشده، شناسههای موارد رسانهای را ذخیره کند. دلیلش این است که محتوای موارد رسانهای ممکن است تغییر کند و پساز مدتی، نشانیهای وب موجود در پاسخ منقضی میشوند. شناسه فایل رسانهای بهطور منحصربهفرد فایل رسانهای را شناسایی میکند، مانند عکس یا ویدیو در کتابخانه کاربر.
توجه داشته باشید که برنامهتان نباید عکس یا ویدیو کاربر را برای مدت طولانی در حافظه نهان ذخیره کند، اما بسته به مورد استفادهتان، میتوانید شناسه فایل رسانهای را تا زمانی که لازم است ذخیره یا در حافظه نهان ذخیره کنید. همچنین باید توجه داشته باشید که دسترسی به دادههای کاربر تحت نظارت تعهدات حریم خصوصی است.
گسترههای مجوز لازم
برای دسترسی به موارد رسانهای، برنامهتان باید حداقل یکی از گسترههای مجوز زیر را درخواست کند. دسترسی به فایلهای رسانهای برگرداندهشده در پاسخ به دامنههایی که درخواست کردهاید بستگی دارد.
photoslibrary.readonlyاجازه دسترسی به همه فایلهای رسانهای موجود در کتابخانه کاربر را میدهدphotoslibrary.readonly.appcreateddataفقط به فایلهای رسانهای که توسط برنامه ایجاد شدهاند اجازه دسترسی میدهد
فایلهای رسانهای
mediaItem
نمایشی از رسانهای مانند عکس یا ویدیو است که در کتابخانه Google Photos بارگذاری شده است. این شیء در بالاترین سطح قرار دارد و ویژگیهای آن میتواند
براساس نوع رسانه زیربنایی متفاوت باشد.
جدول زیر ویژگیهای mediaItem را فهرست میکند:
| مشخصات | |
|---|---|
id |
شناسه دائمی و ثابتی که برای شناسایی شیء استفاده میشود. |
description |
شرح فایل رسانهای همانطور که در Google Photos دیده میشود. |
baseUrl |
برای دسترسی به بایتهای خام استفاده میشود. برای اطلاعات بیشتر، نشانیهای وب پایه را ببینید. |
productUrl |
پیوندی به تصویر در Google Photos. این پیوند را توسعهدهنده نمیتواند باز کند، فقط کاربر میتواند آن را باز کند. نشانیهای وب به فایل رسانهای در کتابخانه اشاره میکنند. اگر نشانی وب از جستجوی آلبوم بازیابی شده باشد، به موردی در آلبوم اشاره میکند. |
mimeType |
نوع فایل رسانهای برای کمک به شناسایی آسان نوع رسانه
(برای مثال: image/jpg). |
filename |
نام فایل رسانهای که در برنامه Google Photos به کاربر نشان داده میشود (در بخش اطلاعات مورد). |
mediaMetadata |
بسته به نوع اصلی رسانه، مانند photo یا video، متفاوت است.
برای کاهش بار داده، میتوان از ماسکهای فیلد استفاده کرد.
|
contributorInfo |
این فیلد فقط زمانی پر میشود که فایل رسانهای در آلبوم مشترک ایجادشده توسط این برنامه باشد و کاربر دامنه حاوی اطلاعاتی درباره همیاری است که این فایل رسانهای را اضافه کرده است. برای جزئیات بیشتر، به همرسانی رسانه مراجعه کنید. |
دریافت فایل رسانهای
برای بازیابی فایل رسانهای،
mediaItems.get را بااستفاده از
mediaItemId فراخوانی کنید. درخواست یک فایل رسانهای را برمیگرداند.
mediaItem حاوی ویژگیهایی مانند شناسه، شرح، و نشانی وب است. اطلاعات
اضافی در photo یا video براساس فراداده موجود در
فایل است. ممکن است همه داراییها وجود نداشته باشند. ContributorInfo حاوی فراداده
برای مواردی است که بخشی از آلبوم مشترک هستند. این فیلد فقط زمانی گنجانده میشود که
محتوای آلبوم مشترکی
فهرست شود که کاربر photoslibrary.sharing
دامنه مجوز را اعطا کرده باشد.
اگر فایل رسانهای ویدیو باشد، ابتدا باید فایل ویدیو پردازش شود. mediaItem
حاوی فیلد status در mediaMetadata است که وضعیت پردازش فایل ویدیو را شرح میدهد. فایل جدید بارگذاریشده ابتدا
videoProcessingStatus
را با مقدار PROCESSING برمیگرداند، قبلاز اینکه برای استفاده READY شود. baseUrl
فایل رسانهای ویدیویی تا زمانی که ویدیو پردازش نشده باشد دردسترس نیست.
استراحت
در اینجا یک درخواست GET آورده شده است:
GET https://photoslibrary.googleapis.com/v1/mediaItems/media-item-id Content-type: application/json Authorization: Bearer oauth2-token
پاسخ برای فایل رسانهای عکس بهاینصورت است. ویژگی photo حاوی فراداده برای موارد عکس است.
{
"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 است (اگر خطایی وجود داشته باشد).
حداکثر تعداد فایلهای رسانهای که میتوانید در یک تماس درخواست کنید ۵۰ است. فهرست فایلهای رسانهای نباید حاوی شناسههای تکراری باشد و نمیتواند خالی باشد.
استراحت
در اینجا درخواست 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 }
نشانیهای وب پایه
نشانیهای وب پایه در Google Photos Library API به شما امکان میدهند به بایتهای موارد رسانهای دسترسی پیدا کنید. بااستفاده از نشانیهای وب پایه مختلف، برنامهتان میتواند فایلهای رسانهای را بارگیری کند یا فایلهای رسانهای را در برنامهتان نمایش دهد. نشانیهای وب پایه رشتههایی هستند که وقتی آلبومها را فهرست میکنید یا به فایلهای رسانهای دسترسی پیدا میکنید در پاسخ گنجانده میشوند. این نشانها بهمدت ۶۰ دقیقه معتبر هستند و به پارامترهای اضافی نیاز دارند زیرا نمیتوان از آنها بههمان صورت استفاده کرد.
نشانیهای وب پایه مختلف عبارتاند از:
-
baseUrl: دسترسی مستقیم به عکس، ریزعکس برای ویدیو، یا بارگیری بایتهای ویدیو. -
coverPhotoBaseUrl: مستقیماً به عکس روی جلد آلبوم دسترسی پیدا کنید. profilePictureBaseUrl: دسترسی مستقیم به عکس نمایه مالکmediaItem.
نشانیهای وب پایه تصویر
در اینجا فهرستی از گزینههایی که میتوانید با نشانیهای وب پایه تصویر استفاده کنید آورده شده است:
| پارامتر | |
|---|---|
w، h |
شرح پارامترهای عرض، برای دسترسی به فایل رسانهای تصویری، مثل عکس یا ریزعکس برای ویدیو، باید ابعادی را که میخواهید در برنامهتان نمایش داده شود مشخص کنید (تا تصویر بتواند با حفظ نسبت ابعادی به این ابعاد مقیاسبندی شود). برای انجام این کار، نشانی وب پایه را با ابعاد موردنیازتان بههم متصل کنید، همانطور که در مثالها نشان داده شده است. نمونه: base-url=wmax-width-hmax-height در اینجا مثالی برای نمایش فایل رسانهای با عرض حداکثر ۲۰۴۸ پیکسل و ارتفاع حداکثر ۱۰۲۴ پیکسل آورده شده است: https://lh3.googleusercontent.com/p/AF....VnnY=w2048-h1024 |
c |
شرح پارامتر برش، اگر میخواهید تصویر را دقیقاً به ابعاد طول و عرضی که مشخص کردهاید برش دهید، نشانی وب پایه را با پارامتر اختیاری اندازه (به پیکسل) باید در محدوده [۱، ۱۶۳۸۳] باشد. اگر عرض یا ارتفاع تصویر از اندازه درخواستشده بیشتر باشد، تصویر کوچک میشود و برش میخورد (نسبت ابعادی حفظ میشود). نمونه: base-url=wmax-width-hmax-height-c در این مثال، برنامه فایل رسانهای را نمایش میدهد که دقیقاً ۲۵۶ پیکسل عرض و ۲۵۶ پیکسل ارتفاع دارد، مثل ریزعکس: https://lh3.googleusercontent.com/p/AF....VnnY=w256-h256-c |
d |
شرح پارامتر بارگیری، اگر میخواهید تصویر را با حفظ همه فرادادههای Exif بهجز فرادادههای مکان بارگیری کنید، نشانی وب پایه را با پارامتر نمونه: base-url=d در این مثال، برنامه تصویری را با همه فرادادهها بهجز فراداده مکان بارگیری میکند: https://lh3.googleusercontent.com/p/Az....XabC=d |
نشانیهای وب پایه ویدیو
در اینجا فهرستی از گزینههایی که میتوانید با نشانیهای وب پایه ویدیو استفاده کنید آورده شده است:
| پارامتر | |
|---|---|
dv |
شرح برای دسترسی به بایتهای ویدیو پارامتر dv نسخه تراتبدیلشده با کیفیت بالا از ویدیو اصلی را درخواست میکند. این پارامتر با پارامترهای w و h سازگار نیست. نشانیهای وب پایه برای بارگیری ویدیو ممکن است چند ثانیه طول بکشد تا بایتها را برگرداند. قبلاز استفاده از این پارامتر، بررسی کنید که فیلد نمونه: base-url=dv مثال زیر نحوه بارگیری بایتهای ویدیو را نشان میدهد: https://lh3.googleusercontent.com/p/AF....BsdZ=dv |
w، h، c، و
d |
شرح برای دسترسی به ریزعکس ویدیو، از هرکدام از پارامترهای نشانی وب پایه تصویر استفاده کنید. بهطور پیشفرض، همه ریزعکسهای ویدیو شامل همپوشانی دکمه بازپخش هستند. برای برداشتن این همپوشانی، پارامتر -no را ببینید. نمونه: برای مثال، به جدول نشانیهای وب پایه تصویر مراجعه کنید. |
no |
شرح همپوشانی برداشتن ریزعکس، پارامتر اگر میخواهید ریزعکس ویدیویی را بدون همپوشانی دکمه بازپخش بازیابی کنید، نشانی وب پایه را با پارامتر no الحاق کنید. پارامتر no باید با حداقل یکی از پارامترهای نشانی وب پایه تصویر استفاده شود. نمونه: base-url=wmax-width-hmax-height-no مثال زیر ریزعکس ویدیویی را نشان میدهد که دقیقاً ۱۲۸۰ پیکسل عرض و ۷۲۰ پیکسل ارتفاع دارد و شامل همپوشانی دکمه بازپخش نیست: https://lh3.googleusercontent.com/p/AF....VnnY=w1280-h720-no |
نشانیهای وب پایه عکس حرکتی
عکسهای حرکتی هم عناصر عکس و هم عناصر ویدیو را دربرمیگیرند. میتوانید از پارامترهای
نشانیهای وب پایه تصویر یا
نشانیهای وب پایه ویدیو برای درخواستهای عکس متحرک baseUrl استفاده کنید.
| پارامتر | |
|---|---|
dv |
شرح برای بازیابی عنصر ویدیویی فایل رسانهای عکس حرکتی، از پارامتر |
w، h، c، و
d |
شرح برای بازیابی عنصر عکس از فایل رسانهای عکس حرکتی، از قالب نشانیهای وب پایه تصویر استفاده کنید. |