Graph API - Get events by owner/creator

半城伤御伤魂 提交于 2019-12-02 18:26:19
zechdc

I basically used the FQL that @jhchen provided. However, it took me about 6 hours to figure out how to use that FQL. So I figured, I would provide you a working script. It's not perfect so please update it if you find a bug.

  1. Download Facebooks PHP SDK
  2. Add YOUR_APP_ID
  3. Add YOUR_APP_SECRET
  4. Add PAGE_ID
  5. Make changes to the FQL statement as you see fit. FQL Documentation

Other than that you should be good to go. Also, I set the default timezone to America/Los_Angeles. This will probably cause problems for some of you, if anyone has a better way to handle the timezones please let me know.

PHP Code:

<?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;
}

You can use FQL. Just using the creator as your where clause does not work because the creator is not indexable. However a workaround is to include an indexable where clause and throw in the creator in addition. Ex:

SELECT eid, name, pic, creator FROM event WHERE eid IN (SELECT eid FROM event_member WHERE uid=12345) AND creator=12345

This is one of those "there's no good way to get there from here" problems. You can't use FQL, because the creator column isn't indexed. The best solution I can think of at the moment would be using the Graph API to query the events connection of the creator, and filtering out any events that they aren't the creator for. This won't be terribly efficient, since you'll be downloading info about all the user's events, even the ones they didn't create. So, I'd experiment with breaking it down into two queries:

graph.facebook.com/[user_id]/events?fields=id,owner&limit=1000

and then once you've filtered out all the events they didn't create:

graph.facebook.com/?ids=[event_ids for the user's events]

The answer from zechdc is perfect but I just needed to add strtotime for the start_time to work.

$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']));
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!