How to check the number of users who accepted an event on facebook using the Graph API

4

I'm developing a website where it should show the number of people who have confirmed their presence at an existing facebook event. According to the Graph API documentation, so I can check this data I should use the following code:

function getConfirm(a){
  FB.api(
    '/'+a,
    {access_token:'meu token de acesso'},
    function (i) {
      console.log(i.attending_count);
    }
  );
}

where a is the event id that I will fetch this information from. The problem is that when I try to bring the data I can not return any amount of users, and this type of information as far as I know is released to search because in the event itself (through the page of the same) I can download the data from him in a calendar file with all the people who have confirmed it. Does anyone know where the problem is?

    
asked by anonymous 25.07.2014 / 07:49

2 answers

2

From what I read in documentation , the correct use would be with /a/attending , where a is {event-id} . This will return you a list of User objects, to know the number of people, just count the number of objects.

    
25.07.2014 / 13:00
4

The answer from @FelipeAvelar is correct, it did not include attending at the end of the query.

Anyway, I've prepared an example with based on my other answer . There is important additional information (which I will purposely avoid repeating here) about how to create your Facebook application and how to simulate the page locally.

The HTML and Javascript files below illustrate a solution for counting (and listing) users who indicated participation in a public event (or your profile, since you have access token ). To illustrate, I used the SBGames 2014 event .

HTML file

<html>

  <head>
    <title>Teste de Participantes</title>
    <script type="text/javascript" src="facebook.js"></script>
  </head>

  <body>

    <!--
        Inicialização assíncrona da biblioteca javascript para o Facebook
        (conforme documentação: https://developers.facebook.com/docs/javascript/quickstart),
        com login automático e obtenção do token de acesso.
    -->
    <div id="fb-root"></div>
    <script>

        /** Armazena o token de acesso */
        var gsAccessToken = "";

        /**
         * Função de inicialização e login no Facebook.
         * NOTA: Essa função é apenas necessária para acesso a recursos com privacidade controlada
         * (que requer o uso do token de acesso).
         * Para ESTE teste (com o evento público), essa função pode ser simplesmente
         * comentada (ou removida) que a consulta funciona da mesma forma.
         */
        window.fbAsyncInit = function() {

            // Inicio da biblioteca do FB (com definição do ID da página Web)
            FB.init({
                appId      : '1401642456751870', // ID da página Web criada no App Center
                status     : true,
                xfbml      : true
            });

            // Requisição ao usuário do login no FB
            FB.login(function(oResponse) {
                if(oResponse.authResponse) {
                    gsAccessToken = FB.getAuthResponse()['accessToken'];
                    console.log('Token de acesso = '+ gsAccessToken);
                    FB.api('/me', function(oResponse) {
                      console.log('Bem-vindo, ' + oResponse.name + '!');
                    });
                }
                else
                    console.log('O usuário cancelou o login ou não autorizou completamente.');
            }, {scope: ''});
        };
        // FIM DA FUNÇÃO DE INICIALIZAÇÃO E LOGIN (que pode ser comentada se desejado)

        /*
         * Carregamento assíncrono do arquivo js com a api do FB
         * (note o uso de 'pt_BR' na URL, para janelas de login/permissão localizadas).
         */
        (function(d, s, id){
            var js, fjs = d.getElementsByTagName(s)[0];
            if (d.getElementById(id)) {return;}
            js = d.createElement(s); js.id = id;
            js.src = "//connect.facebook.net/pt_BR/all.js";
            fjs.parentNode.insertBefore(js, fjs);
        }(document, 'script', 'facebook-jssdk'));
    </script>

    <!-- Função de callback para exibição do total de likes. -->
    <script>
        function displayParticipants(iParticipants) {
            alert("Participantes no Evento: " + iParticipants);
        }
    </script>

    <!--
        Testa com o evento do SBGames 2014:
        https://www.facebook.com/events/648697541847684/
        O ID é facilmente obtido da própria URL acima.
    -->
    <button onclick="queryParticipants('648697541847684', displayParticipants);">Consulta Participantes do SBGames 2014</button>

  </body>
</html>

Javascript File

/**
 * Função de consulta dos participantes de um evento do Facebook.
 * @param sResourceID Identificador do Facebook para o evento.
 * @param oCallback Função de callback com a assinatura function(iParticipants) a ser chamada com o resultado
 * da consulta.
 */

function queryParticipants(sResourceID, oCallback) {

    var oCounter = { participants: 0 };

    // Consulta o número de participantes do evento
    FB.api("/" + sResourceID + "/attending",
        function(oResponse) {
            console.log(oResponse);
            outputParticipants(oResponse.data);
            queryResponse(oCounter, oResponse.data.length, oResponse.paging.next, oCallback);
        }
    );
}

/**
 * Função recursiva para contagem acumulada dos participoantes em múltiplas páginas.
 * @param oCounter Objeto para manter a contagem dos participantes entre as chamadas.
 * @param iParticipants Número de participantes da atualização da paginação atual recebida do Facebook.
 * @param sNext String com o link para a próxima paginação ou null se não existir mais paginações.
 * @param oCallback Função de callback com a assinatura function(iParticipants) a ser chamada com o resultado
 * da consulta.
 */
function queryResponse(oCounter, iParticipants, sNext, oCallback) {
    oCounter.participants += iParticipants;

    if(sNext != null) {
        FB.api(sNext,
            function(oResponse) {
                outputParticipants(oResponse.data);
                queryResponse(oCounter, oResponse.data.length, oResponse.paging.next, oCallback);
            }
        );
    }
    else
        oCallback(oCounter.participants);
}

/**
 * Função utilitária para 'imprimir' no console os nomes (e IDs) dos participantes do evento.
 * @param aData Array com os objetos de usuários que indicaram participação no evento.
 */
function outputParticipants(aData) {
    for(var i = 0; i < aData.length; ++i) {
        var oUser = aData[i];
        console.log(oUser.name + "(" + oUser.id + ")");
    }
}

Result

    
25.07.2014 / 15:33