الوصول إلى ملفات الوسائط

بعد إجراء مكالمات على إدراج محتوى مكتبة الصور أو الألبومات بدلاً من تخزين عناصر الوسائط التي تم إرجاعها، يجب على التطبيق تخزين معرّفات الوسائط. ويرجع هذا إلى أن محتوى عناصر الوسائط تتغير بعد فترة معيّنة، وتنتهي صلاحية عناوين URL المضمّنة في الردّ. تشير رسالة الأشكال البيانية يحدد معرّف عنصر الوسائط ملف وسائط بشكل فريد، مثل صورة أو فيديو داخل مكتبة المستخدم.

يُرجى العِلم أنّه يجب ألا يخزِّن تطبيقك صورة أو فيديو المستخدم لفترات طويلة، ولكن استنادًا إلى حالة الاستخدام، يمكنك تخزين أو تخزين مؤقت رقم تعريف عنصر الوسائط لمدة مطلوب. يجب أن تعلم أيضًا أن الوصول إلى مستخدم البيانات للخصوصية والالتزامات.

نطاقات التفويض المطلوبة

للوصول إلى عناصر الوسائط، يجب أن يطلب تطبيقك واحدًا على الأقل من نطاقات التفويض التالية. يعتمد الوصول إلى عناصر الوسائط التي يتم عرضها في الردّ على النطاقات التي طلبها.

  • تسمح photoslibrary.readonly بالوصول إلى جميع عناصر الوسائط في مكتبة المستخدم
  • لا يسمح photoslibrary.readonly.appcreateddata بالوصول إلا إلى ملفات الوسائط التي تم إنشاؤها من خلال التطبيق

عناصر الوسائط

حاسمة mediaItem هو تمثيل للوسائط مثل صورة أو فيديو تم تحميله إليه مكتبة صور Google. هذا هو كائن من المستوى الأعلى ويمكن لخصائصه أن حسب نوع الوسائط الأساسي.

يسرد الجدول التالي سمات mediaItem:

أماكن إقامة
id معرّف دائم وثابت يتم استخدامه لتحديد الكائن.
description وصف عنصر الوسائط كما يظهر بالداخل صور Google.
baseUrl يُستخدم للوصول إلى وحدات البايت الأولية. لمزيد من المعلومات، يُرجى الاطّلاع على عناوين URL الأساسية.
productUrl

رابط للصورة داخل "صور Google". لا يمكن للمطوِّر فتح هذا الرابط، بل يمكن للمستخدم فقط فتحه. تشير عناوين URL إلى عنصر وسائط في المكتبة. وإذا تم استرداد عنوان URL من بحث عن ألبوم، سيتم ويشير إلى العنصر داخل الألبوم.

mimeType نوع عنصر الوسائط للمساعدة في تحديد نوع الوسائط بسهولة (على سبيل المثال: image/jpg).
filename اسم ملف عنصر الوسائط الذي يظهر للمستخدم في تطبيق "صور Google" (ضمن قسم معلومات العنصر).
mediaMetadata يختلف بناءً على النوع الأساسي للوسائط، مثل photo أو video لخفض الحمولة، يمكن استخدام أقنعة الحقل.
contributorInfo

تتم تعبئة هذا الحقل فقط إذا كان عنصر الوسائط في ألبوم مشترَك التي أنشأها هذا التطبيق ومنح المستخدم نطاق واحد (photoslibrary.sharing).

يحتوي على معلومات عن المساهم الذي أضاف عنصر الوسائط هذا. لمزيد من التفاصيل، يمكنك الاطّلاع على مشاركة الوسائط.

الحصول على ملف وسائط

لاسترداد ملف وسائط، يمكنك إجراء مكالمة mediaItems.get باستخدام mediaItemId يعرض الطلب عنصر وسائط واحدًا.

يحتوي mediaItem على سمات، مثل رقم التعريف والوصف وعنوان URL. تشير رسالة الأشكال البيانية أي معلومات إضافية ضمن photo أو video تستند إلى البيانات الوصفية في الملف. قد لا تكون جميع المواقع متوفرة. يحتوي ContributorInfo على بيانات وصفية للعناصر التي تشكل جزءًا من ألبوم مشترك. لا يتم تضمين هذا الحقل إلا عند عرض محتوى álbum مشترَك منحه المستخدم 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

يظهر الردّ على عنصر وسائط الصورة على النحو التالي. الصورة على بيانات وصفية لعناصر الصور.

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

تحتوي خاصية الفيديو على بيانات وصفية لعناصر الفيديو.

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

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 الأساسية

إنّ عناوين URL الأساسية ضمن واجهة برمجة التطبيقات Google Photos Library API تتيح لك الوصول إلى وحدات البايت الخاصة بالوسائط. عناصر. باستخدام عناوين 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 الاختيارية مع المعلمة الإلزامية المعلمتان w وh.

يجب أن يكون الحجم (بالبكسل) ضمن النطاق [1، 16383]. إذا كانت إحدى عرض الصورة أو ارتفاعها يتجاوز الحجم المطلوب يتم تصغير حجم الصورة واقتصاصها (مع الحفاظ على نسبة العرض إلى الارتفاع).

أمثلة:

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

في هذا المثال، يعرض التطبيق عنصر وسائط 256 بكسل عرضًا و256 بكسل بالضبط، مثل الصورة المصغرة:

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، يمكنك إجراء تسلسل baseUrl مع تنزيل الفيديو، dv .

تطلب المَعلمة dv جودة عالية النسخة التي تم تحويل ترميزها من الفيديو الأصلي. المَعلمة غير متوافقة مع المَعلمتَين w وh

يمكن أن تستغرق عناوين URL الأساسية لعمليات تنزيل الفيديوهات بضع ثوانٍ وحدات بايت للعودة.

قبل استخدام هذه المعلمة، تحقق من أن عناصر الوسائط قيمة الحقل "mediaMetadata.status" هي READY. في حال عدم انتهاء معالجة ملف الوسائط، قد تظهر لك رسالة خطأ.

أمثلة:

base-url=dv

يوضح المثال التالي كيفية تنزيل وحدات البايت من الفيديو:

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

الوصف

وللوصول إلى الصورة المصغّرة للفيديو، استخدِم أيًا من مَعلمات عناوين 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 لقاعدة الصور أو عناوين URL الأساسية للفيديوهات لطلبات baseUrl للصور الحيّة.

المَعلمة
dv

الوصف

لاسترداد عنصر الفيديو لعنصر وسائط صورة حيّة، استخدم معلَمة dv كما تفعل للتنزيل من عناوين URL الأساسية للفيديوهات.

w وh وc و d

الوصف

لاسترداد عنصر الصورة لعنصر وسائط صورة حيّة، استخدم تنسيق عناوين URL لقاعدة الصور.