Tôi đang trong quá trình tổng hợp một ứng dụng tab Facebook cho một khách hàng tìm nạp và hiển thị các bài đăng từ một trang Facebook. Ứng dụng này cũng cung cấp khả năng thêm bài đăng mới vào trang và nhận xét về bài đăng hiện có. Điều này đạt được bằng cách sử dụng Facebook Graph API (thông qua PHP SDK).Tìm nạp các bài đăng của bên thứ ba từ Facebook Graph API
Tôi có mọi thứ hoạt động nhưng đã gặp sự cố liên quan đến việc đăng bài từ ứng dụng của tôi. Khi người dùng gửi một bài đăng, nó được gửi đến Graph API thông qua yêu cầu sau.
$facebook->api([PAGE_ID]/feed', 'POST', array(
'message' => [MESSAGE]
));
Yêu cầu này là thành công và bài xuất hiện trên trang Facebook có liên quan với "Via tên ứng dụng của tôi" bên dưới nó.
Khi tôi sau đó yêu cầu danh sách bài đăng trên Trang qua API (yêu cầu bên dưới), bài đăng nói trên không xuất hiện.
$posts = $facebook->api([PAGE_ID].'/feed');
Tôi có cảm giác mạnh mẽ là do bài đăng từ ứng dụng của bên thứ ba. Tôi đã nghe nói rằng Facebook "hạ cấp" bài viết của bên thứ ba để khuyến khích việc sử dụng nền tảng riêng của mình. Tất cả các bài đăng được đăng trực tiếp qua Facebook đều xuất hiện.
Tuy nhiên, phải có cách để truy xuất các loại bài đăng này.
Cập nhật cho Fisch dưới
Khi tôi làm cho đường bưu điện đến API, sau ID bài được trả về:
112706495458566_468411663221379
Tuy nhiên, khi tôi thực hiện một yêu cầu API cho nó:
$facebook->api('112706495458566_468411663221379');
Tôi nhận được phản hồi sau:
{
"error": {
"message": "Unsupported get request.",
"type": "GraphMethodException",
"code": 100
}
}
Tuy nhiên, khi tôi thực hiện cùng một yêu cầu nhưng với ID của bài đăng đã được đưa vào yêu cầu/nguồn cấp dữ liệu.
$facebook->api('112706495458566_457890310940181');
Tôi nhận được phản hồi sau.
{
"id": "112706495458566_457890310940181",
"from": {
"category": "Local business",
"name": "Genting Casino Southport",
"id": "112706495458566"
},
"story": "\"Very well done to ste,...\" on their own status.",
"privacy": {
"value": ""
},
"type": "status",
"application": {
"name": "Mobile",
"id": "2915120374"
},
"created_time": "2012-11-25T22:12:21+0000",
"updated_time": "2012-11-25T22:12:21+0000",
"comments": {
"count": 0
}
}
Vì vậy, vì lý do nào đó, Facebook thậm chí không cho phép tôi tra cứu bài đăng bằng ID của nó.
Update # 2
Trong tìm kiếm của tôi cho một câu trả lời cho điều này, tôi đã đi qua một nghiên cứu trong đó tăng cường sự nghi ngờ trước đây của tôi về "cân" được gán cho bài viết ứng dụng của bên thứ ba.
Từ báo cáo Trình kiểm tra EdgeRank: "Khi một đối tượng được tạo trong Facebook, nó được gán một trọng số. Chúng tôi tin rằng Facebook giảm chiến lược trọng lượng của các đối tượng được tạo thông qua API. Lý do đằng sau chiến lược này là khuyến khích tạo nhiều nội dung hơn trong Nền tảng Facebook. Điều này cuối cùng làm tăng giá trị của nền tảng của họ trong khi tăng số lần hiển thị quảng cáo."
http://adage.com/article/digitalnext/posting-facebook-truth-party-applications/229694
Điều này có thể giải thích tại sao các bài đăng không đi qua trong thư mục/feed hoặc phản ứng API/bài.
Tuy nhiên, điều này không giải thích tại sao các API thậm chí sẽ không trả lại bài bởi ID của nó (xem cập nhật ở trên)
Tất cả những gì tôi có thể nghĩ là Facebook không xếp hạng ứng dụng của bên thứ ba là "Bài đăng" thực và do đó không đẩy chúng qua phản hồi API thích hợp. không thể tìm thấy bằng chứng về điều này trong tài liệu Facebook.
Update # 3
Dựa trên các ý kiến dưới đây, bây giờ tôi cố gắng làm điều tương tự nhưng sử dụng một tài khoản Facebook mà không phải là chủ sở hữu của ứng dụng hoặc trong thực tế có bất kỳ mối quan hệ admin để bất kỳ trang nào trên Facebook (tài khoản Facebook cá nhân của riêng tôi).
tôi đã cho phép ứng dụng sử dụng hộp thoại OAuth và đã chấp nhận permisions sau:
- user_birthday
- publish_stream
Với bóng thẻ truy cập mới của tôi, tôi làm yêu cầu API sau:
$post = $facebook->api('112706495458566/feed', 'POST', array(
'message' => 'this is a test'
));
Để mà tôi nhận được phản hồi như sau:
array(1) {
["id"] => string(31) "112706495458566_470663409662871"
}
sau đó tôi kiểm tra trang Facebook thực tế, các bài mà tôi vừa gửi đã xuất hiện từ tài khoản người dùng Facebook của tôi như mong đợi.
sau đó tôi thực hiện yêu cầu sau đây để lấy tất cả các bài viết trên trang:
$posts = $facebook->api('112706495458566/feed');
Để mà tôi nhận được một mảng dài của tất cả các bài viết trên trang (mà tôi wont gửi ở đây). Tuy nhiên, bài đăng mà tôi vừa gửi (và nhận lại một ID) không xuất hiện.
Sau đó tôi thực hiện yêu cầu trực tiếp cho bài đăng đó bằng ID được trả về bởi yêu cầu POST.
$post = $facebook->api('112706495458566_470663409662871');
Điều này ném ngoại lệ sau (theo lần thử trước).
GraphMethodException: Unsupported get request.
Để nhắc lại, nỗ lực này đã sử dụng tài khoản hoàn toàn không liên quan đến ứng dụng hoặc bất kỳ trang nào mà chúng tôi đang cố tìm nạp dữ liệu. Tài khoản cũng chưa bao giờ có bất kỳ liên hệ nào với ứng dụng (nghĩa là đây là lần đầu tiên các quyền đã được chấp nhận và khóa oAuth được tạo).
Bạn đã thử chạy ứng dụng của mình với tư cách là người dùng không phải quản trị viên hay bạn chỉ thử nghiệm ứng dụng với tư cách quản trị viên ứng dụng? Nếu sau này, hãy thử chạy với tư cách người dùng không phải quản trị viên. – Puzbie
Chắc chắn, tôi đã cố gắng sao chép vấn đề của bạn bằng cách sử dụng cả một ứng dụng tab và một trang web riêng biệt, nhưng đã không thể làm như vậy. Bạn có thể cho tôi biết, khách hàng của bạn là chủ sở hữu của trang facebook, cũng như ứng dụng được tab? Tôi đã nghĩ họ phải nhưng không muốn thừa nhận bất cứ điều gì. – Puzbie
Bạn có chắc chắn điều này không phải do lỗi này không? – Igy