2010-06-08 22 views
13

¿Hay alguna manera con la API Graph de Facebook para obtener una lista de todos los eventos creados por un único perfil? Nuestro cliente crea varios eventos y queremos obtener una lista de todos ellos. Dije que solo tendrían que asegurarse de que se prepararan para asistir al evento, porque entonces puedo sacar fácilmente la lista de eventos a los que asiste el perfil, pero tengo curiosidad de saber si hay otra manera. Tal vez una consulta FQL? Sin embargo, buscan requerir una consulta en la clave principal. ¿Y cómo sería esa consulta FQL si esa es la manera de hacerlo?Graph API - Obtener eventos por propietario/creador

Respuesta

16

que utilizan básicamente la FQL que proporciona @jhchen. Sin embargo, me llevó aproximadamente 6 horas descubrir cómo usar ese FQL. Así que pensé que podría proporcionarle un script en funcionamiento. No es perfecto, por favor actualícelo si encuentra un error.

  1. Descargar Facebooks PHP SDK
  2. Añadir YOUR_APP_ID
  3. Añadir YOUR_APP_SECRET
  4. Añadir PAGE_ID
  5. realizar cambios en el comunicado FQL como mejor le parezca. FQL Documentation

Aparte de eso, deberías estar listo para partir. Además, establecí la zona horaria predeterminada en America/Los_Angeles. Esto probablemente cause problemas para algunos de ustedes, si alguien tiene una mejor manera de manejar los husos horarios, por favor avíseme.

Código 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

Ya no necesito hacer esto y no tengo tiempo para probar esto, pero supongo que funciona si has pasado 6 horas. ¡Gracias! – jwynveen

+1

Funciona (el fql - probado en ruby), ¡gracias! –

+0

¿No puedes usar el campo de la zona horaria del evento en sí? – Trefex

2

Este es uno de esos "no hay una buena forma de llegar hasta allí". No puede usar FQL porque la columna del creador no está indexada. La mejor solución que se me ocurre en este momento sería utilizar Graph API para consultar la conexión de eventos del creador y filtrar los eventos para los que no son el creador. Esto no será terriblemente eficiente, ya que descargará información sobre todos los eventos del usuario, incluso los que no crearon. Por lo tanto, me gustaría experimentar con lo descomponen en dos consultas:

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

y luego una vez que haya que cumplan con todos los eventos que no he creado:

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

Puede utilizar FQL, con un eid donde en (seleccione eid de event_member donde uid = <...>) cláusula, como se describe por jcmoney. –

12

Usted puede utilizar FQL. Solo usar el creador como su cláusula Where no funciona porque el creador no es indexable. Sin embargo, una solución alternativa es incluir una cláusula where indexable y agregar el creador además. Ej:

SELECT Eid, nombre, imagen, creador de un evento DONDE Eid IN (SELECT Eid DE DONDE event_member uid = 12345) y creador = 12345

0

La respuesta de zechdc es perfecto, pero yo sólo tenía que añadir strtotime para la hora_inicial a trabajar.

$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'])); 
Cuestiones relacionadas