ti-enxame.com

API do Facebook Graph - Como postar na página de fãs como administrador

Eu configurei um script que permite aos usuários postar mensagens em uma página de fãs no Facebook. Tudo funciona, mas há um pequeno problema.

O Problema:

Quando a postagem é adicionada ao feed da página, a conta pessoal do usuário é exibida. Prefiro que ele mostre a conta da página (como quando você é administrador da página e diz que veio dessa página). A conta com a qual estou postando tem direitos de administrador para a página, mas ainda é exibida como uma postagem pessoal.

HTTP POST

$url = "https://graph.facebook.com/PAGE_ID/feed";
$fields = array (
    'message' => urlencode('Hello World'),
    'access_token' => urlencode($access_token)
);

$fields_string = "";
foreach ($fields as $key => $value):
    $fields_string .= $key . '=' . $value . '&';
endforeach;
rtrim($fields_string, '&');

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, count($fields));
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);

$result = curl_exec($ch);
curl_close($ch);
17
diggersworld

Até onde eu sei, tudo o que você precisa fazer é especificar um uid (ou seja, o ID da página) na sua chamada para stream.publish

EDITAR

Dê uma olhada em representação

9
Peter Bailey

Para postar como Página não como Usuário, você precisa do seguinte:
Permissões:

  • publish_stream
  • manage_pages

Requisitos:

  • O ID da página e access_token (Podem ser obtidos desde que obtivemos as permissões necessárias acima)
  • O usuário atual para ser um administrador (para recuperar os access_token Da página)
  • Um access_token Com tempo de validade prolongado de um dos administradores, se você desejar fazer isso offline (de um script em segundo plano)

Exemplo de PHP-SDK:

<?php
/**
 * Edit the Page ID you are targeting
 * And the message for your fans!
 */
$page_id = 'PAGE_ID';
$message = "I'm a Page!";


/**
 * This code is just a snippet of the example.php script
 * from the PHP-SDK <http://github.com/facebook/php-sdk/blob/master/examples/example.php>
 */
require '../src/facebook.php';

// Create our Application instance (replace this with your appId and secret).
$facebook = new Facebook(array(
  'appId'  => 'app_id',
  'secret' => 'app_secret',
));

// Get User ID
$user = $facebook->getUser();

if ($user) {
  try {
    $page_info = $facebook->api("/$page_id?fields=access_token");
    if( !empty($page_info['access_token']) ) {
        $args = array(
            'access_token'  => $page_info['access_token'],
            'message'       => $message 
        );
        $post_id = $facebook->api("/$page_id/feed","post",$args);
    } else {
        $permissions = $facebook->api("/me/permissions");
        if( !array_key_exists('publish_stream', $permissions['data'][0]) ||
           !array_key_exists('manage_pages', $permissions['data'][0])) {
                // We don't have one of the permissions
                // Alert the admin or ask for the permission!
                header( "Location: " . $facebook->getLoginUrl(array("scope" => "publish_stream, manage_pages")) );
        }
    }
  } catch (FacebookApiException $e) {
    error_log($e);
    $user = null;
  }
}

// Login or logout url will be needed depending on current user state.
if ($user) {
  $logoutUrl = $facebook->getLogoutUrl();
} else {
  $loginUrl = $facebook->getLoginUrl(array('scope'=>'manage_pages,publish_stream'));
}
// ... rest of your code
?>

Aqui o conectado$user Deve ser o administrador.

Resultado:
enter image description here

Mais no meu tutorial

17
ifaour

Como a única postagem relevante nos resultados do google para "o gráfico do facebook não será postada na página como página", quero anotar a solução que encontrei. Você precisa de um token de acesso com permissões manage_pages. Então ligue

https://graph.facebook.com/<user_id>/accounts?access_token=<access_token>

Isso listará todas as páginas às quais o usuário tem acesso e fornecerá os tokens de acesso para cada uma. Você pode usar esses tokens para postar como a página.

1
Adam

É assim que eu faço com o PHP SDK 4.0 e Graph API 2.3:

/**
 * Posts a message, link or link+message on the page feed as a page entity
 * 
 * @param FacebookSession $session (containing a page admin user access_token)
 * @param string $pageId
 * @param string $message - optional
 * @param string $link    - optional
 * 
 * @return GraphObject
 */
function postPageAsPage( $session, $pageId, $message = '', $link = '' ){
        
        // get the page token to make the post request
        $pageToken = ( new FacebookRequest( 
                        $session, 
                        'GET', 
                        "/$pageId" . "?fields=access_token"
        ))->execute()->getGraphObject();                                  
        
        return ( new FacebookRequest(
                        $session,
                        'POST',
                        "/$pageId/feed",
                        array(
                                'access_token' => $pageToken->getProperty( 'access_token' ),
                                'message'      => $message,
                                'link'         => $link,
                        )
        ))->execute()->getGraphObject();  
}
1
achasinh

Você deve recuperar access_tokens para páginas e aplicativos que o usuário administra.

Os tokens de acesso podem ser consultados chamando /{user_id}/accounts por meio da API do Graph.

Mais detalhes:

https://developers.facebook.com/docs/facebook-login/permissions/v2. -> Referência -> Páginas

1
Max

A API do Graph espera o parâmetro page_id (O ID do objeto da página de fãs) a ser passado como um argumento para as chamadas da API para obter os eventos publicados em um mural de páginas de fãs. Não mencionado em nenhum lugar da documentação oficial da API do Graph, mas funciona. Eu testei com sucesso com o Official PHP SDK v3.0.1

As permissões de aplicativos necessárias seriam create_event e manage_pages

Um exemplo seria algo parecido com isto:

//Facebook/Fan Page Id
$page_id = '18020xxxxxxxxxx';

//Event Start Time
$next_month = time() + (30 * 24 * 60 * 60);

//Event Paramaeters
$params = array(
    'page_id'     =>  $page_id, // **IMPORTANT**
    'name'        => 'Test Event Name',
    'description' => 'This is the test event description. Check out the link for more info: http://yoursite.com',
    'location'    => 'Kottayam, Kerala, India',
    'start_time'  =>  $next_month       
);


$create_event = $facebook->api("/$page_id/events", "post", $params);
1
skepticNeophyte

A resposta está na obtenção de uma permissão de "manage_pages" no botão FB:login, Da seguinte forma:

<fb:login-button perms="publish_stream,manage_pages" autologoutlink="true"></fb:login-button>`

Quando você obtém essas permissões, pode obter uma lista estruturada de todas as páginas das quais o usuário conectado é um administrador. O URL a ser chamado é:

https://graph.facebook.com/me/accounts?access_token=YourAccessToken

ODEIO a documentação do Facebook, mas aqui está uma página com algumas informações: https://developers.facebook.com/docs/reference/api/ Veja as 'Autorizações' e 'Página Login ', em particular nessa página.

Um ótimo recurso para juntar tudo isso (para Coldfusion Developers) é o CFC de Jeff Gladnick no RIA Forge: http://facebookgraph.riaforge.org/

Adicionei a seguinte UDF ao CFC de Jeff, se você quiser usá-la:

<cffunction name="getPageLogins" access="public" output="true" returntype="any" hint="gets a user's associated pages they manage so they can log in as that page and post">
    <cfset var profile = "" />
    <cfhttp url="https://graph.facebook.com/me/accounts?access_token=#getAccessToken()#" result="accounts" />
    <cfif IsJSON(accounts.filecontent)>
        <cfreturn DeserializeJSON(accounts.filecontent) />
    <cfelse>
        <cfreturn 0/>
    </cfif>
</cffunction>

O que isso retorna é uma estrutura de todas as páginas das quais o usuário conectado é um administrador. Retorna a página NAME, ID, ACCESS_TOKEN e CATEGORY (não é necessário neste contexto).

Portanto, MUITO IMPORTANTE: O ID é o que você passa para definir em que página você está postando TO, e o ACCESS_TOKEN é o que você passa para definir quem você é. POSTANDO COMO.

Depois de ter a lista de páginas, você pode analisar os dados para obter uma matriz de três elementos com:

ID - ACCESS_TOKEN - NAME

Tenha cuidado, pois o Facebook ACCESS_TOKEN usa alguns caracteres estranhos. Entre em contato se precisar de ajuda adicional.

1
Mark Brodsky