«

»

dez 04

Comunicando-se com o Facebook usando PHP


Com o crescimento do Facebook como rede social, o desejo de desenvolvedores e donos de sites em conectar suas aplicações web com a mais famosa rede social do mundo vem se tornando cada vez mais comum.

Se você se enquadra nesse grupo de desenvolvedores, então veio ao lugar certo, pois nesse post irei explicar como conectar o seu site feito em PHP com o Facebook seguindo alguns passos e usando uma classe de comunicação escrita em PHP.

1º Passo – Criando uma App no Facebook

Antes de começarmos, precisaremos criar uma App do Facebook, ela servirá como um canal de comunicação entre o nosso script PHP e a rede social.

Entre no Facebook e efetue login usando seu usuário e senha, logo após, acesse a página de desenvolvedores do Facebook pelo endereço https://developers.facebook.com/ e clique em Aplicativos.

Na próxima página, clique em + Criar Novo Aplicativo.

Uma caixa de formulário se abrirá no meio da tela, preencha a mesma de acordo com os dados (nome) do aplicativo que você deseja criar e clique em Continuar.

Na próxima página, preencha o campo de validação de acordo com o texto que aparece na imagem e clique em Enviar.

Para garantir que sua conta de usuário no Facebook está realmente ligada a uma pessoa e que ela não é uma conta fake, o Facebook dirá que a conta precisa ser verificada. Você poderá fazer isso adicionando seu número de celular o cartão de credito (se você for usuário das operadoras Vivo ou Oi, aconselho optar pela validação por cartão de crédito)

Observação: Se sua conta no Facebook já foi validada anteriormente, você será redirecionado para a pagina final da criação do App.

Validação por Celular

Ao escolher a validação por celular, uma janela para adicionar seu telefone será exibida. Preencha a mesma como seu telefone e clique em Confirmar.

Na próxima tela, um código será requisitado, provavelmente você recebeu esse código por SMS. Preencha o campo com tal código e clique novamente em Confirmar.

Observação: Talvez o SMS demore alguns minutos, mas se o mesmo não chegar, clique em reenviar código ou refaça o procedimento optando pela validação por cartão de crédito.

Validação por Cartão de Crédito

Ao escolher a validação por cartão de crédito, sua senha poderá ser novamente requisitada. Preencha o campo Senha e clique em Continuar

Preencha o formulário de acordo com os dados do seu cartão de crédito e clique em Salvar.

Se tudo correu bem com a validação via cartão, o Facebook irá exibir os dados do seu cartão na próxima pagina.

Voltando para a criação do aplicativo

Após os passos de validação da conta, tanto via telefone ou cartão de credito, volte a página de criação do aplicativo. Se você não fechou a mesma, a página de criação da APP deve estar aberta em paralelo com a de validação da conta, caso contrario, terá que recomeçar o processo de criação do App (o processo de validação da conta não se repetirá)

Na tela mostrada pela imagem abaixo, clique em Continuar.

Novamente, você deve preencher o campo de validação de acordo com o texto que aparece na imagem mostrada pelo Facebook e clicar em Enviar.

Se tudo correu bem até agora, uma página com os dados da sua App do Facebook será mostrada. Nela você poderá modificar os dados da aplicação e fazer upload de um ícone.

Nessa página, preencha o campo App Domain com o domínio do seu site e o campo Site Url com a url de onde seu código de integração se encontra. No meu caso, o meu dominio é digitaldev.com.br e a pasta onde coloquei o script de integração é http://digitaldev.com.br/facebook, por esse motivo, preenchi os campos como mostra a imagem abaixo.

Ainda na mesma página, anote os números de App ID e App Secret. Pois eles serão usados pelo nosso script PHP para fazer referencia ao App do Facebook. Veja a localização dos mesmos visualizando a imagem abaixo.

Ao final do processo, clique em Salvar alterações

2º Passo – Escrevendo o script PHP

Para facilitar o nosso trabalho, iremos usar uma classe para gerenciar a comunicação entre nossa aplicação e o Facebook. Efetue o download da mesma clicando aqui.

Ao descompactar o pacote, constataremos a existência de alguns exemplos de uso da classe, mas os arquivos que realmente serão usados são os que se encontram dentro da pasta src. Copie-os para uma pasta dentro da sua aplicação, pois você precisará efetuar um include ou require deles dentro do arquivo de integração.

Vamos ao código PHP

<?php
//incluindo a classe de conexão com o facebook
require_once 'FacebookApi/facebook.php';

/*
* ID da App, vocé obteve isso na ultima
* página de geração do seu aplicativo no facebook
*/
$App_ID = '';

/*
* App Secret, você obteve isso na ultima
* página de geração do seu aplicativo no facebook
*/
$App_Secret = '';

//Instanciando o Objeto da classe do facebook
$facebook = new Facebook(array(
	    'appId'  => $App_ID ,
	    'secret' => $App_Secret
));

//Pegando Id do usuário Logado
$o_user = $facebook->getUser();

/*
* Verificando se está conectado
*/
if($o_user == 0)
{

	//Envia para a página de permissão do facebook, nela voce irá dar permissão ao aplicativo
	//acessar dados da sua conta
	$url = $facebook->getLoginUrl(array('scope' => array('publish_stream','read_stream')));
	header("Location:".$url);
}
else
{
	//Verificando se o comando de logout foi enviado
	if($_GET['action'] == 'finish' )
	{
		//Retirando a permissão do Aplicativo à sua conta no facebook
		session_destroy();
		header('Location: '.$facebook->getLogoutUrl());
	}
	else
	{
		//Atualizando seu status no facebook
		if( $_GET['action'] == 'publish' && strlen($_POST['status']) > 0 )
		{
			$post =  array('message' => $_POST['status']);
			$feed = $facebook->api('/me/feed', 'POST', $post);
		}
		else
		    //pegando as publicações do seu mural
			$feed = $facebook->api('/me/feed');
			//Use ver_dump($feed) ou print_r($feed)
			//para ver todos os campos retornados

		//pegando as informações do usuário conectado
		$me = $facebook->api('/me');
		//Use ver_dump($me) ou print_r($me)
		//para ver todos os campos retornados

		//pegando as publicações da sua home
		$home = $facebook->api('/me/home');
		//Use ver_dump($home) ou print_r($home)
		//para ver todos os campos retornados
	}
}

?>

<!DOCTYPE unspecified PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
   <title>Integração com o Facebook</title>
   <meta content='text/html; charset=utf-8' http-equiv='Content-Type'>
  </head>
  <body>
  <div align="center">
	<table width='600' border='1'>
		<tr>
			<td colspan="4" align="center">
				<a href="<?php echo $me['link']?>">
					<?php echo $me['name']?>
				</a>
			</td>
		</tr>
		<tr>
			<td align="right">
				Primeiro Nome:
			</td>
			<td align="center">
				<?php echo $me['first_name']?>
			</td>
			<td align="right">
				Ultimo Nome:
			</td>
			<td align="center">
				<?php echo $me['last_name']?>
			</td>
		</tr>
		<tr>
			<td align="right">
				Cidade Natal:
			</td>
			<td align="center">
				<?php echo $me['hometown']['name']?>
			</td>
			<td align="right">
				Cidate onde mora:
			</td>
			<td align="center">
				<?php echo $me['location']['name']?>
			</td>
		</tr>
	</table>
	<br/>

	<?php
	//Imprimindo publicações do mural do usuário
	if(is_array($feed['data']))
	{
	?>
		<table width="700" border="1">
			<tr>
				<td align="center">
					Seu Mural
				</td>
			</tr>
			<?php
			foreach($feed['data'] AS $hist)
			{
			?>
			<tr>
				<td align="center">
					<?php
					if(isset($hist['story']))
						echo $hist['story'];
					else
					{
						echo $hist['message'].'<br/>';
						if(isset($hist['picture']))
						?>
						<img src='<?php echo $hist['picture']?>'>
						<?php
					}
					?>
				</td>
			</tr>
			<?php
			}
			?>
		</table>
		<br/>
	<?php
	}
	?>

	<?php
	//imprimindo publicações da home do usuário
	if(is_array($home['data']))
	{
	?>
		<table width="700" border="1">
			<tr>
				<td align="center">
					Home
				</td>
			</tr>
			<?php
			foreach($home['data'] AS $hist)
			{
			?>
			<tr>
				<td align="center">
					<?php
					if(isset($hist['story']))
						echo $hist['story'];
					else
					{
						echo $hist['message'].'<br/>';
						if(isset($hist['picture']))
						?>
						<img src='<?php echo $hist['picture']?>'>
						<?php
					}
					?>
				</td>
			</tr>
			<?php
			}
			?>
		</table>
		<br/>
	<?php
	}
	?>

	<div>
		<form action="?action=publish" method="POST">
			<textarea name="status" rows="4" cols="20"></textarea>
		<br/>
		<button type="submit">Enviar</button>
		</form>
	</div>

	<a href="?action=finish">Sair</a>
</div>
</body>
</html>

Como você pode observar no código acima, eu copiei todo o conteúdo da pasta src do pacote que fizemos download para uma pasta chamada FacebookApi na raiz da pasta do meu script.

Para ver esse código funcionando, acesse http://digitaldev.com.br/facebook

Para fazer o download do código fonte do exemplo acima, clique aqui

Para melhorar o seu entendimento do código do exemplo, leia as documentações abaixo.
Graph API – https://developers.facebook.com/docs/reference/api/
PHP SDK overview – https://developers.facebook.com/docs/reference/php/

Espero ter ajudado aos leitores que desejam efetuar a integração entre uma aplicação em PHP e o Facebook. Qualquer dúvida, entre em contato usando a área de perguntas e respostas desse post.

Sobre o autor

Tarcísio

Bacharel em Engenharia da Computação, programador C / C++ , especialista em PHP, MySQL, PgSQL. Além disso, tem forte queda por tecnologia mobile, principalmente quando Android está envolvido.

11 comments

  1. Leandro Celini

    Parabéns pelo artigo funfo aqui legal estava procurando algo pra começar com integração do php com o facebook

    1. Tarcísio

      Valeu Leandro. Se tiver qualquer sugestão ou dúvida em relação ao post ou ao blog, sinta-se a vontade para escrever ai na área de perguntas e respostas…

  2. Mariana

    Muito bom o artigo, Tarcísio! Ajudou bastante! Valeu!

    1. Tarcísio

      Valeu Mariana. Se você tiver alguma sugestão, dúvida ou critica sobre esse post ou o blog, pode escrever ai na área de perguntas e resposta. ;)

  3. Thiago

    Olá Tarcísio, parabéns pelo post, fiz um app no facebook
    coloquei esse código na index.php onde o ta hospedado e tals
    editei o meu ID e o Scret lá, fiz upload de tudo, mas quando abro a página do app da esse erro
    Fatal error: Uncaught OAuthException: (#200) Requires extended permission: read_stream thrown in /app/www/base_facebook.php on line 1106

    Fiz tudo certinho, não editei mais nada, quero colocar outro conteúdo
    mas preciso dessa confirmação para publicar no mural da pessoa, ele pediu para ir até o aplicativo né?! até ai tudo bem, aceitei pra ir no aplicativo, na hora de ir para permitir acesso ao mural e tals, deu esse erro..

    Valew irmão..
    abraço

    1. Tarcísio

      Bom dia Thiago

      Observe a linha de código abaixo

      //Envia para a página de permissão do facebook, nela voce irá dar permissão ao aplicativo
      //acessar dados da sua conta
      $url = $facebook->getLoginUrl(array(‘scope’ => array(‘publish_stream’,'read_stream’)));
      header(“Location:”.$url);

      O problema é que você está tentando executar alguma requisição sem permissão necessária. Ainda está dizendo ai que a permissão que está faltando é a read_stream. A parte do seu código que gera a url de pedido de permissões está igual à desse artigo?

  4. Daniel

    Ola amigo! Eu queria fazer um aplicativo igual essa “modinha” que está rolando no facebook agora do tipo: CLIQUE EM CURTIR E DESCUBRA QUE TIPO DE BEBIDA VOCÊ É ! … dai a pessoa clica em curtir aparece essa tela que você ensinou ae e publica na pagina da pessoa, a foto e o link do aplicativo para outras pessoas curtirem a pagina e fazer o teste. Como que faz isso ? Tentei fazer de tudo ja mas ta complicado.

    Veja esse exemplo:

    http://www.facebook.com/EleVsEla

    abraços, aguardo resposta :)

    1. Tarcísio

      Bom dia Daniel.

      Infelizmente, o que você está tentando fazer está além desse simples exemplo de como se comunicar com o Facebook usando PHP. Mas o segredo de tudo está nos links abaixo.

      Graph API – https://developers.facebook.com/docs/reference/api/
      PHP SDK overview – https://developers.facebook.com/docs/reference/php/

      Você vai ter que estudar um pouco pra conseguir construir um pequeno software como esse que você quer.

    2. Tarcísio

      Daniel. Dá uma olhada no que eu escrevi sobre um pedido parecido do Thiago nesse mesmo post.

      Vocês querem fazer aplicativos parecidos. Mas a finalidade e o jeito de fazer é o mesmo.

  5. Thiago

    Tarcísio, consegui ajustar esse detalhe, era confirmação de token..
    Gostaria de saber de você que entende perfeitamente disso,
    consegui fazer tudo certinho, é um app para o face, de qual personagem você é, queria que para não fãs, colocar um banner e ao clicar em curtir vir outra página, tenho uma página já feita em html, como posso fazer isso ?
    agradeço se você ajudar, te pago se quiser..

    1. Tarcísio

      Bom dia Thiago.

      Como você resolveu o problema de permissões?

      Sobre o App. A parte mais difícil seria escrever no mural do cara. Assim, os amigos dele veriam e clicariam no link e assim você estaria encadeando o link. A parte de “Qual personagem você é”, teria que ser gerada com um script PHP à parte.

      Resumindo.
      - Script PHP + HTML pra gerar o “Qual personagem você é” (No seu site, fora do facebook)
      - Script PHP + Facebook onde você escreveria no mural do cara. Quando o esse Script for postar no facebook, tem que mandar o link para que os amigos do cara sejam encaminhados para a sua página de “Qual personagem você é”.

      Infelizmente, posso apenas te ajudar tirando dúvidas ou até mesmo dar dicas de planejamento.

      Dê uma olhada nos links abaixo pra ter mais domínio do código.
      Graph API – https://developers.facebook.com/docs/reference/api/
      PHP SDK overview – https://developers.facebook.com/docs/reference/php/

Deixe um Comentário

Seu e-mail não será publicado.

Você pode usar estas tags e atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>