تقديم طلبات في Google Drive Activity API

يوضّح هذا الدليل كيفية تقديم طلبات في Google Drive Activity API باستخدام الأسلوب activity.query.

مفتاح طلب البحث

هناك طريقتان لطلب النشاط: حسب عنصر Google Drive أو لكل العناصر ضمن تسلسل هرمي للمجلدات.

  • itemName: تنسيق هذا المفتاح هو "items/ITEM_ID". وعادةً ما يكون هذا ملفًا في Drive. في حال تحديد مجلد لهذا المفتاح، سيعرض النشاط في المجلد، مثل وقت إنشائه أو إعادة تسميته.

  • ancestorName: تنسيق هذا المفتاح هو "items/ITEM_ID"، ويشمل الردّ النشاط على جميع العناصر في الشجرة الفرعية ضمن هذا المجلد.

في حال عدم ضبط مفتاح، يتم استخدام ancestorName تلقائيًا من "items/root" ويُعرَض النشاط لجميع العناصر في Drive.

تقسيم النتائج على عدّة صفحات

يتيح لك الحقل pageSize طلب عدد تقريبي من الأنشطة لعرضه في كلّ ردّ. سيختلف العدد الفعلي للأنشطة المعروضة، لذلك يجب أن يتعامل تطبيقك مع كميات عشوائية في الاستجابة.

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

الدمج

غالبًا ما يتم تجميع عناصر Action وإعادتها ضمن مورد واحد DriveActivity. تحدث بعض عمليات تجميع Action بشكل عفوي، مثل نقل عنصر إلى مجلد مشترَك يؤدي إلى تغيير الإذن.

يمكنك أيضًا تحديد ConsolidationStrategy (يُعرف ذلك أحيانًا باسم التجميع أو تجميع البيانات) في الطلب. يتيح ذلك إنشاء مجموعات أخرى من عناصر Action ذات الصلة، مثل عدة جهات فاعلة تعدّل عنصرًا واحدًا أو Actor واحدًا ينقل ملفات متعددة إلى مجلد جديد في Drive.

على الرغم من أنّ Action الفردي يحتوي على Actor واحد وTarget واحد، بعد التجميع، يمكن أن يحتوي DriveActivity الناتج على جهات فاعلة متعددة واستهدافات متعددة. ومع ذلك، حتى بعد التجميع، يكون هناك دائمًا إجراء "أساسي" إما يمثّل جميع الإجراءات في DriveActivity المرجع أو هو أهمّها، وذلك استنادًا إلى استراتيجية الدمج المطلوبة.

ونتيجةً لذلك، سواء كان الدمج مفعّلاً أم لا، قد يكون كافيًا لكثير من العملاء الاطّلاع على محتوى المستوى الأعلى فقط لمصدر DriveActivity (مثل الجهات الفاعلة والأهداف المجمّعة ضمن primaryActionDetail) وتجاهل الإجراءات التفصيلية في الاستجابة.

الفلاتر

يمكنك حصر الإجراءات التي قد يتم عرضها في مورد DriveActivity من خلال إنشاء سلسلة filter في طلب activity.query. هناك حقلَان متوافقان: time وdetail.action_detail_case.

الفلترة حسب الوقت

لتقييد الإجراءات حسب النطاق الزمني، حدِّد اسم الحقل time باستخدام عوامل حسابية رقمية على قيم التاريخ، مع ربطها بعبارة "و" اختيارية. استخدِم المللي ثانية منذ 1 كانون الثاني (يناير) 1970 أو تنسيق RFC 3339، مثل:

  • time > 1452409200000 AND time <= 1492812924310
  • time >= "2016-01-10T01:02:03-05:00"

تصفية حسب النوع

لتقييد البيانات حسب نوع الإجراء، طبِّق اسم الحقل detail.action_detail_case مع المشغِّل has (:). استخدِم إما قيمة فردية أو قائمة بأنواع الإجراء المسموح بها محصورة بين قوسين، مفصولة بمسافة. للعثور على قائمة بأنواع الإجراءات، راجِع عناصر ActionDetail.

لاستبعاد نوع إجراء من الاستجابة، أضِف واصلة (-) في بداية سلسلة الفلتر.

في ما يلي بعض الأمثلة على أنواع الإجراءات:

  • detail.action_detail_case:RENAME
  • detail.action_detail_case:(CREATE RESTORE)
  • -detail.action_detail_case:MOVE

النُسخ

يمكن دمج شروط الفلترة هذه ضمن سلسلة filter واحدة، مثل:

  • detail.action_detail_case:(CREATE EDIT RESTORE) time > 1452409200000

أمثلة على الطلبات

طلب آخر 10 أنشطة لعنصر في Drive:

{
  "itemName": "items/ITEM_ID",
  "pageSize": 10
}

طلب الأنشطة المجمّعة لكل عنصر في Drive ضمن مجلد رئيسي:

{
  "ancestorName": "items/ITEM_ID",
  "consolidationStrategy": {
    "legacy": {}
  }
}

طلب جميع إجراءات MOVE وRENAME على عنصر في Drive:

{
  "itemName": "items/ITEM_ID",
  "filter": "detail.action_detail_case:(MOVE RENAME)"
}

طلب جميع الأنشطة منذ 1 كانون الثاني (يناير) 2018 بالتوقيت الشرقي:

{
  "ancestorName": "items/root",
  "filter": "time >= \"2018-01-01T00:00:00-05:00\""
}

يمكنك طلب جميع الأنشطة، باستثناء إجراءات EDIT، خلال حزيران (يونيو) 2017 بالتوقيت العالمي المتفق عليه:

{
  "ancestorName": "items/root",
  "filter": "time >= \"2018-06-01T00:00:00Z\" time < \"2018-07-01T00:00:00Z\" -detail.action_detail_case:EDIT"
}