Graph API - Obtener eventos por propietario / creador
-
25-09-2019 - |
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 ??
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.
- Facebooks PHP SDK
- Añadir
YOUR_APP_ID
- Añadir
YOUR_APP_SECRET
- Añadir
PAGE_ID
- 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']));