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

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_actions,manage_pages,publish_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 = json_decode($response, true);
     
    // printando o access token e quando ele ira expirar
    echo "Access Token: ";
    echo $params['access_token'];
    echo "<br />";
    if (!empty($params["expires_in"])) {
            echo "Ir&aacute; expirar em: " . date("d/m/Y H:i:s", time() + $params["expires_in"]);
    }
    

    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(),
                            "source" => new CURLFile($IMAGEM_UPLOAD, 'image/png'),
                            '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!

Comments

  1. By Matheus

    Reply

    • mm By pasquati

      Reply

    • By André

      Reply

      • mm By Douglas V. Pasqua

        Reply

  2. By Thiago

    Reply

    • mm By pasquati

      Reply

      • By loreon

        Reply

  3. By Wagner

    Reply

    • mm By Douglas V. Pasqua

      Reply

  4. Reply

    • mm By Douglas V. Pasqua

      Reply

  5. By lucas

    Reply

  6. By lucas

    Reply

    • mm By Douglas V. Pasqua

      Reply

  7. By Jucemar Vaccaro

    Reply

    • mm By Douglas V. Pasqua

      Reply

  8. By Bruno

    Reply

  9. By Bruno

    Reply

    • mm By Douglas V. Pasqua

      Reply

  10. By Jônata Marcelino

    Reply

    • mm By Douglas V. Pasqua

      Reply

      • By Jônata Marcelino

        Reply

        • mm By Douglas V. Pasqua

          Reply

  11. By Alan

    Reply

    • mm By Douglas V. Pasqua

      Reply

  12. By Joel Germano

    Reply

    • mm By Douglas V. Pasqua

      Reply

  13. By Alan

    Reply

    • mm By Douglas V. Pasqua

      Reply

  14. By Joel Germano

    Reply

    • mm By Douglas V. Pasqua

      Reply

      • Reply

        • mm By Douglas V. Pasqua

          Reply

  15. By Saulo

    Reply

    • mm By Douglas V. Pasqua

      Reply

      • By Saulo

        Reply

        • mm By Douglas V. Pasqua

          Reply

          • By Saulo

          • mm By Douglas V. Pasqua

  16. By Saulo

    Reply

  17. By Rodrgio

    Reply

    • mm By Douglas V. Pasqua

      Reply

  18. By Paulo César

    Reply

  19. By Paulo César

    Reply

    • mm By Douglas V. Pasqua

      Reply

      • By Paulo César

        Reply

        • By Paulo César

          Reply

        • mm By Douglas V. Pasqua

          Reply

      • By Paulo César

        Reply

  20. By Luis

    Reply

    • mm By Douglas V. Pasqua

      Reply

  21. By Leandro

    Reply

    • mm By Douglas V. Pasqua

      Reply

  22. Reply

    • mm By Douglas V. Pasqua

      Reply

      • Reply

        • mm By Douglas V. Pasqua

          Reply

  23. By Alexandre

    Reply

    • mm By Douglas V. Pasqua

      Reply

  24. By Guilherme

    Reply

    • mm By Douglas V. Pasqua

      Reply

  25. Reply

  26. Reply

    • mm By Douglas V. Pasqua

      Reply

  27. Reply

    • mm By Douglas V. Pasqua

      Reply

  28. Reply

  29. Reply

    • mm By Douglas V. Pasqua

      Reply

  30. By Geovane

    Reply

    • mm By Douglas V. Pasqua

      Reply

  31. By Eduardo Oliveira

    Reply

    • mm By Douglas V. Pasqua

      Reply

  32. Reply

    • mm By Douglas V. Pasqua

      Reply

      • Reply

        • mm By Douglas V. Pasqua

          Reply

  33. Reply

    • mm By Douglas V. Pasqua

      Reply

  34. By eduardo

    Reply

  35. By eduardo

    Reply

    • mm By Douglas V. Pasqua

      Reply

  36. By eduardo

    Reply

  37. By João

    Reply

    • mm By Douglas V. Pasqua

      Reply

  38. Reply

    • mm By Douglas V. Pasqua

      Reply

  39. By marcos

    Reply

    • mm By Douglas V. Pasqua

      Reply

  40. By alex

    Reply

    • mm By Douglas V. Pasqua

      Reply

  41. Reply

    • mm By Douglas V. Pasqua

      Reply

  42. By Geovane

    Reply

  43. Reply

    • mm By Douglas V. Pasqua

      Reply

  44. Reply

  45. By Souza

    Reply

    • mm By Douglas V. Pasqua

      Reply

Deixe um comentário

Follow

Get every new post on this blog delivered to your Inbox.

Join other followers: