Я використовую графічний api.
У мене зареєстрований користувач, і я хочу повернути список ідентифікаторів сторінок усіх сторінок, адміністратором яких є користувач.
Чи є спосіб зробити це? Документи досить погані - і круглі.
Я використовую графічний api.
У мене зареєстрований користувач, і я хочу повернути список ідентифікаторів сторінок усіх сторінок, адміністратором яких є користувач.
Чи є спосіб зробити це? Документи досить погані - і круглі.
Відповіді:
Це просто за допомогою API Graph. Кроки:
manage_pages
дозвіл від користувача (розширені дозволи).Ви можете протестувати цю процедуру в програмі графіків -> Просто натисніть кнопку «Отримати маркер доступу» - > у розділі «Розширений дозвіл» перевірте «manage_pages» і надішліть її. Він надасть вам інформацію про JSON на сторінці адміністратора.
Я вирішив це за допомогою 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;
}}
Ви можете зателефонувати, FB.api(/me/accounts)
якщо не хочете використовувати FQL.
'акаунти' - це з'єднання об'єкта Користувача. Див. Документацію до цього @ http://developers.facebook.com/docs/reference/api/user
Звичайно, у Facebook завжди є підводка. Зараз цей метод повертає не лише сторінки, адміністратором яких є користувач, але й те, які програми вони встановили. Я майже впевнений, що це НЕ передбачувана поведінка - здається, я пам'ятаю, як користувався цим кілька місяців тому і отримував лише список сторінок. У документації також не згадується про програми у цьому списку.
Цю проблему легко вирішити - Facebook повертає ім’я, категорію та ідентифікатор кожного елемента зі списку, і кожна програма має категорію „Додаток”. Я просто переконуюсь, що перелічую лише ті елементи, категорія яких не є "Програма".
перейдіть за цією адресою
Просто натисніть на отримати маркер доступу та перейдіть до розширеного дозволу
Установіть прапорець manage_pages
і натисніть Отримати маркер доступу
Потім під FQL напишіть це
я / облікові записи? type = сторінка
Натисніть Надіслати. і ви отримаєте всі списки сторінок, які увійшли до адміністратора користувача
me/accounts
підтримує type
параметр запиту?
Ви запитуєте дозвіл із JavaScript SDK для входу
FB.login(function(){}, {perms:'manage_pages'});
а потім, як тільки вони увійдуть, ви зможете отримати сторінки (і програми) наступним чином:
FB.api('/me/accounts', function(response){
console.log(response);
})
{perms: 'manage_pages'}
і {scope: 'manage_pages'}
?
Ви також можете використовувати дозвіл "pages_show_list", якщо ви хочете лише список сторінок facebook, адміністратором яких є користувач.
Дозвіл "manage_pages" запитає у користувача дозволу керувати його сторінками, що може бути занадто нав'язливим залежно від того, для чого це потрібно.
Зверніть увагу, що ваше рішення повертає сторінки , а також програми . Якщо ви строго хочете Сторінки, ви можете використовувати FQL Multiquery з реченням "Тип не дорівнює" таким чином:
{
"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)"
}
Дозвіл
$facebook->getLoginUrl( array( "scope" => "manage_pages" ) );
дії
$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>
У новому API GRAPH v3 з Javascript використовуйте поле "завдання" замість поля "хімічна завивка".
//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"
]
}
Замість того, щоб шукати "АДМІНІСТРАТОР" у масиві, шукайте "УПРАВЛІННЯ".
Повна інформація тут: https://developers.facebook.com/docs/pages/access-tokens