J'utilise le graphique api.
J'ai un utilisateur connecté et je souhaite obtenir une liste des identifiants de page de toutes les pages dont l'utilisateur est administrateur.
Y-a-t'il une façon de le faire? Les docs sont plutôt mauvais - et circulaires.
C'est simple avec l'API graphique. Pas:
manage_pages
de l'utilisateur (autorisations étendues).Vous pouvez tester cette procédure dans l'explorateur de graphes -> Il suffit de cliquer sur 'Obtenir le jeton d'accès' bouton-> sous 'Autorisation étendue' cochez 'manage_pages' & envoyez-le. Il vous donnera le JSON admin-page-details.
Je l'ai résolu avec un peu de FQL:
FB.api({method: 'fql.multiquery',
access_token: <access_token>,
queries: {
query1: 'select page_id from page_admin where uid = ' + <uid>,
query2: 'select page_id, name, page_url from page where page_id in (select page_id from #query1)'
}
}, function(queries){
var pages = queries[1].fql_result_set;
}}
Vous pouvez appeler FB.api(/me/accounts)
si vous ne souhaitez pas utiliser FQL.
"comptes" est une connexion de l'objet utilisateur. Voir la documentation correspondante @ http://developers.facebook.com/docs/reference/api/user
Bien sûr, avec Facebook, il y a toujours un piège. Pour le moment, cette méthode renverra non seulement les pages dont l'utilisateur est un administrateur, mais également les applications installées. Je suis presque certain que ce n'est PAS le comportement souhaité - je me souviens de l'avoir utilisé il y a quelques mois et de ne recevoir qu'une liste de pages. La documentation ne mentionne pas non plus les applications de cette liste.
Il s'agit toutefois d'un problème facile à résoudre: Facebook renvoie le nom, la catégorie et l'identifiant de chaque élément de la liste, et chaque application possède une catégorie "Application". Je m'assure simplement de ne répertorier que les éléments dont la catégorie n'est pas "Application".
aller à cette adresse
Cliquez simplement sur get Access Token et accédez à extended Permission.
Cochez la case manage_pages
et cliquez sur Obtenir un jeton d'accès
Puis, écrivez ceci sous FQL
moi/comptes? type = page
Cliquez sur Soumettre. et vous obtiendrez toutes les listes de pages qui ont ouvert une session utilisateur admin
Vous demandez la permission avec le SDK JavaScript lors de la connexion
FB.login(function(){}, {perms:'manage_pages'});
et une fois qu’ils se sont connectés, vous pouvez récupérer les pages (et les applications) comme suit:
FB.api('/me/accounts', function(response){
console.log(response);
})
Vous pouvez également utiliser l'autorisation "pages_show_list", si vous souhaitez uniquement la liste des pages facebook dont l'utilisateur est l'administrateur.
La permission "manage_pages" demandera à l'utilisateur la permission de gérer ses pages, ce qui peut être trop intrusif en fonction de vos besoins.
Autorisation
$facebook->getLoginUrl( array( "scope" => "manage_pages" ) );
action
$accounts = $facebook->api('/me/accounts');
return $accounts;
Notez que votre solution renvoie Pages ainsi que Applications . Si vous voulez strictement Pages, vous pouvez utiliser FQL Multiquery avec une clause "Type not equals" comme ceci:
{
"query1":"select page_id from page_admin where uid = me()",
"query2":"select page_id, name, page_url, type from page where type!='APPLICATION' AND page_id in (select page_id from #query1)"
}
<head>
<link rel="stylesheet" href="@Url.Content("~/Content/jquery.remodal.css")">
</head>
<body>
<script type="text/javascript" src="@Url.Content("~/Scripts/Home/jquery.remodal.js")"></script>
<div class="remodal" id="page-selector-remodal" data-remodal-id="pageselector">
<p>Please select a facebook page Share </p>
<div id="page-name-container">
<select id="page-name" class="form-control">
</select>
</div>
<a class="remodal-confirm" id="facebookPageSelectSubmit" href="#">OK</a>
<a class="remodal-cancel" id="remodal-cancel" href="#">CANCEL</a>
</div>
<div data-remodal-id="modal-status">
<p id="modal-status-content">
The Account you have selected does not have Email.
</p>
<br>
<a class="remodal-confirm" href="#">OK</a>
</div>
<script type="text/javascript>
(function (d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s);
js.id = id;
js.src = "//connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
window.fbAsyncInit = function () {
FB.init({
appId: 'YOUR APP ID',
cookie: true, // enable cookies to allow the server to access
// the session
xfbml: true, // parse social plugins on this page
version: 'v2.2' // use version 2.1
});
};
var pageSelector = $('[data-remodal-id=pageselector]').remodal();
var modalstatus = $('[data-remodal-id=modal-status]').remodal();
function statusChangeCallback(response) {
if (response.status === 'connected') {
// Logged into your app and Facebook.
//testAPI();
} else if (response.status === 'not_authorized') {
// The person is logged into Facebook, but not your app.
$("#modal-status-content").empty().html(response.status);
modalstatus.open();
}
else {
$("#modal-status-content").empty().html(response.status);
modalstatus.open();
// The person is not logged into Facebook, so we're not sure if
// they are logged into this app or not.
document.getElementById('status').innerHTML = 'Please log ' +
'into Facebook.';
}
}
function FacebookHandler() {
FB.login(function (result) {
if (result != null && result.authResponse != null && result.authResponse != undefined) {
facebookPageData = result;
FB.api('/me/accounts', function (accountsResult) {
if (accountsResult != null && accountsResult.data.length != 0) {
//open the remodal here
pageSelector.open();
facebookAccountsData = accountsResult;
var data = accountsResult['data'];
if (data != null) {
for (var i = 0; i < data.length; i++) {
$("#page-name").append('<option value="' + data[i].id + '">' + data[i].name + '</option>');
}
}
unblockUI('body');
$("#flip-container, #feature-container, #branding-container, #intro-arrow-container, #share-container, #copyright-text-container").hide();
$("body").css("padding-right", "0");
}
else {
$("#modal-status-content").empty().html("The Account you have selected does not have any facebook page,<br />Post to Wall.");
modalstatus.open();
pageSelector.open();
unblockUI('body');
}
});
}
else {
$("#modal-status-content").empty().html("Unable to retrieve your details from facebook, try again after sometime.");
modalstatus.open();
unblockUI('body');
}
}, { scope: 'manage_pages, publish_stream' });
}
$("#facebookPageSelectSubmit").on("click", function () {
var facebookpageId = $("#page-name option:selected").val();
if (facebookpageId != null) {
FB.api('/' + facebookpageId, function (identity) {
if (identity != null) {
FB.api('/' + facebookpageId, { fields: 'access_token' }, function (resp) {
if (resp.access_token != null) {
//Get the "resp"(Data) here
}
else {
}
});
}
else {
}
});
}
else {
}
});
</script>
//Finally call the "FacebookHandler()" function on click
</body>
Avec la nouvelle API GRAPH v3 avec Javascript, utilisez le champ "tâches" au lieu du champ "perms".
//Example JS Call
FB.api('/me/accounts?fields=name,picture.type(square),access_token,tasks', function(response) {console.log(response)});
//Example Response
{
"name": "Engage",
"picture": {
"data": {
"height": 50,
"is_silhouette": false,
"url": "https://scontent.xx.fbcdn.net/v/t1.0-1/c1.0.50.50a/p50x50/430597_259746387431503_2144341304_n.jpg?_nc_cat=103&_nc_eui2=AeGVrU8Wxe7k5BMvRXOEAcUo9dMIxyeMP9POPkYDwfgdRl8QquAtz1GcwXpJaK4z_0o&_nc_ht=scontent.xx&oh=e5b952a4adbbcd1b1af6b71b688f7284&oe=5CF9A64C",
"width": 50
}
},
"access_token": "XXXXXXXXXX",
"id": "253263371413138",
"tasks": [
"ANALYZE",
"ADVERTISE",
"MODERATE",
"CREATE_CONTENT",
"MANAGE"
]
}
Au lieu de regarder 'ADMINISTER' dans le tableau, cherchez 'MANAGE'.
Toutes les informations ici: https://developers.facebook.com/docs/pages/access-tokens