J'ai configuré un script qui permet aux utilisateurs de poster des messages à une page de ventilateur sur Facebook. Tout fonctionne, mais il y a un petit problème.
Le problème :
Lorsque le message est ajouté à la page FILED, il affiche le compte personnel de l'utilisateur de l'enregistrement. Je préférerais qu'il affiche le compte de la page (comme lorsque vous êtes administrateur de la page, il est dit de cette page). Le compte que je pose avec des droits d'administration sur la page, mais cela montre toujours comme poste personnel.
POST HTTP
$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);
Autant que je sache, tout ce que vous avez à faire est de spécifier un uid
(c'est-à-dire l'ID de la page) dans votre appel à flux.publish
Jeter un coup d'œil à impersonnation
Pour poster comme page Pas comme Utilisateur, vous avez besoin des éléments suivants:
[.____] Autorisations:
publish_stream
manage_pages
Exigences:
access_token
(peut être obtenu puisque nous avons obtenu les autorisations requises ci-dessus)access_token
)access_token
avec temps d'expiration de longue durée de l'un des administrateurs si vous voulez faire cela Offline (à partir d'un script d'arrière-plan)exemple 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
?>
Ici le Connecté$user
est censé être l'administrateur.
Résultat:
plus dans mon tutoriel
Parce que la seule posture pertinente dans les résultats Google pour "Graphique Facebook ne postera pas à la page comme page" Je souhaite faire une note de la solution que j'ai trouvée. Vous avez besoin d'un jeton d'accès avec des autorisations Gestion_Pages. Puis appelez
https://graph.facebook.com/<user_id>/accounts?access_token=<access_token>
Cela listera toutes les pages que l'utilisateur a accès et fournira les jetons d'accès pour chacun. Vous pouvez ensuite utiliser ces jetons pour poster comme page.
C'est comme ça que je le fais avec PHP SDK 4.0 et graphique 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();
}
Vous devez récupérer Access_tokens pour les pages et les applications que l'utilisateur administre.
Les jetons d'accès peuvent être interrogés par appel /{user_id}/comptes via l'API graphique.
Plus de détails:
https://developers.facebook.com/docs/facebook-login/permissions/v2. -> Référence -> Pages
L'API graphique attend le paramètre page_id
(L'ID d'objet de la page du ventilateur) doit être transmis en tant qu'argument aux appels API pour obtenir les événements postés dans un mur de fanpage. Non mentionné nulle part dans la documentation officielle de l'API graphique, mais cela fonctionne. Je l'ai testé avec succès avec l'officiel PHP SDK V3.0.1
Les autorisations d'application requises seraient Create_Event et Manage_Pages
Un exemple ressemblerait à ceci:
//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);
La réponse réside avec l'acquisition d'une permission de "pages pages" sur le FB:login
bouton, comme ça:
<fb:login-button perms="publish_stream,manage_pages" autologoutlink="true"></fb:login-button>`
Lorsque vous obtenez ces autorisations, vous pouvez ensuite obtenir une liste structurée de toutes les pages que l'utilisateur connecté est un administrateur de. L'URL à appeler c'est:
https://graph.facebook.com/me/accounts?access_token=YourAccessToken
Je déteste la documentation Facebook, mais voici une page avec certaines des informations à ce sujet: https://developers.facebook.com/docs/reference/api/ Voir la "autorisation" et 'page " Connexion des sections en particulier sur cette page.
Une excellente ressource pour mettre tout cela ensemble (pour les développeurs de coldfusion) est la CFC de Jeff Gladnick sur Ria Forge: http://facebookgraph.riaforge.org/
J'ai ajouté l'UDF suivant à la CFC de Jeff si vous souhaitez l'utiliser:
<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>
Ce que ce retour est une structure de toutes les pages que l'utilisateur connecté est un administrateur de. Il renvoie le nom de la page, l'ID, l'Access_Token et la catégorie (non nécessaires dans ce contexte).
Donc, très important: L'ID est ce que vous passez pour définir quelle page vous postez-vous et l'Access_Token est ce que vous passez pour définir qui vous êtes Poster comme.
Une fois que vous avez la liste des pages, vous pouvez analyser les données pour obtenir un tableau de trois éléments avec:
ID - Access_Token - Nom
Soyez prudent cependant, car l'accès à Facebook utilise des personnages étranges. Faites-moi savoir si vous avez besoin d'une aide supplémentaire.