sesion - Facebook: obtener la lista de páginas que un usuario es administrador de
no puedo crear nombre de usuario en mi pagina de facebook (9)
Estoy usando el gráfico api.
Tengo un usuario conectado y quiero recuperar una lista de identificadores de página de todas las páginas de las que el usuario es administrador.
¿Hay alguna forma de hacer esto? Los documentos son bastante malos, y circulares.
Es simple con Graph API. Pasos:
- Obtenga el permiso de
manage_pages
del usuario (permisos extendidos). - Llame a Graph API - https://graph.facebook.com/me/accounts
Puede probar este procedimiento en el explorador de gráficos -> Simplemente haga clic en el botón ''Obtener Token de acceso'' - > en ''Permiso extendido'' , seleccione ''manage_pages'' y envíelo. Le dará los detalles de la página de administración JSON.
Lo resolví con algunos 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;
}}
Puede llamar a FB.api(/me/accounts)
si no desea usar FQL.
''cuentas'' es una conexión del objeto Usuario. Consulte la documentación para este @ http://developers.facebook.com/docs/reference/api/user
Por supuesto, con Facebook, siempre hay una trampa. En este momento, este método devolverá no solo las páginas de las que el usuario es administrador, sino también las aplicaciones que han instalado. Estoy casi seguro de que este NO es el comportamiento previsto. Me parece recordar que lo usé hace unos meses y que solo recibí una lista de páginas. La documentación tampoco menciona las aplicaciones en esta lista.
Sin embargo, este es un problema fácil de resolver: Facebook devuelve el nombre, la categoría y la identificación para cada elemento de la lista, y cada aplicación tiene una categoría de ''Aplicación''. Simplemente me estoy asegurando de que solo publique artículos cuya categoría no sea ''Aplicación''.
También puede usar el permiso "pages_show_list" si solo desea la lista de páginas de Facebook de las que es administrador el usuario.
El permiso "manage_pages" le pedirá permiso al usuario para administrar sus páginas, lo que puede ser demasiado intrusivo en función de lo que necesite.
Tenga en cuenta que su solución devuelve páginas y aplicaciones . Si quiere estrictamente Pages, puede usar FQL Multiquery con una cláusula "Type not equals" como esta:
{
"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)"
}
Usted solicita el permiso con el JavaScript SDK al iniciar sesión
FB.login(function(){}, {perms:''manage_pages''});
y luego, una vez que inician sesión, pueden recuperar las páginas (y aplicaciones) de la siguiente manera:
FB.api(''/me/accounts'', function(response){
console.log(response);
})
ve a esta dirección
Simplemente haga clic en obtener el token de acceso y vaya a Permiso extendido
Marque la casilla de verificación manage_pages
y haz clic en Obtener ficha de acceso
Luego, bajo FQL escribe esto
me / accounts? type = page
Haga clic en Enviar. y obtendrá todas las listas de páginas que iniciaron sesión admin. usuario
Permiso
$facebook->getLoginUrl( array( "scope" => "manage_pages" ) );
acción
$accounts = $facebook->api(''/me/accounts'');
return $accounts;
<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>