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!

Please follow and like us:

Comments

  1. By Matheus

    • mm By pasquati

    • By André

      • mm By Douglas V. Pasqua

  2. By Thiago

    • mm By pasquati

      • By loreon

  3. By Wagner

    • mm By Douglas V. Pasqua

    • mm By Douglas V. Pasqua

  4. By lucas

  5. By lucas

    • mm By Douglas V. Pasqua

  6. By Jucemar Vaccaro

    • mm By Douglas V. Pasqua

  7. By Bruno

  8. By Bruno

    • mm By Douglas V. Pasqua

  9. By Jônata Marcelino

    • mm By Douglas V. Pasqua

      • By Jônata Marcelino

        • mm By Douglas V. Pasqua

  10. By Alan

    • mm By Douglas V. Pasqua

  11. By Joel Germano

    • mm By Douglas V. Pasqua

  12. By Alan

    • mm By Douglas V. Pasqua

  13. By Joel Germano

    • mm By Douglas V. Pasqua

        • mm By Douglas V. Pasqua

  14. By Saulo

    • mm By Douglas V. Pasqua

      • By Saulo

        • mm By Douglas V. Pasqua

          • By Saulo

          • mm By Douglas V. Pasqua

  15. By Saulo

  16. By Rodrgio

    • mm By Douglas V. Pasqua

  17. By Paulo César

  18. By Paulo César

    • mm By Douglas V. Pasqua

      • By Paulo César

        • By Paulo César

        • mm By Douglas V. Pasqua

      • By Paulo César

  19. By Luis

    • mm By Douglas V. Pasqua

  20. By Leandro

    • mm By Douglas V. Pasqua

    • mm By Douglas V. Pasqua

        • mm By Douglas V. Pasqua

  21. By Alexandre

    • mm By Douglas V. Pasqua

  22. By Guilherme

    • mm By Douglas V. Pasqua

    • mm By Douglas V. Pasqua

    • mm By Douglas V. Pasqua

    • mm By Douglas V. Pasqua

  23. By Geovane

    • mm By Douglas V. Pasqua

  24. By Eduardo Oliveira

    • mm By Douglas V. Pasqua

    • mm By Douglas V. Pasqua

        • mm By Douglas V. Pasqua

    • mm By Douglas V. Pasqua

  25. By eduardo

  26. By eduardo

    • mm By Douglas V. Pasqua

  27. By eduardo

  28. By João

    • mm By Douglas V. Pasqua

    • mm By Douglas V. Pasqua

  29. By marcos

    • mm By Douglas V. Pasqua

  30. By alex

    • mm By Douglas V. Pasqua

    • mm By Douglas V. Pasqua

  31. By Geovane

    • mm By Douglas V. Pasqua

  32. By Souza

    • mm By Douglas V. Pasqua

Follow

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

Join other followers: