Facebook Stories API من Meta

يعرض هذا المستند كيفية استخدام Facebook Stories API لنشر القصص على صفحات فيسبوك.

لنشر قصة، ستقوم بإجراء الخطوات التالية:

  1. تحميل الوسائط على خوادم Meta
  2. نشر الوسائط على الصفحة كقصة

قبل البدء

يفترض هذا الدليل أنك قرأت نظرة عامة على واجهة API الصفحات وقمت بتنفيذ المكونات المطلوبة، وقمت بإكمال دليل بدء الاستخدام بنجاح.

  • ستحتاج إلى تنفيذ تسجيل دخول فيسبوك أو تسجيل دخول فيسبوك للأعمال لطلب الأذونات من مستخدمي التطبيق للوصول إلى صفحات فيسبوك ولتلقي رموز وصول الصفحة.

  • سيتعين على مستخدمي التطبيق أن يكونوا قادرين على تنفيذ المهمة CREATE_CONTENT في الصفحة الموضحة في رمز وصول الصفحة ومنح التطبيق الأذونات التالية:

    • pages_manage_posts
    • pages_read_engagement
    • pages_show_list

إذا كنت تستخدم حساب مستخدم نظام نشاط تجاري في طلبات API، فإن الإذن business_management سيكون مطلوبًا.

متطلبات الوسائط

يجب تقديم صورة أو فيديو يناسب المواصفات التالية.

مواصفات الصورة

الخاصيةالمواصفات

نوع الملف

.jpeg و.bmp و.png و.gif و.tiff

حجم الملف

لا يمكن أن يتجاوز حجم الملفات 4 ميجابايت. بالنسبة إلى ملفات .png، نوصي ألا يتجاوز الحجم 1 ميجابايت وإلا فقد تظهر الصورة بدقة منخفضة.

مواصفات الفيديو

الخاصيةالمواصفات

نوع الملف

.mp4 (موصى به)

نسبة العرض إلى الارتفاع

9 × 16

الحل

1080 × 1920 بيكسل (موصى به). الحد الأدنى هو 540 × 960 بيكسل

معدل الإطارات

24 إلى 60 إطارًا في الثانية

المدة

3 إلى 90 ثانية.

لا يمكن أن يتخطى مقطع ريلز الذي يتم نشره كقصة في صفحة فيسبوك 60 ثانية.

إعدادات الفيديو

  • أخذ عينات فرعية من الألوان 4:2:0
  • مجموعة صور (GOP) مغلقة (2 إلى 5 ثوانٍ)
  • الضغط - H.264 وH.265 (يتم دعم VP9 وAV1 أيضًا)
  • معدل الإطارات الثابت
  • المسح التقدمي

إعدادات الصوت

  • معدل البت للصوت - 128 كيلو بت في الثانية أو أكثر
  • القنوات - ستيريو
  • برنامج الترميز - الترميز الصوتي المتقدم (AAC) منخفض التعقيد
  • معدل العينة - 48 كيلو هرتز

التقييدات

  • لا يمكن استخدام صورة أو فيديو تم تحميله لقصة في منشور تم نشره مسبقًا
  • لا يمكن أن تتجاوز قصة الفيديو 60 ثانية
  • لتضمين القصص المؤرشفة في طلبات GET لعرض قائمة بالقصص، يجب تشغيل أرشيف القصص على فيسبوك

أفضل الممارسات

عند اختبار استدعاء API، يمكنك تضمين المعلمة access_token وتعيينها على رمز الوصول. مع ذلك، عند إجراء استدعاءات آمنة من التطبيق، استخدم فئة رمز الوصول.

يتم تنسيق أمثلة الرموز ضمن هذا المستند لإمكانية القراءة. استبدل القيم الغامقة والمائلة، مثل page_id بالقيم المتوفرة لديك.

قصص الفيديو

لنشر قصة فيديو على صفحة فيسبوك، ستقوم بتهيئة جلسة تحميل الفيديو من خلال خوادم Meta وتحميل الفيديو على خوادم Meta ثم نشر قصة الفيديو.

الخطوة الأولى: تهيئة الجلسة

لتهيئة جلسة التحميل، أرسل طلب POST إلى نقطة النهاية /page_id/video_stories حيث يكون page_id هو معرف صفحة فيسبوك، مع تعيين المعلمة upload_phase على start.

مثال على الطلب

curl -X POST "https://graph.facebook.com/v21.0/page_id/video_stories" \
      -d '{
           "upload_phase":"start",
         }'

عند نجاح العملية، يتلقى التطبيق استجابة JSON تتضمن معرف الفيديو وعنوان URL في فيسبوك حيث سيتم تحميل الفيديو.

مثال على الاستجابة

{
  "video_id": "video_id",
  "upload_url": "https://rupload.facebook.com/video-upload/v21.0/video_id",
}  

الخطوة الثانية: تحميل فيديو

الآن بعد تهيئة جلسة التحميل وتلقي عنوان URL التحميل، يمكنك تحميل الفيديو. يمكنك تحميل:

تحميل ملف مستضاف

لتحميل ملف مستضاف، أرسل طلب POST إلى نقطة النهاية upload_url التي تلقيتها في خطوة التهيئة مع تضمين المعلمات التالية:

  • file_url تم تعيينه على عنوان URL ملف الفيديو
مثال على الطلب
curl -X POST "https://rupload.facebook.com/video-upload/v21.0/video_id" \
	-H "file_url: https://some.cdn.url/video.mp4"

تحميل ملف محلي

لتحميل ملف محلي، أرسل طلب POST إلى نقطة النهاية upload_url التي تلقيتها في خطوة التهيئة مع تضمين المعلمات التالية:

  • تعيين offset على 0
  • تعيين file_size على الحجم الإجمالي بالبايت للفيديو الذي يتم تحميله
مثال على الطلب
curl -X POST "https://rupload.facebook.com/video-upload/v21.0/video_id" \
	-H "offset: 0" \
        -H "file_size: file_size_in_bytes" \
	--data-binary "@/path/to/file/my_video_file.mp4"

عند نجاح التحميل، يتلقى التطبيق استجابة JSON مع تعيين success على true.

مثال على استجابة التحميل
{
    "success": true
}  

تحميل تمت مقاطعته

إذا تمت مقاطعة تحميل الفيديو، فيمكنك إعادة تشغيل التحميل أو استئنافه.

  • لإعادة تشغيل التحميل، أعد إرسال طلب POST وقم بتعيين offset على 0.
  • لاستئناف التحميل، أعد إرسال طلب POST مع تعيين offset على القيمة bytes_transfered من عملية التحقق من الحالة.

الحصول على حالة التحميل

للتحقق من حالة الفيديو أثناء التحميل أو النشر، أرسل طلب GET إلى نقطة النهاية /video_id بمع تضمين المعلمة التالية:

  • تعيين fields على status
مثال على الطلب
curl -X GET "https://graph.facebook.com/v21.0/video_id" \
	-d "fields=status"

عند نجاح العملية، يتلقى التطبيق استجابة JSON تحتوي على:

  • كائن status يحتوي على:
    • video_status بالقيمة ready أو processing أو expired أو error
    • كائن uploading_phase بأزواج القيم والمفاتيح التالية:
      • تعيين status على in_progress أو not_started أو complete أو error
      • تعيين bytes_transfered على البايت التي تم تحميلها. يمكن استخدامها كقيمة لـ offset إذا تمت مقاطعة التحميل.
    • كائن processing_phase بأزواج القيم والمفاتيح التالية:
      • تعيين status على in_progress أو not_started أو complete أو error
    • كائن processing_phase بأزواج القيم والمفاتيح التالية:
      • تعيين status على in_progress أو not_started أو complete أو error
      • تعيين publish_status على published أو not_published
      • تعيين publish_time على طابع زمني بتنسيق UNIX للوقت الفعلي أو المنشور
مثال على الاستجابة
تعرض الاستجابة التالية ملفًا تم تحميله بنجاح.
{
  "status": {
    "video_status": "processing", 
    "uploading_phase": {
      "status": "in_progress", 
      "bytes_transfered": 50002 
    },
    "processing_phase": {
      "status": "not_started"
    }
    "publishing_phase": {
      "status": "not_started",
      "publish_status": "published",
      "publish_time": 234523452 
    }
  }
}
تعرض الاستجابة التالية خطأ حدث في مرحلة المعالجة.
{
  "status": {
    "video_status": "processing", 
    "uploading_phase": {
      "status": "complete"
    },
    "processing_phase": {
      "status": "not_started",
      "error": {
        "message": "Resolution too low. Video must have a minimum resolution of 540p."
      }
    }
    "publishing_phase": {
      "status": "not_started"
    }
  }
}

الخطوة الثالثة. نشر قصة فيديو

لنشر قصة فيديو إلى الصفحة، سترسل POST إلى نقطة النهاية /page_id/video_stories مع تضمين المعلمات التالية:

  • تعيين video_id على معرف الفيديو الذي تم تحميله
  • تعيين upload_phase على finish

مثال على الطلب

curl -X POST "https://graph.facebook.com/v21.0/page_id/video_stories" \
      -d '{
           "video_id": "video_id",
           "upload_phase": "finish"
         }'

عند نجاح العملية، يتلقى التطبيق استجابة JSON تحتوي على أزواج القيم والمفاتيح التالية:

  • تعيين success على true
  • تعيين post_id على معرف منشور القصة

مثال على الاستجابة

{
  "success": true,
  "post_id": 1234
}

قصص الصور

الخطوة الأولى. تحميل صورة

تفضل بزيارة مرجع منشورات الصفحة للتعرف على كيفية تحميل صورة في خوادم Meta باستخدام نقطة النهاية /page_id/photos. تأكد من تضمين المعلمة published وتعيينها على false.

الخطوة الثانية. نشر قصة صورة

لنشر قصة صورة على الصفحة، سترسل طلب POST إلى نقطة النهاية /page_id/photo_stories مع تضمين المعلمات التالية:

  • تعيين photo_id على معرف الصورة التي تم تحميلها

مثال على الطلب

curl -X POST "https://graph.facebook.com/v21.0/page_id/photo_stories" \
      -d '{
           "photo_id": "photo_id"
         }'

عند نجاح العملية، يتلقى التطبيق استجابة JSON تحتوي على أزواج القيم والمفاتيح التالية:

  • تعيين success على true
  • تعيين post_id على معرف منشور القصة

مثال على الاستجابة

{
  "success": true,
  "post_id": 1234
}

الحصول على القصص

للحصول على قائمة بكل القصص في الصفحة وبيانات حول القصة، أرسل طلب GET إلى نقطة النهاية /page_id/stories حيث يكون page_id هو معرف الصفحة التي تريد عرضها.

مثال على الطلب

    
curl -i -X GET "https://graph.facebook.com/v21.0/page_id/stories"

عند نجاح العملية، يتلقى التطبيق استجابة JSON تتضمن مصفوفة كائنات حيث يحتوي كل كائن على معلومات حول قصة منشورة في الصفحة. يحتوي كل كائن على أزواج القيم والمفاتيح التالية:

  • تعيين post_id على معرف منشور القصة المنشورة
  • تعيين status على PUBLISHED وARCHIVED
  • تعيين creation_time على طابع زمني بتنسيق UNIX عند نشر القصة
  • تعيين media_type على video أو photo
  • تعيين media_id على معرف الفيديو أو القصة في منشور القصة
  • تعيين url على عنوان URL فيسبوك لمنشور القصة، مثل https://facebook.com/stories/8283482737484972

مثال على الاستجابة

{
  "data": [
    {
      "post_id": "post_id",
      "status": "PUBLISHED",
      "creation_time": "123456",
      "media_type": "video",
      "media_id": "video_id",
      "url": "https://facebook.com/stories…"
    },
    {
      "post_id": "post_id",
      "status": "PUBLISHED",
      "creation_time": "123456",
      "media_type": "photo",
      "media_id": "photo_id",
      "url": "https://facebook.com/stories…"
    },
    {
      "post_id": "post_id",
      "status": "ARCHIVED",
      "creation_time": "123456",
      "media_type": "photo",
      "media_id": "photo_id",
      "url": "https://facebook.com/stories…"
    },
    ...
  ],
}

يمكنك فلترة القصص حسب الحالة، إما منشورة أو مؤرشفة، والتاريخ باستخدام المعلمتين since وuntil.