ฉันมีแอปพลิเคชันที่ใช้การเรียก REST API เก่าFriends.getAppUsers
เพื่อรับรายชื่อเพื่อนสำหรับผู้ใช้ปัจจุบันที่อนุญาตแอปพลิเคชันของฉัน
ฉันได้อ่านเอกสารแล้วฉันจะทำสิ่งนี้กับ Graph API ได้อย่างไร ตัวอย่างนี้จะเป็นอย่างไร?
ฉันมีแอปพลิเคชันที่ใช้การเรียก REST API เก่าFriends.getAppUsers
เพื่อรับรายชื่อเพื่อนสำหรับผู้ใช้ปัจจุบันที่อนุญาตแอปพลิเคชันของฉัน
ฉันได้อ่านเอกสารแล้วฉันจะทำสิ่งนี้กับ Graph API ได้อย่างไร ตัวอย่างนี้จะเป็นอย่างไร?
คำตอบ:
ฉันค้นหาอยู่พักหนึ่งและฉันก็คิดว่าสิ่งนี้ไม่สามารถทำได้โดยใช้ Graph API
อย่างไรก็ตามฉันโพสต์คำถามที่คล้ายกันการเปลี่ยน GetAppUsers รุ่นเก่าโทรหาเพื่อนของผู้ใช้ที่ใช้แอปพลิเคชันของฉันหรือไม่ สำหรับ API เฉพาะที่ฉันใช้และได้รับคำตอบทั่วไปที่ดี
https://graph.facebook.com/me/friends?fields=installed
หรือมากกว่าโดยทั่วไป
https://graph.facebook.com/{user id}/friends?fields=installed
สิ่งนี้จะส่งคืนเพื่อนทั้งหมดพร้อมกับฟิลด์เพิ่มเติม "installed = true" สำหรับเพื่อนที่ใช้แอปพลิเคชัน
นี่คือการทำงานในGraph API Explorer :
/me/friends?fields=id,name,installed
ซึ่งจะรักษาลำดับฟิลด์และข้อมูลมาตรฐานที่ส่งคืนโดยไม่?fields=
ได้กำหนด (จริงในวันที่ 2012/12/05)
installed
จะไม่เป็นความจริงก็ตาม เราจำเป็นต้องตรวจสอบด้วยตนเองว่ามีinstalled
ฟิลด์สำหรับผู้ใช้แต่ละรายหรือไม่
สามารถทำได้ด้วย FQL
SELECT uid FROM user
WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = ?)
AND is_app_user = 1
QED!
me()
แทน?
ใช่ Graph API ได้รับการบันทึกไว้อย่างน่ากลัว ฉันไม่เห็นเอกสารสำหรับประเภท "แอปพลิเคชัน" แต่อ้างอิงข้อมูลของแอปพลิเคชันในเอกสาร:
https://graph.facebook.com/2439131959
ดังนั้นบางทีคุณอาจได้รับสมาชิกของแอปพลิเคชันโดยใช้ไวยากรณ์กลุ่ม?
https://graph.facebook.com/2439131959/members
คุณจะต้องมีเซสชันที่ได้รับการรับรองความถูกต้องเพื่อทดสอบ มิฉะนั้นดูเหมือนว่า Facebook จะผลักดันให้เราใช้ FQL เพื่อส่งคำถามโดยตรง:
http://developers.facebook.com/docs/reference/fql/application
คุณสามารถดำเนินการสอบถาม FQL โดยเรียก https://api.facebook.com/method/fql.query?query=QUERY คุณสามารถระบุรูปแบบการตอบกลับเป็น XML หรือ JSON ด้วยพารามิเตอร์เคียวรีรูปแบบ
ดังนั้นคุณสามารถส่งแบบสอบถาม FQL เพื่อรับข้อมูลเกี่ยวกับแอปพลิเคชันของคุณ
REST API เก่า:
$facebook->api_client->friends_getAppUsers();
ใหม่ Graph API:
$facebook->api(array('method' => 'friends.getAppUsers'));
ฉันได้ทำการตรวจสอบปัญหานี้หลายครั้งแล้ว จากสิ่งที่ฉันสามารถบอกได้ว่าไม่มีวิธีใดในการFriends.getAppUsers
ใช้ Graph API SDK ล่าสุดที่ Facebook จัดหาให้ล้วนใช้ REST API เก่าเพื่อหาเพื่อนโดยใช้แอปพลิเคชัน
เมื่อใช้restFBฉันทำสิ่งต่อไปนี้ (ขอบคุณ Igy / Alex สำหรับคำแนะนำ) โปรดทราบว่า Facebook ส่งคืนอาร์เรย์ของ ID เพื่อนที่มี "installed" = true หากผู้ใช้ติดตั้ง (ดังที่เห็นได้ที่นี่ )
ก่อนอื่นให้ขยายคลาสผู้ใช้เพิ่มinstalled
ฟิลด์:
import com.restfb.Facebook;
import com.restfb.types.User;
public class InstalledUser extends User {
@Facebook
private boolean installed;
public InstalledUser() {
}
public boolean getInsatlled() {
return installed;
}
}
ถัดไปโดยใช้ DefaultFacebookClient:
FacebookClient facebook = new DefaultFacebookClient(pFacebookAccessToken);
Connection<InstalledUser> installedFacebookUsers = facebook.fetchConnection("/" + pFacebookId + "/friends", InstalledUser.class, Parameter.with("fields", "installed"));
for (List<InstalledUser> friends : installedFacebookUsers) {
for (InstalledUser friend : friends) {
if (friend.getInsatlled()) {
// Add friend.getId() to a list of ID, or whatever
}
}
}
วิธีแก้ปัญหาคือทำการกรองด้วยตัวคุณเอง สมมติว่าคุณมี uid ทั้งหมดของผู้ใช้ที่สมัครใช้งานอยู่ในฐานข้อมูลของคุณเอง ดังนั้นก่อนอื่นให้หา uids ของเพื่อนของผู้ใช้ทั้งหมดและเลือกผู้ใช้จากฐานข้อมูลของคุณที่มี uids ที่ตรงกัน
โปรแกรม Facebook Graph API ใหม่ดูเหมือนจะทำงานได้ไม่ดีนักและไม่ค่อยมีความคิด ดูเหมือนว่าพวกเขาจะรีบเผยแพร่บน Facebook f8ก่อนที่มันจะเติบโตเต็มที่และไม่มีฟังก์ชั่นมากมายที่เคยมีมาก่อน
คุณยังสามารถเรียก REST API เก่าใน Graph API ใหม่ได้ ที่ถูกต้องในระดับจังหวัด
อีกทางเลือกหนึ่งคือการใช้ FQL เพื่อหาเพื่อนของผู้ใช้แอปพลิเคชัน
ฉันไม่แน่ใจว่ามีวิธีดำเนินการโดยใช้ Graph API หรือไม่