Pregunta

¿Hay alguna manera con la API de Facebook Graph para obtener una lista de todos los eventos creados por un único perfil? Nuestro cliente crea un montón de eventos y queremos sacar una lista de todos ellos. Me dijeron que sólo hay que asegurarse de que se han fijado para ser asistentes al evento, porque entonces puedo tirar fácilmente de la lista de eventos que profileId asiste, pero tengo curiosidad si hay otra manera. Tal vez una consulta FQL? Se ven a requerir una consulta sobre el embargo de clave principal. Y lo que haría que la mirada consulta FQL como si esa es la manera de hacerlo ??

¿Fue útil?

Solución

Básicamente utiliza la FQL que proporcionó @jhchen. Sin embargo, me tomó alrededor de 6 horas para encontrar la manera de utilizar esa FQL. Así que pensé, me gustaría ofrecerle un guión de trabajo. No es perfecto, así que por favor actualizarlo si se encuentra un error.

  1. Facebooks PHP SDK
  2. Añadir YOUR_APP_ID
  3. Añadir YOUR_APP_SECRET
  4. Añadir PAGE_ID
  5. realizar cambios en la declaración FQL como mejor le parezca. FQL Documentación

Aparte de eso usted debe ser bueno para ir. Además, me puse la zona horaria predeterminada para America/Los_Angeles. Esto probablemente causar problemas para algunos de ustedes, si alguien tiene una mejor manera de manejar las zonas horarias por favor hágamelo saber.

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

Otros consejos

Se puede utilizar FQL. Simplemente usando el creador como su cláusula where no funciona debido a que el creador no es indexable. Sin embargo, una solución consiste en incluir una cláusula where indexable y un tiro en el creador de adición. Ej:

eid SELECT, nombre, imagen, creador DE evento donde IN Eid (Eid SELECT FROM event_member DONDE uid = 12345) y creador = 12345

Este es uno de los que "no hay una buena manera de llegar allí desde aquí" problemas. No se puede utilizar FQL, porque la columna creador no está indexado. La mejor solución que se me ocurre en este momento estaría utilizando la API de gráficos para consultar la conexión eventos del creador, y el filtrado de eventos que no son para el creador. Esto no será muy eficiente, ya que vas a 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 crearon:

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

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

$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']));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top