Facebook sdk, Trabalhando com Facebook Query Language (FQL)

Posted on julho 27, 2013. Filed under: Facebook, PHP | Tags:, , |

Introdução

O Facebook, através do FQL, permite consultar dados no Graph API usando um estilo próximo ao conhecido SQL. Neste artigo vamos aprender como executar, elaborar e testar consultas na plataforma do Facebook (FQL) através do SDK para PHP ou Javascript.

Vamos citar alguns exemplos bem interessantes de FQL além de como usar a ferramenta de apoio para desenvolvedores chamada Graph API Explorer disponibilizado pelo facebook para elaborar e testar consultas FQL

  1. Executando FQL através do SDK para PHP e Javascript
  2. Neste tópico vamos aprender como executar uma FQL tanto através do SDK para PHP como pelo SDK para Javascript. Como apoio, vamos usar a seguinte consulta FQL:

    SELECT friend_count FROM user WHERE uid = me()
    (Simplesmente consulta a quantidade de amigos que o usuário do facebook possui)

    Executando através de PHP:

    Exemplo de como executar FQL através do SDK para PHP:

    $result = $facebook->api(array(
    		"method" => "fql.query",
    		"query"  => "SELECT friend_count FROM user WHERE uid = me()",
    ));
    
    if($result) {
    	echo "Quantidade de amigos: {$result[0]['friend_count']}";
    }
    

    Exemplo em PHP, completo funcional:

    Exemplo completo e funcional:
    (Basta apenas parametrizar o appId e secret)

    <?php
    // incluir a lib fo facebook
    require 'facebook-php-sdk-master/src/facebook.php';
    
    // Cria a instancia da aplicacao, informando o appid e o secret
    $facebook = new Facebook(array(
      'appId'  => '',
      'secret' => '',
    ));
    
    // obtem o id do usuario
    $user = $facebook->getUser();
    
    if ($user) { // usuario logado
            try {
    	
            	// Obtem dados do usuario logado
    	        $user_profile = $facebook->api('/me');
    
    			$result = $facebook->api(array(
    				"method" => "fql.query",
    				"query"  => "SELECT friend_count FROM user WHERE uid = me()",
    			));
    	
    			if($result) {
    				echo "Quantidade de amigos: {$result[0]['friend_count']}";
    			}
    
            } catch (FacebookApiException $e) {
                    var_dump($e);
                    $user = null;
            }
    } else {
            // usuario nao logado, solicitar autenticacao
            $loginUrl = $facebook->getLoginUrl();
    		header("Location: $loginUrl");
    }
    

    Executando através de Javascript:

    Exemplo de como executar FQL através do SDK para Javascript:

    FB.api({
        method: 'fql.query',
        query:  'SELECT friend_count FROM user WHERE uid = me()'
    }, function(resp) {
        if (resp.length) {
    		alert(resp[0].friend_count);
        }
    });
    

    Exemplo em Javascript, completo funcional:

    Exemplo completo e funcional:
    (Basta apenas parametrizar o appId)

    <!doctype html>
    <html lang="pt-BR">
    <head>
    	<meta charset="utf-8">
    	<title>Teste App Facebook</title>
    
    	<script src="//connect.facebook.net/pt_BR/all.js"></script>
    	<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    
    <script>
    FB.init({
          appId : '',
          status: true, cookie: false, xfbml: false
    });
    
    
    var FBCountFriends = function() {
    	FB.api({
            	method: 'fql.query',
                   	query:  'SELECT friend_count FROM user WHERE uid = me()'
            }, function(resp) {
            	if (resp.length) {
    				alert(resp[0].friend_count);
                } 
            });
    }
    
    // onload
    jQuery(document).ready(function() {
    
    	FB.getLoginStatus(function(response) {
            	if (response.status === 'connected') {
    				FBCountFriends();
    	        } else {
    				FB.login(function(response) {
    			        	if (response.authResponse) {
    							FBCountFriends();
    				        }
    			    });
    		}
    	})
    });
    </script>
    </head>
    <body>
    </body>
    </html>
    
  3. Testando consultas FQL através do Graph API Explorer
  4. O Facebook disponibiliza uma ferramenta de apoio à desenvolvedores muito útil, chamada Graph API Explorer. Através dela é possível testar e elaborar suas FQLs. Através dessa ferramenta você pode habilitar/desabilitar permissões de forma on-line durante os testes de FQL. Lembrando que o acesso à algumas informações precisam de permissão do usuário para que seu aplicativo possa acessá-las.

    Para testar/debugar suas FQLs, abra o Graph Explorer e clique no botão FQL Query. Antes de inserir/elaborar sua FQL, clique no botão Obter Token de Acesso e selecione as permissões que sua app necessita solicitar para que sua FQL atinja o objetivo de obter as informações que precisa.

    http://developers.facebook.com/tools/explorer
    ScreenShot170

    Em seguida selecione as permissões desejadas. Veja na figura abaixo, que escolhei algumas permissões interessantes para realizar alguns testes bacanas: (email, user_likes, user_photos, user_about_me, user_birthday, user_games_activity).

    Lembre-se que o acesso à algumas informações precisam de determinadas permissões do usuário. Por exemplo, para ter acesso às fotos e álbuns publicadas pelo usuário, você vai precisar que ele aprove a permissão user_photos.

    Para uma referência completa sobre as permissões possíveis, acessar o link:
    http://developers.facebook.com/docs/reference/login/

    ScreenShot171

    Após clicar no botão Get Access Token você já esta apto a testar suas FQLs. Veja exemplo abaixo:

    ScreenShot172

  5. Exemplos interessantes de FQL
  6. Selecionei abaixo alguns exemplos de FQL para que você possa ter uma idéia do que é possível fazer. Dependendo da informação que precisa, aconselho a consultar o link que contém a referência das tabelas existentes para consulta no Graph API ou que procure já a FQL pronta consultando no google. Vamos aos exemplos:

    • Selecionar todos amigos do usuário que estão usando o seu aplicativo:
    • SELECT uid, name FROM user WHERE uid IN(SELECT uid2 FROM friend WHERE uid1 = me()) AND is_app_user = 1
    • Verificando se usuário curtiu determinada fan page:
    • SELECT uid FROM page_fan WHERE page_id = page_id AND uid = me()
      --- trocar page_id pelo id da fanpage
    • Obtendo todas fotos pertencentes ao usuário:
    • SELECT src, caption FROM photo WHERE owner=me()
    • Seleciona o id, nome e foto dos seus amigos, limitando o resultado em 25 registros:
    • SELECT uid, name, pic_square FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me() LIMIT 25)
    • Obtém detalhes dos álbuns do usuário:
    • SELECT aid, owner, name, object_id FROM album WHERE owner=me()
    • Obtém as notificações do usuário que ainda não foram lidas
    • SELECT notification_id, sender_id, app_id, icon_url, title_html, body_html, href 
      FROM notification WHERE recipient_id=me() AND is_unread = 1 AND is_hidden = 0
  7. Limitações de FQL

    Selecionei abaixo algumas limitações presentes no FQL e que normalmente geram dúvidas para desenvolvedores que estão iniciando no desenvolvimento de FQLs:

    • Não é possível criar consultas com JOINs (Um alternativa é utilizar sub-selects)
    • Não é possível Utilizar * : SELECT * (Você tem que especificar todas as colunas que deseja obter da tabela)
    • Não é possível utilizar funções básicas como sum(), count(), etc.

Avançando em seus aplicativos para facecbook

Confira vários outros artigos sobre desenvolvimento para facebook no blog:
Artigos Facebook

Curso rápido e completo sobre desenvolvimento de aplicativos para facebook:
http://www.temporealeventos.com.br/?area=267-Criando-Aplicativos-para-Facebook-Usando-SDK-de-PHP-e-Javascript

Ler Post Completo | Make a Comment ( None so far )

Facebook sdk, publicação offline no mural do usuário com access token

Posted on março 26, 2013. Filed under: Facebook, PHP | Tags:, , , , , , |

Introdução

Neste artigo vamos aprender como realizar publicações no mural do usuário mesmo o usuário estando offline na sua aplicação do facebook. A publicação é feita no feed de notícias, ficando disponível para todos amigos.

Para que seja possível publicar no mural do usuário offline, vamos precisar dos seguintes procedimentos:

  • É necessário que o usuário tenha acessado sua aplicação em algum momento e ter fornecido a permissão de publicação chamada publish_stream.
  • Guardar o identificador do usuário do facebook em nosso banco de dados.
  • Gerar e armazenar o access token do nosso aplicativo.

Com posse desses dados, podemos seguir adiante no nosso script de publicação offline.

Primeiro, vamos a um exemplo simples de como obter o ID do usuário no facebook e solicitar a permissão publish_stream. Depois veremos como obter o access token do seu aplicativo e por final, um script que demonstra como fazer a publicação no mural do usuário com access token.

Solicitando permissão de publicação e obtendo o ID do facebook

Em um primeiro instante, o usuário precisa acessar nossa aplicação e fornecer a permissão publish_stream. Faça essa implementação em seu aplicativo de acordo com suas próprias regras. Segue abaixo um script simples que realiza as operações que necessitamos. Utilize-o adaptando de acordo com sua necessidade.

<?php
// incluir a lib fo facebook
require 'facebook-php-sdk-master/src/facebook.php';

// Cria a instancia da aplicacao, informando o appid e o secret
$facebook = new Facebook(array(
  'appId'  => 'APP_ID',
  'secret' => 'SECRET',
));

$user_id = $facebook->getUser();

if ($user_id) { // usuario logado
	// solicitar permissao
	try {
		$permissions = $facebook->api("/me/permissions");
		if(! (array_key_exists('publish_stream', $permissions['data'][0])
		)) {
			header("Location: " . $facebook->getLoginUrl(array("scope" => "publish_stream")));
		    	exit;
		}
        } catch (FacebookApiException $e) {
                error_log($e);
                $user = null;
        }
	//
	// $user_id e o id do usuario no facebook
	// salvar o ID do usuario em banco
	echo $user_id;

} else {
        // usuario nao logado, solicitar autenticacao
        $loginUrl = $facebook->getLoginUrl();
	header("Location: $loginUrl");
}

Mais detalhes de como solicitar permissões pelo aplicativo, acessar meu aritgo Facebook App: Requisitando permissões pela API do PHP

Obtendo o access token do seu aplicativo

Para que seja feita a publicação no mural do usuário com ele estando offline de seu aplicativo, é necessário termos em mão o access token do nosso aplicativo.

Para gerar o access token é simples, basta acessar a URL abaixo, substituindo os campos YOUR_APP_ID e YOUR_APP_SECRET pelos respectivos dados do seu aplicativo.

https://graph.facebook.com/oauth/access_token?client_id=YOUR_APP_ID&client_secret=YOUR_APP_SECRET&grant_type=client_credentials

A resposta da URL acima, deverá retornar no seguinte formato:

access_token=YOUR_APP_ACCESS_TOKEN

Salve o access token do seu aplicativo em um lugar onde poderá recuperá-lo mais tarde. (Normalmente em um banco de dados).

Expiração do access token

O access token do seu applicativo é assinado e associado ao seu APP_ID e SECRET. Portanto, o access token do aplicativo não expira, a não ser caso você resetar o seu APP_ID e SECRET.

Caso o usuário tenha removido seu aplicativo da lista de Aplicativo Configurados, você também não conseguirá mais postar no mural dele. Portanto, seja prudente ao realizar as publicações. Avise o usuário sobre a sua intenção de publicação no momento que o usuário ingressar no seu aplicativo.

Aplicativo de publicação

Segue abaixo um script simples que realiza a publicação no mural do usuário, sem a necessidade dele estar online no seu aplicativo.

<?php
// incluir a lib fo facebook
require 'facebook-php-sdk-master/src/facebook.php';

// Cria a instancia da aplicacao, informando o appid e o secret
$facebook = new Facebook(array(
  'appId'  => 'APP_ID',
  'secret' => 'SECRET',
));

// dados para envio da publicacao
$feed_data = array(
	"message" => "Youtube",
	"name" => "Site do Youtube", 
	"link" => "http://www.youtube.com", // link da publiccao
	"caption" => "www.youtube.com",
	"access_token" => "YOUR_APP_ACCESS_TOKEN",
);

try {
	// publica foto na timeline
	$dados = $facebook->api("/ID_USUARIO/feed", "post", $feed_data);
	echo "Foto publicada com sucesso!";
} catch (Exception $e) {
	echo "<pre>";
	var_dump($e);
	echo "</pre>";
}

Lembre-se de substituir os seguintes parâmetros:

  • APP_ID: ID do seu aplicativo.
  • SECRET: SECRET do seu aplicativo.
  • YOUR_APP_ACCESS_TOKEN: access token do seu aplicativo.
  • ID_USUARIO: ID do usuário que deseja publicar no mural.

Para mais detalhes de como realizar publicações, verificar o artigo Facebook php sdk, postando mensagens no mural do usuário

Ler Post Completo | Make a Comment ( 4 so far )

Liked it here?
Why not try sites on the blogroll...

%d blogueiros gostam disto: