2010-06-08 66 views
13

用Facebook Graph API获取单个配置文件创建的所有事件列表有没有办法?我们的客户创建了一系列活动,我们希望将其全部列出。我说他们只需要确定自己要参加这个活动,因为那样我就可以轻松地取得profileId参加的活动列表,但是我很好奇是否有其他方法。也许是一个FQL查询?他们看起来需要对主键进行查询。那么,如果这是做到这一点的方式,FQL查询会是什么样子?图形API - 获取所有者/创建者的活动

回答

16

我基本上使用@jhchen提供的FQL。然而,我花了大约6个小时才弄清楚如何使用FQL。所以我想,我会给你一个工作脚本。这并不完美,所以如果发现错误请更新它。

  1. 下载Facebooks PHP SDK
  2. 添加YOUR_APP_ID
  3. 添加YOUR_APP_SECRET
  4. 添加PAGE_ID
  5. 变更这个FQL说法,你认为合适。 FQL Documentation

除此之外,你应该很好去。另外,我将默认时区设置为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; 
} 
+1

我不再需要这样做,也没有时间去测试这个,但如果你花了6个小时,我会假设它是有效的。谢谢! – jwynveen 2011-11-18 20:25:11

+1

它的工作原理(fql - 试用红宝石),谢谢! – 2012-11-06 21:00:41

+0

你不能使用事件本身的时区字段吗? – Trefex 2013-05-27 21:25:16

2

这是其中一种“没有好的方法从这里出现”的问题。您不能使用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] 
+0

如jcmoney所述,您可以使用FQL和where eid in(从event_member中选择eid,其中包含uid = <...>)子句。 – 2010-10-05 09:25:15

12

您可以使用FQL。只是使用创建者作为where子句不起作用,因为创建者不可索引。然而,一种解决方法是包含一个可索引的where子句并引入创建者。例:

SELECT EID,名称,PIC,创作者FROM事件WHERE EID IN(SELECT EID FROM event_member其中uid = 12345)和Creator = 12345

0

从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'])); 
相关问题