Facebook 'Friends.getAppUsers' โดยใช้ Graph API


87

ฉันมีแอปพลิเคชันที่ใช้การเรียก REST API เก่าFriends.getAppUsersเพื่อรับรายชื่อเพื่อนสำหรับผู้ใช้ปัจจุบันที่อนุญาตแอปพลิเคชันของฉัน

ฉันได้อ่านเอกสารแล้วฉันจะทำสิ่งนี้กับ Graph API ได้อย่างไร ตัวอย่างนี้จะเป็นอย่างไร?

คำตอบ:


119

ฉันค้นหาอยู่พักหนึ่งและฉันก็คิดว่าสิ่งนี้ไม่สามารถทำได้โดยใช้ 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 :


4
อ๋อ; ฉันตอบคำถามของคุณด้วยคำตอบนี้: facebook.stackoverflow.com/questions/7956639/…
Igy

2
แบบสอบถามนี้ตรวจสอบการติดตั้งสำหรับแอปพลิเคชันใด
iOS Monster

3
สมมติว่าคุณไม่ได้ใช้ฟิลด์อื่น (เช่นอีเมลวันเกิด ฯลฯ ) เพื่อการใช้งานที่สมบูรณ์/me/friends?fields=id,name,installedซึ่งจะรักษาลำดับฟิลด์และข้อมูลมาตรฐานที่ส่งคืนโดยไม่?fields=ได้กำหนด (จริงในวันที่ 2012/12/05)
plasmid87

5
ในขณะที่เขียนข้อความค้นหานี้จะส่งคืนเพื่อนทั้งหมด (แม้ว่าinstalledจะไม่เป็นความจริงก็ตาม เราจำเป็นต้องตรวจสอบด้วยตนเองว่ามีinstalledฟิลด์สำหรับผู้ใช้แต่ละรายหรือไม่
Pankaj Bhambhani

ใช่ถูกต้องฉันได้แก้ไขคำตอบเพื่อให้ชัดเจนว่าคุณได้เพื่อนทั้งหมดและคุณต้องตรวจสอบว่าอันไหนติดธง
Alex

27

สามารถทำได้ด้วย FQL

SELECT uid FROM user
WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = ?)
AND is_app_user = 1

QED!


1
เดิมฉันใช้แบบสอบถามนี้และเนื่องจากเวลาในการตอบสนองตอนนี้ฉันเพิ่งหาเพื่อนทั้งหมดผ่าน API กราฟจากนั้นกรองด้านแอปพลิเคชันของฉันแทน
Richard

คุณสามารถให้รายละเอียดเพิ่มเติมเกี่ยวกับเวลาในการตอบสนองได้หรือไม่ คำถามใช้เวลาตอบกลับนานเกินไปหรือไม่ ฉันได้ทำการทดสอบกับบัญชี FB กับเพื่อนมากกว่า 300 คนและเวลาในการตอบกลับอยู่ที่สองถึงสามวินาที (2 ถึง 4) ซึ่งก็ไม่เลวร้ายเท่า IMO
loungerdork

1
ใช่นั่นคือสิ่งที่ฉันเห็น กราฟ API ใช้ลำดับ 500 มิลลิวินาทีเพื่อส่งคืนเพื่อนมากกว่า 400 คนดังนั้นฉันจึงต้องการรับพวกเขาทั้งหมดแล้วกรองข้างฉัน
Richard

3
คุณยังสามารถใช้me()แทน?
philfreo

8

ใช่ 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 เพื่อรับข้อมูลเกี่ยวกับแอปพลิเคชันของคุณ


2
ฮึ. ดูเหมือนว่าการเปลี่ยนไปใช้ API กราฟเป็นเรื่องที่น่าปวดหัวมากกว่าที่ฉันหวังไว้ในตอนแรก
Richard

4
อาจง่ายกว่าที่จะทำทุกอย่างที่คุณต้องการ (ยกเว้นการเผยแพร่) โดยใช้ FQL ที่แย่ที่สุด Graph API จะไม่ให้ทุกสิ่งที่คุณต้องการและอย่างดีที่สุดก็จะทำให้ยากที่จะหาวิธีทำ
Daniel Schaffer

6

REST API เก่า:

$facebook->api_client->friends_getAppUsers();

ใหม่ Graph API:

$facebook->api(array('method' => 'friends.getAppUsers'));

4
การเรียกเมธอด SDK นี้ใช้ API ที่เหลือเก่าภายใต้ฝาครอบ มันไม่ใช่ API ของกราฟ :-(
Richard

5

ฉันได้ทำการตรวจสอบปัญหานี้หลายครั้งแล้ว จากสิ่งที่ฉันสามารถบอกได้ว่าไม่มีวิธีใดในการFriends.getAppUsersใช้ Graph API SDK ล่าสุดที่ Facebook จัดหาให้ล้วนใช้ REST API เก่าเพื่อหาเพื่อนโดยใช้แอปพลิเคชัน


6
มันค่อนข้างเก่าและไม่ใช่คำตอบที่ถูกต้องอีกต่อไป ตรวจสอบคำตอบของ Alex ที่ด้านบน
Bach

อาจไม่ใช่คำตอบที่ถูกต้อง แต่เป็นคำตอบของ OP และเห็นได้ชัดว่าดีกว่าที่จะโหวตตัวเองมากกว่าทำเครื่องหมายคำตอบที่ถูกต้องว่าถูกต้องเพราะอัตตา
Ajax

4

เมื่อใช้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
        }
    }
}

1

วิธีแก้ปัญหาคือทำการกรองด้วยตัวคุณเอง สมมติว่าคุณมี uid ทั้งหมดของผู้ใช้ที่สมัครใช้งานอยู่ในฐานข้อมูลของคุณเอง ดังนั้นก่อนอื่นให้หา uids ของเพื่อนของผู้ใช้ทั้งหมดและเลือกผู้ใช้จากฐานข้อมูลของคุณที่มี uids ที่ตรงกัน

โปรแกรม Facebook Graph API ใหม่ดูเหมือนจะทำงานได้ไม่ดีนักและไม่ค่อยมีความคิด ดูเหมือนว่าพวกเขาจะรีบเผยแพร่บน Facebook f8ก่อนที่มันจะเติบโตเต็มที่และไม่มีฟังก์ชั่นมากมายที่เคยมีมาก่อน


0

คุณยังสามารถเรียก REST API เก่าใน Graph API ใหม่ได้ ที่ถูกต้องในระดับจังหวัด

อีกทางเลือกหนึ่งคือการใช้ FQL เพื่อหาเพื่อนของผู้ใช้แอปพลิเคชัน

ฉันไม่แน่ใจว่ามีวิธีดำเนินการโดยใช้ Graph API หรือไม่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.