Graph API - احصل على الأحداث من قبل المالك/المبدع
-
25-09-2019 - |
سؤال
هل هناك طريقة مع واجهة برمجة تطبيقات Graph Facebook للحصول على قائمة بجميع الأحداث التي تم إنشاؤها بواسطة ملف تعريف واحد؟ يقوم عميلنا بإنشاء مجموعة من الأحداث ونريد سحب قائمة منها جميعًا. قلت إنه سيتعين عليهم فقط التأكد من أنهم يضعون أنفسهم لحضور الحدث ، لأنه بعد ذلك يمكنني بسهولة سحب قائمة الأحداث التي يحضرها ProfileId ، لكنني فضولي إذا كانت هناك طريقة أخرى. ربما استعلام FQL؟ إنهم يتطلعون إلى طلب استعلام على المفتاح الأساسي. وماذا سيبدو هذا استعلام FQL إذا كانت هذه هي الطريقة للقيام بذلك ؟؟
المحلول
لقد استخدمت أساسًا FQL
أن jhchen المقدمة. ومع ذلك ، استغرق الأمر مني حوالي 6 ساعات لمعرفة كيفية استخدام ذلك FQL
. لذلك كنت أحسب ، سأقدم لك نص عمل. إنه ليس مثاليًا ، لذا يرجى تحديثه إذا وجدت خطأ.
- تحميل Facebooks PHP SDK
- يضيف
YOUR_APP_ID
- يضيف
YOUR_APP_SECRET
- يضيف
PAGE_ID
- إجراء تغييرات على
FQL
بيان كما ترى مناسبة. توثيق FQL
بخلاف ذلك يجب أن تكون على ما يرام. أيضا ، قمت بتعيين المنطقة الزمنية الافتراضية ل America/Los_Angeles
. من المحتمل أن يتسبب هذا في مشاكل لبعضكم ، إذا كان لدى أي شخص طريقة أفضل للتعامل مع المناطق الزمنية ، فيرجى إخبارنا بذلك.
رمز PHP:
<?php
require_once("php/facebook.php");
date_default_timezone_set('America/Los_Angeles');
function display_events()
{
$app_id = 'YOUR_APP_ID';
$secret = 'YOUR_APP_SECRET';
$page_id = 'PAGE_ID';
$config = array();
$config['appId'] = $app_id;
$config['secret'] = $secret;
$config['fileUpload'] = false; // optional
$facebook = new Facebook($config);
$fql = 'SELECT
eid,
name,
pic_square,
creator,
start_time,
end_time
FROM event
WHERE eid IN
(SELECT eid
FROM event_member
WHERE uid='.$page_id.'
)
AND end_time >= ' . mktime() . '
ORDER BY start_time ASC
';
$ret_obj = $facebook->api(array(
'method' => 'fql.query',
'query' => $fql,
));
$html = '';
foreach($ret_obj as $key)
{
$facebook_url = 'https://www.facebook.com/event.php?eid=' . $key['eid'];
$start_time = date('M j, Y \a\t g:i A', $key['start_time']);
$end_time = date('M j, Y \a\t g:i A', $key['end_time']);
$html .= '
<div class="event">
<a href="'.$facebook_url.'">
<img src="'.$key['pic_square'].'" />
</a>
<span>
<a href="'.$facebook_url.'">
<h2>'.$key['name'].'</h2>
</a>
<p class="time">'.$start_time.'</p>
<p class="time">'.$end_time.'</p>
</span>
</div>
';
}
echo $html;
}
نصائح أخرى
يمكنك استخدام FQL. مجرد استخدام المبدع باعتباره شرط مكانك لا يعمل لأن الخالق غير قابل للفهرسة. ومع ذلك ، فإن الحل البديل هو تضمين شرط قابل للفهرسة ورميه في الخالق بالإضافة إلى ذلك. السابق:
حدد EID ، الاسم ، الموافقة المسبقة عن علم ، منشئ من الحدث حيث العيد في (حدد EID من Event_member حيث UID = 12345) و Creator = 12345
هذه واحدة من هؤلاء "لا توجد طريقة جيدة للوصول إلى هناك من هنا". لا يمكنك استخدام FQL ، لأن عمود المبدع لم يتم فهرسة. إن أفضل حل يمكنني التفكير فيه في الوقت الحالي هو استخدام API Graph للاستعلام عن اتصال الأحداث بالمبدع ، وتصفية أي أحداث ليست منشئها. لن يكون هذا فعالًا بشكل رهيب ، حيث ستقوم بتنزيل معلومات حول جميع أحداث المستخدم ، حتى تلك التي لم ينشئوها. لذلك ، كنت أقوم بتجربة تقسيمها إلى استفسارين:
graph.facebook.com/[user_id]/events?fields=id,owner&limit=1000
وبعد ذلك بمجرد تصفية جميع الأحداث التي لم ينشئوها:
graph.facebook.com/?ids=[event_ids for the user's events]
الإجابة من ZeChDC مثالية ، لكنني كنت بحاجة فقط لإضافة strtotime من أجل العمل.
$start_time = date('M j, Y \a\t g:i A', strtotime($key['start_time']));
$end_time = date('M j, Y \a\t g:i A', strtotime($key['end_time']));