Programação WEB é à Quinta-feira!

27 Comentários

Por Pedro Peixoto para o PPLWARE
Trabalhar com APIs do Facebook usando o PHP

Esta semana, enquanto projectava um novo site para um festival musical, achei que seria interessante ligar a página ao facebook do evento de modo a interagir em tempo real criando uma página mais dinâmica. Depois de desenvolver a funcionalidade pretendida, e verificando que o código era bastante simples, achei que seria algo interessante para falar esta semana. Fazemos por isso uma pausa no jQuery e vamos exemplificar em PHP como trabalhar com as APIs do facebook.

web_00

A ideia era simples, importar as imagens de todos os utilizadores que iriam participar no evento e apresenta-las como fundo da página. A maneira mais simples de interagir com o facebook é através da Graph API. Esta API permite-nos aceder a objectos do facebook (pessoas, páginas, eventos, …) de forma rápida e simples através de um pedido http à página https://graph.facebook.com/ID, sendo que o ID é um identificador único para páginas, utilizadores e eventos. Como resposta, são devolvido em JSON (ver artigo anterior) os dados referentes ao objecto pedido.

“All objects in Facebook can be accessed in the same way:

Para fazer o primeiro teste vamos abrir directamente no browser o pedido para os nossos dados pessoais. Como podemos verificar na imagem de baixo os campos públicos do meu perfil são devolvidos sem ser necessária qualquer autenticação.

clip_image002

De seguida vamos fazer este pedido em PHP de forma a poder-mos fazer um script dinâmico. A maneira mais simples é usar o file_get_contents() que devolve o conteúdo de um ficheiro dado por parâmetro, neste caso passamos o endereço do pedido e guardamos numa variável a resposta JSON.


A resposta é semelhante:

clip_image004

Vamos agora fazer o mesmo para o evento:


Recebemos os dados referentes ao evento:

clip_image006

De facto a Graph API é muito simples de usar e permite-nos obter os dados gerais de todos os objectos. No entanto, no nosso caso queremos ir mais longe e obter os participantes do evento. Vamos por isso recorrer à API do facebook, usando o objecto “events” e a sua função “getMembers”. No entanto para aceder a um nível mais profundo necessitamos de um access token, isto é uma chave que garante temporariamente a conexão autenticada ao facebook.

Para obtermos esta chave necessitamos de autenticar o utilizador ou a aplicação, uma vez que pretendemos que tudo seja feito silenciosamente sem pedir qualquer password ao utilizador, vamos optar por autenticar a aplicação. Para tal necessitamos de criar uma nova aplicação no facebook e usar as chaves que nos são fornecidas.

clip_image008

Vamos definir no código estas constantes, e de seguida efectuamos o pedido de autenticação:


Na resposta recebemos o nosso access_token:
clip_image010

Agora que já temos uma chave de autenticação já podemos usar a função events.getMembers da API do facebook. Tudo é feito da mesma forma mas adicionando à url do pedido o access_token que nos foi devolvido anteriormente.

Aqui fica o código completo:


E o resultado, que basicamente é um array que nos devolve os ids dos utilizadores separados por aqueles que vão participar, talvez vão, não vão, e não responderam.

clip_image012

De seguida basta fazer a interpretação do JSON como já aprendemos (ver artigo anterior) e colocar as fotografias.

Relembrar que para aceder a uma fotografia do utilizador através do seu id usamos o seguinte endereço:

https://graph.facebook.com/<iduser>/picture

Teremos então de acrescentar as seguintes linhas de forma a apresentar a foto de todos os que vão participar:

$dados=json_decode($httprequest,true);    
 foreach($dados['attending'] as $dado)    	
	echo '';

E pronto, está explicado o básico do uso das APIS do facebook. Podem ver o resultado final do site em www.avilaemfesta.com. Agora é dar asas à imaginação e ler, aprender e programar.

Partilhar:
Tags:

Comentários

27

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

  1. Avatar de Mário Passos
    Mário Passos

    Um Bom post e algo bastante interessante, no inicio pensei que fosse algo complicado mas pelos vistos e algo fácil de se fazer desde que se entenda o código aplicado.

    E gostei da ideia que utilizou na página ficou porreiro, Parabéns

    1. Avatar de Pedro Peixoto
      Pedro Peixoto

      Obrigado. Também pensei que fosse mais complicado, mas realmente existem maneiras mais complicadas, a documentação está um pouco dispersa mas desta forma é relativamente fácil.

      1. Avatar de Mário Passos

        Boas, eu neste momento estava a tentar fazer algo do mesmo genero mas desta vez é com uma página e não com um evento do qual eu não estou a conseguir obter o array com os dados das pessoas que gostam da página se vocês souberem como o fazer, agradecia.

  2. Avatar de Pedro Pinto

    Excelente ideia e artigo Pedro.

    E claro, conta comigo para a festa !!!!

    Abraço e parabéns pelo artigo

    1. Avatar de Pedro Peixoto
      Pedro Peixoto

      Com todo o gosto. Cá te espero! 🙂

  3. Avatar de MRodrigues
    MRodrigues

    Gostei. Extremamente simples e directo 🙂

    1. Avatar de Pedro Peixoto
      Pedro Peixoto

      Também foi isso que me impressionou. 😉

  4. Avatar de Pedro A.
    Pedro A.

    Muito bom, só não gostei de uma coisa na página da festa: tenho de fazer scrool right para ver o resto da página.

    1. Avatar de Pedro Peixoto
      Pedro Peixoto

      Pois, certamente tens uma resolução mais pequena do que previ, no entanto a parte que é cortada é precisamente a do facebook, certo? É uma àrea que serve precisamente para “encher” a página. De qualquer forma tenho de fazer esse reparo. 🙂 Obrigado pelo alerta.

      1. Avatar de Luís Santos
        Luís Santos

        Mesmo sem esse reparo conseguis-te fazer um bom trabalho tanto na página como no artigo.

        Parabéns pela originalidade da ideia 😀

        1. Avatar de Silva
          Silva

          conseguiste e não “conseguis-te”

          😉

      2. Avatar de Pedro A.
        Pedro A.

        Sim, é a parte do Facebook. A minha resolução é 1280×800, não é assim tão pequena…

  5. Avatar de Paulo Brinca

    Excelente dica e parabéns pelo trabalho.

    Creio que tens info que não deverias ter dado…

    No código completo tens “define(“xxx”, ‘c2eed6ac6166fb6e7cdffc55417a9046’);”

    Os “xxx” estão no local errado…

    1. Avatar de Pedro Peixoto
      Pedro Peixoto

      Sim Paulo, realmente foi uma falha minha, queria ter tapado a chave, de qualquer maneira não tem grande importância. A aplicação nem sequer está submetida no facebook. É so mesmo para ter acesso ao evento. Mas podia ter corrido mal… 😀

  6. Avatar de André
    André

    Parabéns pelo artigo! Está simples mas perceptível, muito bom 🙂 Aguardo por uma “Parte II” :p Abraços

    1. Avatar de Pedro Peixoto
      Pedro Peixoto

      Muito obrigado… O que querias ver na Parte II?

  7. Avatar de Ricardo
    Ricardo

    Pessoal da lajeosa por aqui?! Força aí na festa vizinhos!

    1. Avatar de Pedro Peixoto
      Pedro Peixoto

      😉 Então de onde és tu?

  8. Avatar de Ricardo
    Ricardo

    Não sou “vizinho” mas é quase, tenho família em Teomil e amigos na lajeosa, sou de Beijós 🙂

  9. Avatar de Nuno
    Nuno

    Muito bom, parabéns 😉

  10. Avatar de Filipe Madeira
    Filipe Madeira

    Viva, antes de mais parabéns pelo post!

    Alguém me sabe dizer se é possível importar oo número de gostos das fotos de uma página do facebook de modo a criar um gráfico que actualize automaticamente?

    Abraços e bom trabalho!

  11. Avatar de Frank Davis
    Frank Davis

    Olá, eu no browser consigo abrir a minha graph e ter acesso à informação. Mas quando uso o file_get_contents, esta função não devolve nada. Alguém sabe qual o problema? Obrigado

    1. Avatar de Pedro Peixoto
      Pedro Peixoto

      Ola Frank, activa os errrors, warnings e notices nas definições do PHP e vê quais os erros apresentados.

      Cumps

  12. Avatar de Nanda
    Nanda

    Com esses codigos consigo ver albuns bloqueados no face,? njks

    1. Avatar de Pedro Peixoto
      Pedro Peixoto

      Ola Nanda, o Graph API deverá obdecer aos níveis de privacidade definidos, consegues aceder a um album bloqueado se conseguires uma chave token com essas permissões… Ou seja, é como se necessitasses de alguem que tenha acesso a esses albuns.

  13. Avatar de Max Vanderbil
    Max Vanderbil

    Olá Pedro Peixoto, gostei muito da sua dica, inclusive fiz ums teste… muito bom, mas gostaria de saber se poderia me ajudar, eu queria capturar apenas o id de um usuário do facebook em PHP daí eu concluiria o meu projeto

    1. Avatar de Pedro Peixoto
      Pedro Peixoto

      Olá Max, no primeiro exemplo que mostro tem a informação do id do utilizador… É só descarregar o JSON num array e já tens o id. No artigo também tenho link para o artigo que fala do json no PHP.