Tôi đang sử dụng api biểu đồ.
Tôi có một người dùng đã đăng nhập và muốn lấy lại danh sách id trang của tất cả các trang mà người dùng đó là quản trị viên.
Có cách nào để làm điều này? Các tài liệu khá tệ - và hình tròn.
Câu trả lời:
Nó đơn giản với API Đồ thị. Các bước:
manage_pages
quyền từ người dùng (quyền mở rộng).Bạn có thể kiểm tra quy trình này trong trình khám phá đồ thị -> Chỉ cần nhấp vào nút 'Nhận Mã thông báo Truy cập' -> trong phần ' Quyền mở rộng ' , chọn' management_pages 'và gửi nó. Nó sẽ cung cấp cho bạn JSON chi tiết trang quản trị.
Tôi đã giải quyết nó bằng một số 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;
}}
Bạn có thể gọi FB.api(/me/accounts)
nếu không muốn sử dụng FQL.
'tài khoản' là một kết nối của đối tượng Người dùng. Xem tài liệu cho @ http://developers.facebook.com/docs/reference/api/user này
Tất nhiên, với Facebook, luôn có một sự bắt kịp. Ngay bây giờ, phương thức này sẽ trả về không chỉ các trang mà người dùng là quản trị viên mà còn trả về những ứng dụng họ đã cài đặt. Tôi gần như khẳng định đây KHÔNG phải là hành vi dự định - dường như tôi nhớ đã sử dụng điều này vài tháng trước và chỉ nhận được danh sách các trang. Tài liệu cũng không đề cập đến các ứng dụng trong danh sách này.
Đây là một vấn đề dễ giải quyết - Facebook trả về tên, danh mục và id cho từng mục trong danh sách và mỗi ứng dụng có một danh mục là 'Ứng dụng'. Tôi chỉ đơn giản là đảm bảo rằng tôi chỉ liệt kê các mục có danh mục không phải là 'Ứng dụng'.
đi đến địa chỉ này
Chỉ cần nhấp vào nhận mã thông báo Access và chuyển đến Quyền mở rộng
Đánh dấu vào hộp kiểm management_pages
và nhấp vào Nhận mã thông báo truy cập
Sau đó trong FQL viết điều này
tôi / tài khoản? type = trang
Nhấp vào Gửi. và bạn sẽ nhận được tất cả danh sách trang đã đăng nhập quản trị viên người dùng
me/accounts
hỗ trợ type
tham số truy vấn?
Bạn yêu cầu quyền với SDK JavaScript khi đăng nhập
FB.login(function(){}, {perms:'manage_pages'});
và sau đó khi họ đăng nhập, bạn có thể truy xuất các trang (và ứng dụng) như sau:
FB.api('/me/accounts', function(response){
console.log(response);
})
{perms: 'manage_pages'}
và là {scope: 'manage_pages'}
gì?
Lưu ý rằng giải pháp của bạn trả về Trang cũng như Ứng dụng . Nếu bạn thực sự muốn Trang, bạn có thể sử dụng Đa truy vấn FQL với mệnh đề "Loại không bằng" như sau:
{
"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)"
}
Sự cho phép
$facebook->getLoginUrl( array( "scope" => "manage_pages" ) );
hoạt động
$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>
Với API GRAPH v3 mới với Javascript, hãy sử dụng trường 'nhiệm vụ' thay vì trường '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"
]
}
Thay vì tìm kiếm 'ADMINISTER' trong mảng, hãy tìm kiếm 'MANAGE'.
Thông tin đầy đủ tại đây: https://developers.facebook.com/docs/pages/access-tokens