Pergunta

Existe uma maneira da API do gráfico do Facebook para obter uma lista de todos os eventos criados por um único perfil? Nosso cliente cria um monte de eventos e queremos puxar uma lista de todos. Eu disse que eles teriam que apenas garantir que eles estivessem participando do evento, porque então eu posso facilmente puxar a lista de eventos em que o perfil está participando, mas estou curioso para saber se houver outra maneira. Talvez uma consulta de FQL? Eles procuram exigir uma consulta na chave primária. E como seria essa consulta FQL se essa é a maneira de fazê -lo?

Foi útil?

Solução

Eu basicamente usei o FQL que @jhchen forneceu. No entanto, levei cerca de 6 horas para descobrir como usar isso FQL. Então, imaginei, eu forneceria um script de trabalho. Não é perfeito, então atualize -o se encontrar um bug.

  1. Download Facebooks PHP SDK
  2. Adicionar YOUR_APP_ID
  3. Adicionar YOUR_APP_SECRET
  4. Adicionar PAGE_ID
  5. Fazer alterações no FQL Declaração como você achar adequado. Documentação FQL

Fora isso, você deve estar pronto. Além disso, eu defino o fuso horário padrão para America/Los_Angeles. Isso provavelmente causará problemas para alguns de vocês, se alguém tiver uma maneira melhor de lidar com os fusos horários, entre em contato.

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

Outras dicas

Você pode usar o FQL. Apenas usando o Criador como a sua cláusula onde não funciona porque o criador não é indexível. No entanto, uma solução alternativa é incluir uma cláusula indexável e jogar o Criador, além disso. Ex:

Selecione Eid, Nome, Pic, Criador do Evento em que Eid em (Selecione Eid de Event_member onde UID = 12345) e Creator = 12345

Este é um daqueles problemas "não há uma boa maneira de chegar lá daqui". Você não pode usar o FQL, porque a coluna do criador não é indexada. A melhor solução que eu consigo pensar no momento seria usar a API do gráfico para consultar a conexão de eventos do Criador e filtrar os eventos para os quais eles não são o criador. Isso não será terrivelmente eficiente, já que você estará baixando informações sobre todos os eventos do usuário, mesmo os que eles não criaram. Então, eu experimentaria dividi -lo em duas consultas:

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

E depois que você filtrou todos os eventos que eles não criaram:

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

A resposta do ZechDC é perfeita, mas eu só precisava adicionar o strtotime para o start_time funcionar.

$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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top