سؤال

هل هناك طريقة مع واجهة برمجة تطبيقات Graph Facebook للحصول على قائمة بجميع الأحداث التي تم إنشاؤها بواسطة ملف تعريف واحد؟ يقوم عميلنا بإنشاء مجموعة من الأحداث ونريد سحب قائمة منها جميعًا. قلت إنه سيتعين عليهم فقط التأكد من أنهم يضعون أنفسهم لحضور الحدث ، لأنه بعد ذلك يمكنني بسهولة سحب قائمة الأحداث التي يحضرها ProfileId ، لكنني فضولي إذا كانت هناك طريقة أخرى. ربما استعلام FQL؟ إنهم يتطلعون إلى طلب استعلام على المفتاح الأساسي. وماذا سيبدو هذا استعلام FQL إذا كانت هذه هي الطريقة للقيام بذلك ؟؟

هل كانت مفيدة؟

المحلول

لقد استخدمت أساسًا FQL أن jhchen المقدمة. ومع ذلك ، استغرق الأمر مني حوالي 6 ساعات لمعرفة كيفية استخدام ذلك FQL. لذلك كنت أحسب ، سأقدم لك نص عمل. إنه ليس مثاليًا ، لذا يرجى تحديثه إذا وجدت خطأ.

  1. تحميل Facebooks PHP SDK
  2. يضيف YOUR_APP_ID
  3. يضيف YOUR_APP_SECRET
  4. يضيف PAGE_ID
  5. إجراء تغييرات على 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']));
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top