Facebook Graph API 有没有办法获取由单个配置文件创建的所有事件的列表?我们的客户创建了一堆事件,我们想要提取所有事件的列表。我说他们只需要确保他们将自己设置为参加活动,因为这样我就可以轻松地拉出 profileId 参加的活动列表,但我很好奇是否还有其他方法。也许是 FQL 查询?他们看起来需要对主键进行查询。如果这样做的话,FQL 查询会是什么样子?
4 回答
我基本上使用了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。仅仅使用创建者作为你的 where 子句是行不通的,因为创建者是不可索引的。但是,一种解决方法是包含一个可索引的 where 子句并另外添加创建者。前任:
SELECT eid, name, pic, creator FROM event WHERE eid IN (SELECT eid FROM event_member WHERE uid=12345) AND creator=12345
这是“没有好办法从这里到达那里”的问题之一。您不能使用 FQL,因为创建者列没有被索引。目前我能想到的最好的解决方案是使用 Graph API 来查询创建者的事件连接,并过滤掉他们不是创建者的任何事件。这不会非常有效,因为您将下载有关所有用户事件的信息,即使是他们没有创建的事件。因此,我将尝试将其分解为两个查询:
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 工作。
$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']));