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!

Make a Comment

Deixe uma resposta para pasquati Cancelar resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

5 Respostas to “Facebook sdk, Publicando fotos na Fan Page com access token.”

RSS Feed for Pasqua Tecnologia Comments RSS Feed

Olá, parabéns pelo seu artigo.
Fiz tudo que você disse para gerar o access token, porém não consegui e ele exibe o seguinte erro:

Warning: file_get_contents(): Unable to find the wrapper “https” – did you forget to enable it when you configured PHP? in C:\xampp\htdocs\token\index.php on line 35

Warning: file_get_contents(https://graph.facebook.com/oauth/access_token?client_id=315240795270541&redirect_uri=http%3A%2F%2Flocalhost%2Ftoken%2Findex.php&client_secret=488abb270d5c0190cc7a96adacf4d3fd&code=AQD8DsLmXNQD7Sg4KZedj0-8D7x-ECHrFMIWq5XQldt_6duhS0DagQAnuJOuBRORtNSNoAbXdTgaHtjohPDNxYLLTjiUtrBy_0V-k4CKUkXvxdQ-wSMi21DmEYmQERhsNcevlRyJ9_3GqLKU68c1euG-Z6_fFMfpfKZRffT9JOKdILz-57m56nbbrTnWGngScCpYcoJxgfKaUBBAc1yi8J83): failed to open stream: Invalid argument in C:\xampp\htdocs\token\index.php on line 35
Access Token:
Notice: Undefined index: access_token in C:\xampp\htdocs\token\index.php on line 41

Estou fazendo em PHP pelo netbeans, já importei a pasta src e criei meu app normal, só estou empacado nesse erro, se puder ajudar ficaria agradecido. Abraços

Olá Matheus,

O erro ocorre devido ao suporte de SSL no seu ambiente de desenvolvimento do PHP. Você tem duas alternativas nesse caso:

1) Nos scripts php demonstrados no artigo, trocar todas ocorrências de https:// por http:// ! Acredito que funcionará corretamente, pois o facebook tem suporte tanto para conexão normal quanto para conexão segura.

2) Habilitar a extensão php_openssl na configuração do php. Identifique o arquivo php.ini da sua instalação, encontre e des-comente a linha abaixo:

extension=php_openssl.dll

Boa sorte!

Parabéns!! Muito bom o post!
Deu tudo certo aqui, deu o mesmo erro do Matheus, ficou muito bom!! Eu publico no site e os posts vão para o pagina do Facebook, so que não aparece em publico, apesar de estar em publico, mas não aparece para não usuários do Facebook, tem como mudar isso?
Foi de muita valia este artigo!!
Um abraço..

Olá Thiago,

Que bom que funcionou a publicação!

O problema acontece somente para usuário que não são fans da sua fan page? Os usuários que são fans estão conseguido ver as publicações?

De qualquer forma, verifique as permissões de acesso da sua fan page. (Editar Página -> Editar Configurações) Opções Visibilidade da página e Visibilidade da publicação. Se puder, faça teste com as outras opções também.

Boa sorte!

Hoje que eu consegui!!!
Fiz diversas alterações, de privacidade, mas não deu em nada, era um simples detalhe no aplicativo criado. O “Sandbox Mode” estava ativado então só pode ver o desenvolvedor! Desativei e pronto, publicações publicas!!!
Mais uma vez parabéns!! Agora quero publicar links e textos..
Valeu!!!


Where's The Comment Form?

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

%d blogueiros gostam disto: