2010-06-08 71 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']));