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

Asked

Viewed 336 times

4

I’m developing a website where it should show how many people have confirmed their presence at an existing event on facebook. According to the Graph API documentation, in order for me to verify this data I must 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 get that 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 for search because in the event itself (through the page of the same) I can download his data into a calendar file with all the people who confirmed it. Does anyone know where the problem is?

2 answers

4

The reply from @Felipeavelar is correct, it was not included the 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 deliberately avoid repeating here) on how to create your Facebook application and how to simulate the page locally.

The HTML and Javascript files below illustrate a solution to count (and list) users who have indicated participation in a public event (or your profile, since you have the access token). To illustrate, I used the event of Sbgames 2014.

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 + ")");
    }
}

Upshot

inserir a descrição da imagem aqui

2


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

  • 2

    Excellent Felipe, did not know that this statistical information had been separated as it works today with the cover of the event. Thank you.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.