Facebook

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 )

Dicas para testar aplicativos para facebook durante o desenvolvimento

Posted on abril 18, 2013. Filed under: Facebook, PHP | Tags:, , |

Introdução

Neste artigo vamos aprender algumas dicas importantes para usarmos durante a fase de desenvolvimento do seu aplicativo facebook. Tópicos:

  • Fazendo com que o aplicativo seja visível somente para contas de desenvolvedores
  • Modificando a privacidade de publicação no feed de notícias e de fotos
  • Criando usuário de teste de aplicativos
  • Alterando a visibilidade da sua fan page
  1. Fazendo com que o aplicativo seja visível somente para contas de desenvolvedores do aplicativo
  2. Ative a opção Sandbox Mode na configuração de seu aplicativo para que ele fique visível somente para contas de desenvolvedores do seu aplicativo. Veja figura abaixo: (O aplicativo ficará visível somente para seus administradores e desenvolvedores)

    ScreenShot097

    PS: Não se esqueça de desabilitar essa opção quando for publicar seu aplicativo em produção

  3. Modificando a privacidade de publicação no feed de notícias e de fotos
  4. Quando você realiza uma publicação no seu feed de notícias ou de uma foto através da API do facebook, por padrão, essa publicação fica visível para todos usuários. Isso pode ser um incomodo durante a fase de desenvolvimento do seu aplicativo. Para ajudar nesse problema, você pode alterar a privacidade da publicação, fazendo com que ela seja visível somente para o seu usuário. Isso pode ser alcançado através da configuração do parâmetro privacy. Veja exemplo abaixo:

    $feed_data = array(
        "message" => "Youtube",
        "name" => "Site do Youtube", 
        "link" => "http://www.youtube.com", // link da publiccao
        "caption" => "www.youtube.com",
        "privacy" => "{'value':'SELF'}",
    );
     
    // publica foto na timeline
    $dados = $facebook->api("/me/feed", "post", $feed_data);
    

    Somente você irá visualizar a publicação. Veja na figura abaixo a indicação que mostra a visibilidade da publicação:

    ScreenShot098

    Você pode usar o parâmetro privacy também na publicação de fotos no perfil do usuário. Veja exemplo:

    // dados para envio da publicacao da foto
    $post_data = array(
    	"message" => "Fiquei Legal nessa foto",
    	"privacy" => "{'value':'SELF'}",
    	"image" => '@' . realpath("minha-foto.jpg"), // localizacao da foto
    );
    
    // publica foto na timeline
    $data['photo'] = $facebook->api("/me/photos", "post", $post_data);
    

    Para maiores informações sobre como usar o parâmetro privacy, acessar o link:
    https://developers.facebook.com/docs/reference/api/privacy-parameter/

  5. Criando usuário de teste de aplicativos
  6. Usuários testes do facebook são contas especiais, invisíveis para usuários normais, criadas com objetivo de testar à integração com aplicativos. Você pode usar usuários testes tanto manualmente como de forma automatizada. O facebook permite à criação de até 2000 usuários testes para cada aplicativo. Usuários testes tem algumas limitações em relação à usuários normais. Aconselho a analisar os detalhes de acordo com o link abaixo:

    https://developers.facebook.com/docs/test_users/

    Para criar usuários testes, edite o aplicativo desejado, entrando no link https://developers.facebook.com/apps, acessando e editando o seu aplicativo.

    No menu lateral, clique na opção Privilégios de Desenvolvedores e identifique a àrea Test Users. Veja figura abaixo:

    ScreenShot101

    Para criar novos usuários testes, clique no botão Criar. Escolha o número de usuários testes que deseja criar. Caso desejar, já marque a opção para que usuário já autorize seu aplicativo. Veja Figura:

    ScreenShot102

    Após criado o usuário teste, você pode alternar para a conta dele de forma manual clicando no link Alternar para. Você tem também a opção Modify caso queira realizar mais operações com os usuários criados: (Removê-los, criar conexões de amizades entre eles, adicioná-los em outros aplicativos que você tem criado). Veja figuras:

    ScreenShot103

    ScreenShot104

    Você pode adicionar usuários teste no seu aplicativo de forma dinâmica também, veja como através do link abaixo:
    https://developers.facebook.com/docs/test_users/

  7. Alterando a visibilidade da sua fan page
  8. Aplicativos para facebook podem interagir com fan pages de várias formas. Caso esteja trabalhando com uma fan page nova, que ainda esta em fase de “desenvolvimento” é interessante manter essa fan page oculta, até que você finalize todos os detalhes para poder publicá-la.

    Existe uma opção na configuração da fan page que mantém ela oculta. Para habilitar a opção, primeiramente, clique em Editar Página e em seguida, Editar Configurações/Editar Permissões. Veja Figura:

    ScreenShot099

    Com o menu Gerenciar Permissões selecionado, identifique a opção Página não publicada, habilite ela e clique em Salvar Alterações. Veja figura abaixo:

    ScreenShot100

    Pronto, neste momento, sua fan page já esta oculta.

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 )

Facebook sdk, Publicando fotos na Fan Page com access token.

Posted on fevereiro 9, 2013. Filed under: Facebook, PHP | Tags:, , , |

Introdução

Vou apresentar aqui uma maneira de você trabalhar com postagem de fotos em fan page de forma automática. O script final apresentado aqui poderá usado diretamente no crontab.

Já havia demonstrado essa função em um artigo anterior: Facebook app, publicando fotos na fanpage com access token. Porém aquele método já se tornou obsoleto devido mudanças ocorridas no site do facebook.

Access Token

Para poder criar o script de publicação automatizado, primeiro temos que ter um access token de usuário. O access token do usuário será gerado uma única vez. Depois vamos parametrizar esse access token no segundo script. Fique atento que esse access token do usuário tem um tempo de expiração, normalmente são 60 dias. Isso significa que depois de 60 dias, você terá que gerar o access token novamente, usando o primeiro script, e depois atualizando o segundo script.

Portanto, vamos trabalhar esse artigo em duas etapas:
1 – Obter o access token do usuário administrador da fanpage, que tem um tempo de expiração de 60 dias.
2 – Script para publicar na fan page utilizando o access token do usuário obtido na primeira etapa.

  1. Obtendo o access token do usuário administrador da fan page
  2. Para obter o access token do usuário, vamos precisar:

    • Ter uma aplicação criada no facebook com o mesmo usuário que é administrador da fan page. Para saber como criar aplicações no facebook, acessar meu artigo Criando aplicativos para Facebook usando SDK do PHP
    • Acessar a aplicação criada abaixo com o mesmo usuário que você criou a aplicação e que também é administrador da fan page. Ao acessar o script abaixo, você terá o access token e a data/hora de expiração do token. É interessante anotar essa data para saber quando você terá que executar o script novamente.
    • Não se esqueça de parametrizar o APP_ID e o SECRET da sua aplicação logo no início do script.
    <?php
    // biblioteca do facebook
    require 'src/facebook.php';
    
    // ATENCAO, configurar os parametros abaixo
    $APP_ID = ""; // id da app
    $SECRET = ""; // secret da app
    $PERMS = "publish_stream,manage_pages";
    
    // objeto do facebook
    $facebook = new Facebook(array(
      'appId'  => $APP_ID,
      'secret' => $SECRET,
    ));
    
    // monta URL atual
    $my_url = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
    
    // obtem CODE da autenticacao OAUTH
    $code = $_REQUEST['code'];
    if(empty($code)) {
            $dialog_url = "https://www.facebook.com/dialog/oauth?client_id="
                   . $APP_ID . "&redirect_uri=" . urlencode($my_url)
                   . "&scope=$PERMS";
    
            header("Location: $dialog_url");
            exit;
    }
    
    // com o CODE vamos gerar a URL para obter o access token do usuario
    $token_url = "https://graph.facebook.com/oauth/access_token?"
           . "client_id=" . $APP_ID . "&redirect_uri=" . urlencode($my_url)
           . "&client_secret=" . $SECRET . "&code=" . $code;
    
    $response = file_get_contents($token_url);
    $params = null;
    parse_str($response, $params);
    
    // printando o access token e quando ele ira expirar
    echo "Access Token: ";
    echo $params['access_token'];
    echo "<br />";
    if (!empty($params["expires"])) {
            echo "Ir&aacute; expirar em: " . date("d/m/Y H:i:s", time() + $params["expires"]);
    }
    
    

    Observações:

    • Ao acessar a app pela primeira vez, aceitar todas as permissões solicitadas.
    • É comum a pratica de guardar o valor do access token em uma tabela do banco de dados.
  3. Script automatizado que publica fotos diretamente na fan page
  4. Vamos agora ao script que publica diretamente as fotos na fan page. É importante que você tenha em mãos o id da fan page que deseja publicar as fotos. Para obter o ID da fan page é bem simples. Basta acessar a página da fan page com o usuário administrador, clicar em Editar Página -> Atualizar Informações. O id da fan page estará na URL do navegador.

    Atente-se para preencher os outros parâmetros necessários: APP_ID, SECRET, ACCESS_TOKEN do usuário.

    No exemplo abaixo, tem também um caminho para a imagem que será enviada para a fan page. Personalize o script de acordo com sua necessidade, criando sua própria rotina que seleciona as imagens desejadas.

    <?php
    // biblioteca do facebook
    require 'src/facebook.php';
    
    // ATENCAO, configurar os parametros abaixo
    $APP_ID = ""; // id da app
    $SECRET = ""; // secret da app
    $FANPAGE_ID = ""; // id da fanpage que vai publicar
    $IMAGEM_UPLOAD = "image.jpg"; // local do arquivo de imagem do upload
    $ACCESS_TOKEN = ""; // token obtido pelo gera-token.php
    
    // objeto do facebook
    $facebook = new Facebook(array(
      'appId'  => $APP_ID,
      'secret' => $SECRET,
    ));
    
    // obtendo o access token da fanpage a partir do access token do usuario administrador
    $graph_url = "https://graph.facebook.com/me/accounts?access_token=" . $ACCESS_TOKEN;
    $accounts = json_decode(file_get_contents($graph_url));
    
    $FANPAGE_ACCESS_TOKEN = null;
    foreach($accounts->data as $result) {
            if($result->id == $FANPAGE_ID) {
                    $FANPAGE_ACCESS_TOKEN = $result->access_token;
            }
    }
    
    // encontrou o access token da fanpage
    if($FANPAGE_ACCESS_TOKEN) {
            // determina que sera realizado upload de arquivos
            $facebook->setFileUploadSupport(true);
    
            try {
                    // parametros da postagem
                    $post_data = array(
                            "message" => "teste_" . time(),
                            "image" => '@' . realpath($IMAGEM_UPLOAD),
                            'access_token' => $FANPAGE_ACCESS_TOKEN,
                    );
    
                    // postando a imagem na fanpage
                    $data['photo'] = $facebook->api("/$FANPAGE_ID/photos", 'post', $post_data);
                    echo "publicado com sucesso";
    
            } catch (FacebookApiException $e) {
                    var_dump($e);
                    $user = null;
            }
    }
    

O script acima poderá ser inserido no crontab usando um navegador modo texto do linux como lynx ou links. Lembre-se que a única manutenção que precisa fazer é gerar o access token do usuário a cada 60 dias.

Boa sorte!

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

Facebook, Configurando App como Page Tab

Posted on janeiro 19, 2013. Filed under: Facebook, PHP | Tags:, , |

Usando a aplicação como um Page Tab

Introdução

O Facebook permite que você insira uma aba de uma aplicação dentro de uma fan page. É uma opção ideal para você associar aplicativos promocionais dentro de sua fan page.

Antes é necessário que você já tenha uma aplicação do facebook criada. Para saber mais como criar aplicações para facebook, acesse o link, Criando aplicativos para Facebook usando SDK do PHP.

O próximo passo é configurar a seção chamada Page Tab dentro das configurações da sua App:

ScreenShot040

Principais campos:

  • Page Tab Name: Nome que será exibido na fan page para referenciar a app!
  • Page Tab URL: URL da sua app que será aberto quando o usuário clicar no link da aba na fan page!
  • Secure Page Tab URL: URL da sua app que será aberto quando o usuário clicar no link da aba na fan page (Usado para usuários que acessam o facebook por conexão segura https)!
  • Imagem da guia da página: Imagem da aba que será exibida na fan page!
  • Page Tab Width: Largura máxima da exibição da “aba” da sua app dentro da fan page. A sua app será aberta dentro de uma tag iframe na fan page. Portanto tenha cuidado para não exceder no layout da sua página o limite configurado nesse campo!

PS: (Lembre-se que para configurar um Page Tab é necessário configurar o endereço https (SSL), pois usuários do facebook que usam conexões seguras irão ser direcionados para o link https).

Associando o Pag Tab à uma Fan Page

Para associar a Pag Tab que configuramos anteriormente à uma Fan Page, acesse o endereço abaixo:

https://www.facebook.com/dialog/pagetab?app_id=YOUR_APP_ID&display=popup&next=YOUR_URL

Substiuíndo:

  • YOUR_APP_ID: Pelo App ID da sua aplicação !
  • YOUR_URL: A URL configurada na Page Tab de sua app!

Irá abrir uma página onde você poderá escolher em qual fan page deseja que a app seja incluída. Semelhante à essa:

ScreenShot032

Escolha a fan page desejada e clique no botão Adicionar aba da Página.

Finalizando

Visualizando a sua aba inserida na fan page:

ScreenShot041

Ao clicar no link, você será enviado para dentro da sua app. Ela será aberta em um iframe dentro da fan page.

ScreenShot042

PS: Veja que o botão curtir acima do iframe onde sua app foi aberta, é referente ao curtir da sua fan page e não da sua app.

É muito comum alguns aplicativos promocionais obrigarem os usuários à curtir a fan page antes de poder participar da promoção. Quando você clica no botão Curtir, o próprio mecanismo do facebook irá fazer um refresh na página de sua aplicação, facilitando o desenvolvimento dessa função.

Para saber mais como verificar se o usuário curtiu ou não sua fan page, acesse meu post Facebook, Verificando se usuário curtiu fan page !

Observações

  • Não é possível inserir mais de uma Page Tab à uma app. Portanto, para cada Page Tab que deseje incluir na sua fan page, você terá que criar uma nova aplicação.
Ler Post Completo | Make a Comment ( 13 so far )

Facebook, Verificando se usuário curtiu fan page !

Posted on janeiro 11, 2013. Filed under: Facebook, JavaScript, PHP | Tags:, , |

Introdução

Neste artigo vamos demonstrar como você pode verificar se o usuário que acessa sua aplicação no facebook curtiu ou não uma determinada fan page.

Verificando se o usuário curtiu a fan page

Informações necessárias para nosso script:

  • Ter em mãos o APP_ID e o SECRET da app criada.
  • ID da Fan Page que deseja verificar se o usuário curtiu ou não.
  • Solicitar no mínimo a permissão user_likes, para podermos obter acesso ao likes realizados pelo usuário:
  • // verificar a necessidade de solicitar permissoes
    $permissions = $facebook->api("/me/permissions");
    if(!array_key_exists('user_likes', $permissions['data'][0])) {
            header( "Location: " . $facebook->getLoginUrl(array("scope" => "user_likes")) );
            exit;
    }
    
  • Código:
  • Para obter a informação se o usuário curtiu ou não a fan page, precisamos fazer uma consulta FQL (Facebook Query Language). FQL é uma maneira de solicitar dados de usuário usando um estilo de linguagem parecido com SQL.

    // id do usuário logado
    $facebook_user_id = $facebook->getUser();
    
    // verifica se usuário curtiu a fanpage
    $fql = "SELECT uid FROM page_fan WHERE page_id = '$FANPAGE_ID' AND uid = '$facebook_user_id'";
    $isFan = $facebook->api(array(
              "method" => "fql.query",
              "query"  => $fql,
    ));
    
    if($isFan) {
            echo "Usuário curtiu fanpage!";
    } else {
            echo "Usuário não curtiu fanpage!";
    }
    

Veja que devemos informar qual é o ID da Fan Page que deseja verificar e o ID do usuário que deseja checar. No caso, você pode colocar o id do usuário que esta logado na sua app.

Simples não ? Vamos agora colocar tudo junto em um único script:

<?php
// biblioteca do facebook
require 'src/facebook.php';

// ATENCAO, configurar os parametros abaixo
$APP_ID = ""; // id da app
$SECRET = ""; // secret da app
$FANPAGE_ID = ""; // id da fanpage

// objeto do facebook
$facebook = new Facebook(array(
  'appId'  => $APP_ID,
  'secret' => $SECRET,
));

$facebook_user_id = $facebook->getUser();
if ($facebook_user_id) {
  try {
        // verificar a necessidade de solicitar permissoes
        $permissions = $facebook->api("/me/permissions");
        if(!array_key_exists('user_likes', $permissions['data'][0])) {
                header( "Location: " . $facebook->getLoginUrl(array("scope" => "user_likes")) );
                exit;
        }

        // verifica se usuario curtiu a fanpage
        $fql = "SELECT uid FROM page_fan WHERE page_id = '$FANPAGE_ID' AND uid = '$facebook_user_id'";
        $isFan = $facebook->api(array(
                  "method" => "fql.query",
                  "query"  => $fql,
        ));

        if($isFan) {
                echo "Usuario curtiu fanpage!";
        } else {
                echo "Usuario nao curtiu fanpage!";
        }

  } catch (FacebookApiException $e) {
        echo $e;
        $user = null;
  }
} else {
        // usuario nao logado, solicitar autenticacao
        $loginUrl = $facebook->getLoginUrl();
        header("Location: " . $loginUrl);
        exit;
}

Usando Javascript

Essa função pode ser útil no SDK do facebook para outras linguagens. Destaco o SDK para javascript, que é muito utilizado.

Vejamos como implementar no javascript:

FB.api({
        method: 'fql.query',
        query:  'SELECT uid FROM page_fan WHERE uid=' + user_id + ' AND page_id=' + fanpage_id
    }, function(resp) {
        if (resp.length) {
            alert('Usuario curtiu fanpage!')
        } else {
            alert('Usuario NAO curtiu fanpage!');
        }
    }
);

Colocando o código em um javascript funcional:

<html>
<head>
        <title>Teste de Login Facebook</title>
<script src="http://connect.facebook.net/en_US/all.js"></script>

<script>

// ATENCAO, configurar os parametros abaixo
var app_id = "";
var fanpage_id = "";

FB.init({
        appId  : app_id,
        status: true, cookie: false, xfbml: false, oauth: true
});

function usuarioCurtiuFanpage() {
        var user_id = (FB.getAuthResponse() || {}).userID

        if(!user_id) {
                return false;
        }

        FB.api({
                method: 'fql.query',
                query:  'SELECT uid FROM page_fan WHERE uid=' + user_id + ' AND page_id=' + fanpage_id
            }, function(resp) {
                if (resp.length) {
                    alert('Usuario curtiu fanpage!')
                } else {
                    alert('Usuario nao curtiu fanpage!');
                }
            }
        );
}

function verificaCurtir() {

        FB.getLoginStatus(function(response) {
                if (response.status !== 'connected') {
                        FB.login(function(response) {
                                if (response.authResponse) {
                                        // pronto, usuario logado
                                        usuarioCurtiuFanpage();
                                } else {
                                        alert('Voce nao esta autorizado a usar essa app!');

                                }
                        }, {scope: 'user_likes'});
                } else {

                        // pronto, usuario logado
                        usuarioCurtiuFanpage();
                }
        });

}

</script>
</head>

<body>
<a href="#" onClick="verificaCurtir();">Verificar fanpage</a>

</body>
</html>

Observações

  • Existem outras formas de verificar se o usuário curtiu a fan page. Uma delas é caso você esteja usando a app através de um Page Tab. A informação do curtir a fan page pode ser obtida através do parâmetro signed_request. Caso queira aprender a trabalhar com os dados do signed_request, leia o artigo http://developers.facebook.com/docs/howtos/login/signed-request/

    Boa sorte!!

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

Criando aplicativos para Facebook hospedando no Heroku

Posted on novembro 29, 2012. Filed under: Facebook, PHP | Tags:, , |

Introdução

Em artigo anterior, vimos como criar aplicativos para facebook e hospedá-los em servidores particulares. Neste artigo vamos demonstrar como criar e hospedar o aplicativo no Heroku. O Heroku é uma alternativa gratuita para hospedar usas aplicações do facebook. (Lembre-se que conforme o acesso à sua aplicação for aumentando, você terá que aumentar os recursos da sua infraestrutura. Isso é feito automaticamente no Heroku, porém você começara a ter um custo com essa hospedagem).

Criando seu app do facebook

Para iniciar a criação da sua app, esteja logado no facebook, acesse o link abaixo e clique no botão Criar Novo Aplicativo

https://developers.facebook.com/apps

Após clicar no link Criar Novo Aplicativo irá abrir uma nova janela solicitando o nome da sua aplicação. Informe o nome da app e marque a opção “Web Hosting: Yes, I would like fee web hosting provided by Heroku”:

Clique no botão Continuar. Após clicar no botão, será solicitado um captcha para digitar. Digite o captcha corretamente para poder avançar.

Será apresentado uma nova tela, do Heroku, pedindo para informar qual linguagem de programação deseja trabalhar. No caso, iremos trabalhar com a linguagem php. Informe também o seu endereço de email que será usado para criação da sua conta no Heroku.

Clique no botão Criar para finalizar a criação da sua conta no Heroku. Será apresentado uma nova tela informando que sua aplicação foi criada com sucesso. Clique no botão Go to App para abrir sua aplicação recém criada:

Pronto, agora você tem uma aplicação do facebook criada e hospedada no Heroku. Vamos ver agora como editar e trabalhar com sua aplicação.

Editando sua aplicação Facebook no Heroku

  1. Definindo sua senha no Heroku
  2. Após criado seu usuário no Heroku, através do procedimento anterior, você deve ter recebido um email com algumas instruções do Heroku. Clique no link inserido no email para que você possa criar uma senha de acesso, caso seja sua primeira vez no Heroku. O link esta logo abaixo do texto (no email):

    To start editing your new app, create a password for your Heroku account

    Ao clicar no link, insira sua nova senha. De acordo com a tela abaixo:

  3. Download do heroku toolbelt
  4. O heroku toolbelt é uma ferramenta, usada através da linha de comando, para que você possa trabalhar com suas aplicações hospedadas no Heroku. Através dela você irá editar e publicar suas aplicações.

    Segue abaixo os links para instalação do heroku toolbelt de acordo com sua plataforma:

    Após instalado o toolbelt, você poderá usá-lo através da linha de comando. No caso do Windows, execute o cmd.exe para poder digitar os comandos instalados pelo toolbelt.

  5. Login inicial
  6. Para poder editar suas aplicações, o primeiro passo é realizar o login no heroku e fazer o upload da sua chave púbica, que será gerada no primeiro login através do comando heroku login. A chave gerada (ssh) é utilizada para comunicação entre você e o heroku

    O comando abaixo irá realizar esse procedimento:

    > heroku login

    Enter your Heroku credentials.
    Email: douglas.pasqua@gmail.com
    Password (typing will be hidden):
    Could not find an existing public key.
    Would you like to generate one? [Yn]
    Generating new SSH public key.
    Uploading ssh public key C:/Users/Douglas.Pasqua/.ssh/id_rsa.pub
    Authentication successful.

  7. Obtendo o código fonte de sua aplicação
  8. Para obter o código fonte de sua aplicação, você precisará saber o nome da sua app hospedada no heroku. O nome é gerado aleatoriamente pelo Heroku na hora que você cria sua aplicação no facebook. Na tela de configuração básica de sua aplicação no facebook, você pode obter este nome no campo App Domains. No meu caso, o campo App Domains esta setado para gentle-sands-5488.herokuapp.com. Portanto o nome da minha aplicação será simplesmente gentle-sands-5488 !

    Perceba também que o endereço no campo App Domains, http://gentle-sands-5488.herokuapp.com, nada mais é que o endereço onde sua aplicação esta hospedada no heroku. Através dele você pode acessar sua aplicação e testar as mudanças que você for efetuando.

    Portanto, segue o comando para baixar o código fonte de sua aplicação: (Caso tenha alguma dúvida, esse comando esta no email que o Heroku te enviou na hora da criação de sua app no facebook):

    > git clone git@heroku.com:gentle-sands-5488.git -o heroku

    Cloning into 'gentle-sands-5488'...
    remote: Counting objects: 180, done.
    remote: Compressing objects: 100% (112/112), done.
    remote: Total 180 (delta 82), reused 132 (delta 62)

    Receiving objects: 100% (180/180), 137.91 KiB | 42 KiB/s, done.
    Resolving deltas: 100% (82/82), done.

  9. Editando o código fonte de sua aplicação
  10. O comando anterior, baixou sua aplicação para um diretório local. Um novo diretório foi criado na sua máquia com o nome da sua aplicação. (Ex: gentle-sands-5488). A partir desse ponto, você já pode começar a desenvolver sua aplicação do facebook. Veja que o Heroku criou uma aplicação demo do facebook para você. Entre no diretório e edite o arquivo index.php. Veja que o código gerado pelo Heroku tem vários exemplos interessantes que podem ser aproveitados:

    // This fetches some things that you like . 'limit=*" only returns * values.
      // To see the format of the data you are retrieving, use the "Graph API
      // Explorer" which is at https://developers.facebook.com/tools/explorer/
      $likes = idx($facebook->api('/me/likes?limit=4'), 'data', array());
    
      // This fetches 4 of your friends.
      $friends = idx($facebook->api('/me/friends?limit=4'), 'data', array());
    
      // And this returns 16 of your photos.
      $photos = idx($facebook->api('/me/photos?limit=16'), 'data', array());
    
      // Here is an example of a FQL call that fetches all of your friends that are
      // using this app
      $app_using_friends = $facebook->api(array(
        'method' => 'fql.query',
        'query' => 'SELECT uid, name FROM user WHERE uid IN(SELECT uid2 FROM friend WHERE uid1 = me()) AND is_app_user = 1'
      ));
    

    A partir desse ponto, modifique o index.php de acordo com sua necessidade. Veja que tem até uma parte no código do index.php que realiza o login no facebook para o usuário poder utilizar sua aplicação. Aproveite para re-utilizar esse código gerado pelo Heroku.

    Após ter realizado as mudanças desejadas, faça um commit das alterações para sincronizar com o git:

    > git commit -am "Alterado mensagem de boas vindas"

    [master 8cd03f3] Alterado mensagem de boas vindas
    1 files changed, 1 insertions(+), 1 deletions(-)

    Assim que quiser publicar suas alterações na aplicação, digite o comando abaixo:

    > git push heroku master

    Counting objects: 5, done.
    Delta compression using up to 4 threads.
    Compressing objects: 100% (3/3), done.
    Writing objects: 100% (3/3), 325 bytes, done.
    Total 3 (delta 2), reused 0 (delta 0)

    -----> Heroku receiving push
    -----> Git submodules detected, installing
    Submodule 'sdk' (https://github.com/facebook/facebook-php-sdk.git) regisered for path 'sdk'
    Initialized empty Git repository in /tmp/build_1mhqivsdpoaat/sdk/.git/
    Submodule path 'sdk': checked out '98f2be163c96a51166354e467b95dd38aa4b019'
    -----> PHP app detected
    -----> Bundling Apache version 2.2.22
    -----> Bundling PHP version 5.3.10
    -----> Discovering process types
    Procfile declares types -> (none)
    Default types for PHP -> web
    -----> Compiled slug size: 9.7MB
    -----> Launching... done, v5
    http://gentle-sands-5488.herokuapp.com deployed to Heroku

    To git@heroku.com:gentle-sands-5488.git
    5b0f7da..8cd03f3 master -> master

    Nesse momento, suas mudanças efetuadas foram efetivadas. Basta visualizar as mudanças no link de sua aplicação. No meu caso:
    http://gentle-sands-5488.herokuapp.com

  11. Considerações
    • Banco de Dados
    • O Heroku disponibiliza um add-on onde é possível conectar com banco de dados PostgreSQL. O serviço é gratuito para desenvolvimento. Conforme o acesso à sua aplicação começar a crescer, você precisará de uma conta profissional e precisará escalar sua infraestrutura no Heroku. A partir desse ponto você começará a pagar pelo serviço. Mais detalhes sobre o serviço e pacotes:

      https://postgres.heroku.com/
      https://postgres.heroku.com/pricing

    • Desenvolvendo Local
    • É possível testar sua aplicação local, ao invés de ter que publicar no heroku toda alteração que fizer para poder testar. Caso for uma aplicação grande, esse processo pode se tornar custoso. Com alguns ajustes é possível montar uma ambiente de desenvolvimento local para testar sua aplicação. Mais detalhes, veja no link:

      https://devcenter.heroku.com/articles/facebook#working-locally

    • Cloud Computing
    • Heroku é uma plataforma de cloud computing. É um serviço que permite que o desenvolvedor fique focado no desenvolvimento de sua aplicação, sem se preocupar com a infraestrutura. Conforme sua aplicação crescer, escalar torna-se uma operação simples e fácil. O Heroku sugere alguns pacotes específicos para necessidades de uma aplicação de Facebook com muitos acessos:

      http://www.heroku.com/facebook/package

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

Facebook app, publicando fotos na fanpage com access token.

Posted on outubro 21, 2012. Filed under: Facebook, PHP | Tags:, , , |

Introdução

ATENÇÂO: Atualização: Novo Artigo demonstra como publicar na fan page com access token:
Facebook sdk, Publicando fotos na Fan Page com access token.

ATENÇÂO: PARTE DESTE ARTIGO SE ENCONTRA OBSOLETO. A SEÇÂO Obtendo o access_token da Fanpage, método 2 NÂO FUNCIONA MAIS, DE ACORDO COM ALGUMAS MUDANÇAS REALIZADAS NO SITE DO FACEBOOK. PARTE DA SEÇÂO Postando fotos na fanpage SE TORNA INÙTIL POIS ELA DEPENDE DA SEÇÃO 2! Estou avaliando a questão para atualizar este artigo. Por enquanto, mais detalhes sobre a questão em: http://stackoverflow.com/questions/13808138/facebook-app-login-exchanging-code-for-an-oauth-access-token-is-working-only-o

Em artigo anterior, já vimos como postar fotos no mural do usuário e também na fanpage. Nos exemplos demonstrados, vimos como postar usando interação com o usuário. Ou seja, o usuário precisa acessar a aplicação para poder postar as imagens na fanpage. Neste artigo pretendo demonstrar como podemos automatizar o processo de publicação, sem que haja uma interação com o usuário, através de access token.

Neste artigo em especial, vamos trabalhar com access_token de páginas (fanpages). O primeiro passo é obter o access_token. Neste momento o usuário que administra a fanpage precisa fornecer as permissões necessárias para a publicação da app na fanpage. Após, podemos obter o access_token e utilizá-lo para publicações posteriores. Podemos continuar publicando na fanpage com o token, até que ele expire. Após a expiração do token, será necessário gerá-lo novamente e continuar o processo.

Vamos demonstrar abaixo dois método para obter o access_token da fanpage. Antes, veremos como obter algumas informações importantes:

  • appId e secret
  • São os identificadores da sua aplicação facebook. Para maiores informações de como criar aplicações, acesse: Criando aplicativos para Facebook usando SDK do PHP

  • id da fanpage
  • Código identificador da fanpage onde você irá realizar as postagens. Para obter o id da fanpage é bem simples:

    Na área administrativa de sua fanpage, clique no menu Editar Página -> Atualizar informações:

    Obtenha o ID da fanpage na URL do seu navegador:

Agora sim veremos os dois métodos distintos para obter o token da fanpage.

Obtendo o access_token da Fanpage, método 1

Segue abaixo o código com um dos métodos de obter o access token da fanpage.

De acordo com a documentação do facebook, o tempo de expiração do access token varia de acordo com vários fatores.(Ex: frequência de acesso à página, entre outros). Neste primeiro método, para obter o access token, é necessário que o usuário acesse a app abaixo manualmente. Sempre que o access token expirar, o usuário precisa executar a app novamente para obter o token atualizado.

Lembre-se que você deve usar as credenciais de usuário administrador da fanpage ao acessar a app abaixo.

<?php
require 'src/facebook.php';

// paraemtros
$fanpage_id = "402151349851571"; // id da fanpage
$appid = "xxxxxxxxxxxxxxx"; // id da app
$secret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; // secret

// Instancia da lib facebook
$facebook = new Facebook(array(
  'appId'  => $appid,
  'secret' => $secret,
));

// Obtem usuario logado
$user = $facebook->getUser();

if ($user) {

  try {
        // solicita permissoes
        $permissions = $facebook->api("/me/permissions");
        if(!(array_key_exists('publish_stream', $permissions['data'][0])
                 &&  array_key_exists('manage_pages', $permissions['data'][0]))) {
                header( "Location: " . $facebook->getLoginUrl(array("scope" => "publish_stream,manage_pages")) );
                exit;
        }

        // obtendo token
        $accounts = $facebook->api('/me/accounts', 'GET', $params);
        foreach($accounts['data'] as $account) {
                if( $account['id'] == $fanpage_id || $account['name'] == $fanpage_id ){
                        $fanpage_token = $account['access_token'];
                }
        }

        if(!$fanpage_token) {
                die("Seu usario nao tem permissao nesta fanpage");
        }

        echo "Fanpage Token: " . $fanpage_token; // guardar esse token

  } catch (FacebookApiException $e) {
        var_dump($e);
        $user = null;
  }
} else {
        // usuario nao logado, solicitar autenticacao
        $loginUrl = $facebook->getLoginUrl();
        echo "<a href=\"$loginUrl\">Facebook Login</a><br />";
        echo "<strong><em>Voc&ecirc; n&atilde;o esta conectado..</em></strong>";
}

A execução da app acima irá simplesmente exibir o access token na tela. Vamos utilizar esse token em uma segunda etapa.

Obtendo o access_token da Fanpage, método 2

Vamos agora demonstrar um script que obtém o token da fanpage de forma mais automatizada que no primeiro método. Dessa forma, podemos até rodá-lo através de um processo agendado no contrab, sem que haja necessidade de interação com o usuário administrador da fanpage para obter o token.

Primeiramente, vamos obter o valor do parâmetro code que representa um token retornado na etapa de autenticação e autorização, que não tem tempo de expiração. (PS: O code obtido será alterado somente caso você altere alguma das permissões que sua aplicação solicita).

Primeiramente,acesse o link abaixo:
https://www.facebook.com/dialog/oauth?client_id=CLIENT_ID&redirect_uri=RETURN_URL&scope=manage_pages,publish_stream
Substituindo:

CLIENT_ID -> ID da sua aplicação facebook.
RETURN_URL -> Endereço onde esta hospedada sua aplicação do facebook.

(Lembre-se de estar logado no facebook com o usuário administrador da fanpage ao acessar o link acima. Atente-se também para definir o valor do scope no link acima, de acordo com as permissões que sua aplicação precisa solicitar para o usuário. Caso sua app esteja publicando somente fotos na fanpage, as permissões manage_pages e publish_stream são suficientes).

Você será redirecionado para a URL informada RETURN_URL, com o campo code na barra de endereço. Salve o valor desse campo.

Com o campo code em mãos, vamos criar o script que obtem o access token da fanpage.

<?php
require 'src/facebook.php';

// parametros
$CLIENTE_ID = "xxxxxxxxxxxxxxx"; // id da app
$SECRET = "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"; // secret da app
$CODE = "aaaaaaaaaaaaaa............"; // code de autorizacao
$FANPAGE_ID = "bbbbbbbbbbbbbbb"; // id da fanpage que deseja obter o token
$URL_APP = "http://www.seudominio.com.br"; // endereco onde sua app esta hospedada

// objeto facebok
$facebook = new Facebook(array(
        'appId'  => $CLIENTE_ID,
        'secret' => $SECRET,
));

// obter access token da conta
$url1 = "https://graph.facebook.com/oauth/access_token?client_id=$CLIENTE_ID&redirect_uri=$URL_APP&client_secret=$SECRET&code=$CODE";
$token = file_get_contents($url1);
$token = trim(str_replace("access_token=","",$token));


// obter todos access token que o usuario tem permissao
$url2 = "https://graph.facebook.com/me/accounts?access_token=$token";
$data = file_get_contents($url2);

// extrair o access token da fanpage desejada
$regex = '/access_token":"([^"]+)",("category":"[^"]+",)?"id":"' . $FANPAGE_ID . '"/';
preg_match($regex, $data, $match);
$fanpage_token = trim($match[1]);

echo "FanPage Token: $fanpage_token";

O script acima irá escrever o id da fanpage na tela. Você pode inserir esse script na crontab do Linux, usando o navegador lynx. Ex: lynx –dump http://www.seudominio.com.br/gera_token_fanpage.php. Você pode guardar esse token em um banco de dados e utilizá-lo em outro script que publica fotos na fanpage.

Em seguida vamos ver como postar fotos na fanpage usando o token.

Postando fotos na fanpage

Obtido o access token da fanpage, podemos criar um script que publica fotos na fanpage. Podendo ser inserido no crontab também
(lynx –dump http://www.seudominio.com.br/publica_fanpage.php):

<?php
require 'src/facebook.php';

// parametros
$CLIENTE_ID = "xxxxxxxxxxxxxxx"; // id da app
$SECRET = "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"; // secret da app
$FANPAGE_TOKEN = "aaaaaaaaaa....."; // toke da fanpage
$FANPAGE_ID = "bbbbbbbbbbbbbbb"; //id da fanpage onde a imagem sera postada
$IMAGEM_UPLOAD = "imagem.png"; // local do arquivo de imagem do upload

// objeto do facebook
$facebook = new Facebook(array(
  'appId'  => $CLIENT_ID,
  'secret' => $SECRET,
));

// determina que sera realizado upload de arquivos
$facebook->setFileUploadSupport(true);

try {
        // parametros da postagem
        $post_data = array(
                "message" => "teste_" . time(),
                "image" => '@' . realpath($IMAGEM_UPLOAD),
                'access_token' => $FANPAGE_TOKEN,
        );

        // postando a imagem na fanpage
        $data['photo'] = $facebook->api("/$FANPAGE_ID/photos", 'post', $post_data);
        echo "publicado com sucesso";

} catch (FacebookApiException $e) {
        var_dump($e);
        $user = null;
}

Veja que no script acima, setamos alguns parâmetros fixos, como o id e token da fanpage. O token da fanpage foi obtido a partir de algum dos métodos que vimos na primeira etapa deste artigo. Podemos deixar esse mecanismo mais automático ainda, juntando algumas peças. Podemos ter no mesmo script, a parte que obtém o token e a parte que publica na fanpage juntos. Dessa forma, quando o token da fanpage expirar, não vamos precisar rodar o script que obtém o token da fanpage manualmente.
É uma etapa a menos para se preocupar.

<?php
require 'src/facebook.php';

// parametros
$CLIENTE_ID = "xxxxxxxxxxxxxxx"; // id da app
$SECRET = "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"; // secret da app
$FANPAGE_ID = "bbbbbbbbbbbbbbb"; //id da fanpage onde a imagem sera postada
$CODE = "aaaaaaaaaaaaaaaaaaaaaaaaa............";
$IMAGEM_UPLOAD = "image.png"; // local do arquivo de imagem do upload
$URL_APP = "http://www.seudominio.com.br/"; // dominio onde sua appp esta hospedada

// objeto do facebook
$facebook = new Facebook(array(
  'appId'  => $CLIENT_ID,
  'secret' => $SECRET,
));

// obter access token da conta
$url1 = "https://graph.facebook.com/oauth/access_token?client_id=$CLIENTE_ID&redirect_uri=$URL_APP&client_secret=$SECRET&code=$CODE";
$token = file_get_contents($url1);
$token = trim(str_replace("access_token=","",$token));

// obter todos access token que o usuario tem permissao
$url2 = "https://graph.facebook.com/me/accounts?access_token=$token";
$data = file_get_contents($url2);

// extrair o access token da fanpage desejada
$regex = '/access_token":"([^"]+)",("category":"[^"]+",)?"id":"' . $FANPAGE_ID . '"/';
preg_match($regex, $data, $match);
$FANPAGE_TOKEN = trim($match[1]); // token da fanpage

// inicio da publicacao

// determina que sera realizado upload de arquivos
$facebook->setFileUploadSupport(true);

try {
        // parametros da postagem
        $post_data = array(
                "message" => "teste_" . time(),
                "image" => '@' . realpath($IMAGEM_UPLOAD),
                'access_token' => $FANPAGE_TOKEN,
        );

        // postando a imagem na fanpage
        $data['photo'] = $facebook->api("/$FANPAGE_ID/photos", 'post', $post_data);
        echo "publicado com sucesso";

} catch (FacebookApiException $e) {
        var_dump($e);
        $user = null;
}

Conclusão

A grande vantagem do método demonstrado neste artigo é a publicação automática de fotos na fanpage, podendo ser agendada em horários específicos (crontab), sem que haja necessidade de intervenção manual do operador.

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

Facebook php sdk, postando mensagens no mural do usuário

Posted on setembro 29, 2012. Filed under: Facebook, PHP | Tags:, |

Introdução

Já mostramos em artigo anterior como publicar (upload) e marcar fotos na linha do tempo dos usuários. Neste arigo, vamos mostrar algo mais simples. Como postar mensagens simples na linha de tempo do usuário. Não iremos fazer o upload de fotos, será simples publicação de textos no feed de notícias, podendo linkar imagens e vídeos externos. É um método bem parecido com o visto anteriormente, porém com algumas pequenas diferenças.

Um dos pré-requisitos é que você já tenha criado uma app no facebook. Mais detalhes, acesso o meu outro artigo, Criando Aplicativos Para Facebook Usando SDK Do PHP

Para que sua app possa postar mensagens na linha de tempo do usuário, você deve solicitar a permissão publish_stream.

Solicitando permissão publish_stream.

// verifica a permissao publish_stream
$permissions = $facebook->api("/me/permissions");
if(!array_key_exists('publish_stream', $permissions['data'][0])) {
   header( "Location: " . $facebook->getLoginUrl(array("scope" => "publish_stream")) );
   exit;
}

Para mais detalhes sobre como solicitar permissões, verifique meu outro post Facebook App: Requisitando permissões pela API do PHP

Post simples no feed de notícias

Vamos demonstrar abaixo a forma mais simples de publicação no mural através de app. Os principais campos são message, name e link.

$facebook->api("/me/feed", "post", array(
          'message' => "Site para desenvolvedores da linguagem PHP",
          'name' => "Site Oficial do PHP",
          'link' => "http://www.php.net",
));

Descrição dos campos

  • link: Link anexado na publicação
  • name: Nome do link
  • message: A mensagem contida na publicação

Veja o resultado comentado:

Linkando uma imagem no post

Veja que no post anterior não parametrizamos nenhuma imagem. O próprio mecanismo de post do facebook escolheu uma imagem “relevante” contida no link informado no post. Porém, através da lib do sdk, podemos determinar qual vai ser a imagem anexada no post. Para isso, informamos o campo picture.

Veja código abaixo:

 $facebook->api("/me/feed", "post", array(
           'message' => "Site para desenvolvedores da linguagem PHP",
           'name' => "Site Oficial do PHP",
           'link' => "http://www.php.net",
           'picture' => "http://www.exemploteste.com.br/elefante-php.png",
));

A única diferença aqui é o campo picture que foi adicionado. Ele informa qual será o link para uma imagem anexada no post. Vale atentar aqui, que a imagem não será publicada no perfil do usuário do facebook. Ela não será incluída dentro de nenhum álbum do usuário, como já vimos no artigo anterior, Manipulando fotos no facebook com sdk para php. Será incluído apenas um link para uma imagem externa, acessível através de uma URL.

Veja abaixo o print da postagem:

Veja que agora definimos a imagem que será exibida junto com a postagem. Diferente do post anterior que o próprio mecanismo do facebook escolheu uma imagem para ser anexada.

Linkando um vídeo no post

Veremos agora, como incorporar na postagem, um link para vídeo. No caso é um link para um vídeo no youtube: PHP Tutorial #1. Para tal, devemos usar o parâmetro source. Vamos trocar o campo picture do exemplo anterior pelo campo source.

$facebook->api("/me/feed", "post", array(
          'message' => "Tutorial básico de PHP no Youtube",
          'name' => "Video Aula de PHP",
          'link' => "http://www.youtube.com/watch?v=Txj4mj5yom0",
          'source' => "http://www.youtube.com/e/Txj4mj5yom0",
          'caption' => "www.youtube.com",
));

Veja que no código acima, informamos o parâmetro source que deve ser um link direto para o vídeo. Esse video poderá ser assistido dentro do próprio facebook. A URL definida no parâmetro link será aberta em uma nova janela quando você clicar no link da postagem. Nesse caso será aberto a página do youtube referente à vídeo aula.

Veja abaixo o print da postagem:

Perceba também, nessa última postagem, que usamos um novo parâmetro chamado caption. É o caption do link exibido logo abaixo do nome (campo name) da postagem. Ao invés de exibir o link http://www.youtube.com/watch?v=Txj4mj5yom0, será exibido somente http://www.youtube.com

Referência
Para mais opções referente a postagem de mensagens no facebook, acesse a documentação oficial: http://developers.facebook.com/docs/reference/api/post/

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

IE Problemas com cookies dentro de iframe (facebook)

Posted on setembro 16, 2012. Filed under: Facebook, Tips | Tags:, , , |

Introdução

Tive um problema um tanto quanto curioso. Após criar uma app no facebook e usá-la dentro de um Page Tab, que permite acessar a app dentro de uma fan page do facebook, tive um problema de acesso dentro da aplicação após a criação da sessão do facebook. O problema ocorre somente no IE, com a página da app sendo carregada dentro de um iframe. Na página inicial, após realizado o login no facebook, a aplicação direciona o usuário para uma página interna, onde somente usuários autenticados podem ter acesso. Em todos navegadores, a página interna funcionava perfeitamente. Menos o IE, que perdia a sessão do usuário após o login inicial. Porém, fora do Page Tab, ou seja, fora do iframe, a aplicação funcionava normalmente, até no IE.

Após pesquisas, descobri que por padrão o IE bloqueia third-party cookies. No caso o IE bloqueou os cookies que estavam sendo acessados dentro uma página que estava dentro de um iframe. É uma política de segurança que o IE adota, seguindo uma especificação do W3C conhecida como Platform for Privacy Preferences ou somente P3P. Para resolver o problema foi bem simples. Basta adicionar o header abaixo em todas as páginas php de sua aplicação que setam cookies. Esse header irá permitir que o IE aceite third-party cookies.

header('p3p: CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"');

Ah, lembre-se de setar o header no php antes de qualquer saída de texto.

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

« Entradas Anteriores

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

%d blogueiros gostam disto: