2010-06-08 8 views
13

Gibt es einen Weg mit der Facebook Graph-API, um eine Liste aller Ereignisse zu erhalten, die von einem einzelnen Profil erstellt wurden? Unser Kunde erstellt eine Reihe von Ereignissen und wir möchten eine Liste von allen erstellen. Ich sagte, dass sie nur sicherstellen müssten, dass sie sich dazu entschlossen, an der Veranstaltung teilzunehmen, denn dann kann ich die Liste der Ereignisse, an denen profileId teilnimmt, leicht durchziehen, aber ich bin neugierig, ob es einen anderen Weg gibt. Vielleicht eine FQL-Abfrage? Sie sehen jedoch eine Abfrage des Primärschlüssels voraus. Und wie würde diese FQL-Abfrage aussehen, wenn das der richtige Weg ist?Graph-API - Ereignisse nach Besitzer/Ersteller abrufen

Antwort

16

ich im Grunde die FQL verwendet, die bereitgestellt @jhchen. Es dauerte jedoch ungefähr 6 Stunden, bis ich herausgefunden hatte, wie ich das FQL verwenden konnte. Also dachte ich, ich würde dir ein funktionierendes Skript zur Verfügung stellen. Es ist nicht perfekt, also bitte aktualisieren Sie es, wenn Sie einen Fehler finden.

  1. Herunterladen Facebooks PHP SDK
  2. hinzufügen YOUR_APP_ID
  3. hinzufügen YOUR_APP_SECRET
  4. hinzufügen PAGE_ID
  5. Änderungen an der Erklärung FQL Make wie Sie sehen, passen. FQL Documentation

Ansonsten sollten Sie gut zu gehen. Außerdem habe ich die Standardzeitzone auf festgelegt. Dies wird wahrscheinlich für einige von euch Probleme bereiten. Wenn jemand einen besseren Umgang mit den Zeitzonen hat, lasst es mich wissen.

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; 
} 
+1

Ich brauche das nicht mehr und habe keine Zeit, das zu testen, aber ich gehe davon aus, dass es funktioniert, wenn du 6 Stunden damit verbracht hast. Vielen Dank! – jwynveen

+1

Es funktioniert (die fql - in Rubin versucht), danke! –

+0

Kann das Zeitzonenfeld nicht vom Ereignis selbst verwendet werden? – Trefex

2

Dies ist einer dieser "es gibt keinen guten Weg, um von hier aus" Probleme zu bekommen. Sie können FQL nicht verwenden, da die Erstellerspalte nicht indiziert ist. Die beste Lösung, die ich mir im Moment vorstellen kann, ist die Verwendung der Graph-API, um die Ereignisverbindung des Erstellers abzufragen und alle Ereignisse herauszufiltern, für die sie nicht der Ersteller sind. Dies wird nicht sehr effizient sein, da Sie Informationen über alle Ereignisse des Benutzers herunterladen werden, auch die, die sie nicht erstellt haben. So würde ich experimentieren sie mit Einbruch in zwei Abfragen nach unten:

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

und dann, wenn Sie gefiltert haben Sie alle Ereignisse, die sie nicht schaffen:

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

Sie können FQL verwenden, mit denen eid in (wählen eid von event_member wo uid = <...>) Klausel, wie von jcmoney beschrieben. –

12

Sie können FQL verwenden. Die Verwendung des Erstellers als Ihre where-Klausel funktioniert nicht, da der Ersteller nicht indexierbar ist. Eine Problemumgehung besteht jedoch darin, eine indexierbare where-Klausel einzufügen und den Ersteller zusätzlich einzublenden. Ex:

SELECT eid, name, pic, Schöpfer FROM Ereignis WHERE eid IN (SELECT eid FROM event_member WHERE uid = 12345) und Schöpfer = 12345

0

Die Antwort von zechdc perfekt, aber ich brauche nur strtotime für die Startzeit hinzufügen zu arbeiten.

$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'])); 
Verwandte Themen