Facebook Graph API: รับรูปภาพขนาดใหญ่ในคำขอเดียว


88

ฉันกำลังใช้Graph API Explorerเพื่อทำการทดสอบบางอย่าง นั่นเป็นเครื่องมือที่ดี

ฉันต้องการรับรายชื่อเพื่อนของผู้ใช้พร้อมชื่อรหัสและรูปภาพของเพื่อน ดังนั้นฉันจึงพิมพ์:

https://graph.facebook.com/me/friends?fields=id,picture,name

แต่รูปภาพมีขนาดเพียง 50x50 และฉันต้องการขนาดใหญ่กว่านี้ในคำขอนี้

เป็นไปได้ไหม ?

คำตอบ:


68

คุณไม่จำเป็นต้องดึงแอตทริบิวต์ "รูปภาพ" มีวิธีที่สะดวกกว่ามากสิ่งเดียวที่คุณต้องการคือ userid ดูตัวอย่างด้านล่าง

https://graph.facebook.com/user_id/picture?type=large

ประเภท ps กำหนดขนาดที่คุณต้องการ

โปรดทราบว่าการใช้โทเค็นที่มีสิทธิ์ขั้นพื้นฐาน / me / friends จะส่งคืนรายชื่อเพื่อนที่มีแอตทริบิวต์ id + name เท่านั้น


1
แต่ฉันไม่เห็นด้วยกับประโยคสุดท้ายของคุณ: ด้วยการอนุญาตขั้นพื้นฐานคุณสามารถเข้าถึงแอตทริบิวต์ id + name ได้มากกว่าเช่นgraph.facebook.com/btaylor
Martin

29
เอ่อแล้ว "ในคำขอเดียว" ล่ะ?
Iulian Onofrei

4
คุณยังสามารถใช้ full_picture ของรูปภาพ
Bo Pennings

"message": "(# 12) ขอบภาพสำหรับประเภทนี้เลิกใช้งานสำหรับเวอร์ชัน v2.3 ขึ้นไป",
Toolkit

202

ตามที่อธิบายไว้ในข้อบกพร่องนี้บน Facebook คุณยังสามารถขอขนาดภาพที่ต้องการได้ในขณะนี้ผ่านไวยากรณ์ " การขยายช่อง " ใหม่

ชอบมาก:

https://graph.facebook.com/____OBJECT_ID____?fields=picture.type(large)

27
แน่นอน. fields = picture.width (640) จะดีกว่า
kaay

6
ดูเหมือนว่า Facebook Graph API จะเปลี่ยน API Facebook ตอบว่า "รูปภาพไม่รองรับฟิลด์ย่อย" เมื่อฉันพยายามใช้คำแนะนำของคุณ
Phat H. VU

2
ได้รับข้อผิดพลาด: {"error": {"message": "ไม่รองรับคำขอรับโปรดอ่านเอกสาร Graph API ที่developers.facebook.com/docs/graph-api ", "type": "GraphMethodException", "code": 100}}
Vineesh TP

13
ดู? field = full_picture ไฟล์แนบสำหรับแบบสอบถาม 2.x
Kevin

3
ด้วยการเปลี่ยนแปลงใหม่ของ Facebook ไม่สามารถรับภาพขนาดใหญ่ได้ มีใครบอกใบ้ไหม
shadab.tughlaq

82

วิธีที่ดีที่สุดในการหาเพื่อนทุกคน (ที่ใช้แอพนี้ด้วย) ด้วยขนาดรูปภาพที่ถูกต้องคือการใช้การขยายฟิลด์โดยใช้แท็กขนาดใดแท็กหนึ่ง (สี่เหลี่ยมจัตุรัสเล็กปกติใหญ่):

/me/friends?fields=picture.type(large)

(แก้ไข: สิ่งนี้ใช้ไม่ได้อีกต่อไป)

... หรือคุณสามารถระบุความกว้าง / ความสูง:

me/friends?fields=picture.width(100).height(100)

Btw คุณสามารถเขียนได้ดังนี้:

me?fields=friends{picture.type(large)}

1
ขอบคุณสำหรับข้อมูลฉันจะอัปเดตคำตอบ full_picture ดูเหมือนจะใช้ไม่ได้สำหรับเพื่อน ๆ แม้ว่า: / me / friends? fields = full_picture - คุณมีความคิดว่าจะเป็นไปได้อย่างไร?
luschn

34

เปลี่ยนอาร์เรย์ของฟิลด์id,name,pictureเป็นid,name,picture.type(large)

https://graph.facebook.com/v2.8/me?fields=id,name,picture.type(large)&access_token=<the_token>

ผลลัพธ์:

{
   "id": "130716224073524",
   "name": "Julian Mann",
   "picture": {
      "data": {
         "is_silhouette": false,
         "url": "https://scontent.xx.fbcdn.net/v/t1.0-1/p200x200/15032818_133926070419206_3681208703790460208_n.jpg?oh=a288898d87420cdc7ed8db5602bbb520&oe=58CB5D16"
      }
   }
}

7
200 x 200 ใหญ่แค่ไหน?
AlxVallejo

1
ล่าสุด (2.10) Graph API มีขนาดไม่ "ใหญ่":Graph returned an error: (#100) For field 'picture': type must be one of the following values: thumbnail, small, album
Honza

33

คุณสามารถกำหนดขนาดของภาพเป็นพิกเซลได้ดังนี้:

https://graph.facebook.com/v2.8/me?fields=id,name,picture.width(500).height(500)

ในลักษณะเดียวกันtypeสามารถใช้พารามิเตอร์ได้

{user-id}/?fields=name,picture.type(large)

จากเอกสารประกอบ

พิมพ์ enum {เล็กปกติอัลบั้มใหญ่สี่เหลี่ยม}



20

ฉันค้นคว้า Graph API Explorer อย่างกว้างขวางและในที่สุดก็พบ full_picture

https://graph.facebook.com/v2.2/$id/posts?fields=picture,full_picture

ปล. ฉันสังเกตว่า full_picture จะไม่แสดงภาพขนาดเต็มที่ฉันต้องการเสมอไป 'ไฟล์แนบ' ได้

https://graph.facebook.com/v2.2/$id/posts?fields=picture,full_picture,attachments

แสดงเฉพาะความกว้าง: 720px ภาพขนาดใหญ่เท่านั้นที่พบเช่นนี้ สำหรับgraph.facebook.com/photo_id ที่ใหญ่ที่สุดคุณสามารถดูรูปภาพ 6 ขนาดที่แตกต่างกัน
gokhan

ฉันเพิ่งทดสอบสิ่งนี้กับปลายทางของเพื่อน ๆ และมันไม่ได้ผล
luschn

9

ฮึ่ม ... ฉันคิดว่าฉันพบทางออกแล้ว

ในความเป็นจริงสามารถขอ

https://graph.facebook.com/me/friends?fields=id,name

อ้างอิงจากhttp://developers.facebook.com/docs/reference/api/ (ส่วน "รูปภาพ") URL ของรูปถ่ายของโปรไฟล์สามารถสร้างได้ด้วยรหัสผู้ใช้

ตัวอย่างเช่นสมมติว่ารหัสผู้ใช้อยู่ใน $ id:

"http://graph.facebook.com/$id/picture?type=square"
"http://graph.facebook.com/$id/picture?type=small"
"http://graph.facebook.com/$id/picture?type=normal"
"http://graph.facebook.com/$id/picture?type=large"

แต่มันไม่ใช่ URL สุดท้ายของภาพดังนั้นหากใครมีวิธีแก้ไขที่ดีกว่านี้ฉันยินดีที่จะรู้ :)


1
ประเภทขนาดภาพ: developers.facebook.com/docs/graph-api/reference/user/picture
jave.web

3

คุณสามารถระบุwidth& heightในคำขอของคุณไปยัง Facebook graph API:http://graph.facebook.com/user_id/picture?width=500&height=500


2

จากv2.7นั้น/<picture-id>?fields=imagesจะให้รายการที่มีขนาดแตกต่างกันของภาพองค์ประกอบแรกคือภาพขนาดเต็ม

ฉันไม่รู้วิธีแก้ปัญหาใด ๆ สำหรับหลายภาพพร้อมกัน


1

ใน URL รูปภาพที่พบในการตอบสนองของกราฟ (" http://photos-c.ak.fbcdn.net/ ") ให้แทนที่ค่าเริ่มต้น "_s.jpg" ด้วย "_n.jpg" (? ขนาดปกติ) หรือ "_b.jpg" (? ขนาดใหญ่) หรือ "_t.jpg" (ภาพขนาดย่อ)

Hacakable URLs / REST API ทำให้เว็บดีขึ้น


1
ดูเหมือนจะให้เสมอ "เกิดข้อผิดพลาดขณะดำเนินการตามคำขอของคุณหมายเลขอ้างอิง # 50.27f74317.14274.604fb0" น่าเสียดาย
Kevin

1

ผู้ใช้ rest-fb (ภาพสี่เหลี่ยมจัตุรัสความละเอียดที่ใหญ่กว่า): Connection myFriends = fbClient.fetchConnection ("me / friends", User.class, Parameter.with ("fields", "public_profile, email, first_name, last_name, gender, picture .width (100) .height (100) "));


1

ฉันได้รับข้อผิดพลาดนี้เมื่อฉันร้องขอกับpicture.type(full_picture):

"(# 100) สำหรับฟิลด์" รูปภาพ ": ประเภทต้องเป็นค่าใดค่าหนึ่งต่อไปนี้: เล็กปกติอัลบั้มใหญ่สี่เหลี่ยมจัตุรัส"

เมื่อฉันส่งคำขอpicture.type(album)และpicture.type(square)ตอบฉันด้วยภาพขนาด 50x50 พิกเซล

เมื่อฉันส่งคำขอpicture.type(large)ให้ตอบฉันด้วยภาพขนาด 200x200 พิกเซล

เมื่อฉันส่งคำขอpicture.width(800)ให้ตอบฉันด้วยรูปภาพขนาด 477x477 พิกเซล

ด้วยpicture.width(250)คำตอบ 320x320

ด้วยpicture.width(50)คำตอบ 50x50

ด้วยการpicture.width(100)ตอบสนอง 100x100

ด้วยpicture.width(150)คำตอบ 160x160

ฉันคิดว่า facebook ให้รูปภาพที่ปรับขนาดได้หลากหลายเมื่อผู้ใช้เพิ่มรูปภาพนั้นเป็นครั้งแรก

สิ่งที่ฉันเห็นที่นี่ API สำหรับการขอรูปภาพของผู้ใช้ไม่รองรับการปรับขนาดรูปภาพที่ร้องขอ ฉันคิดว่ามันให้ขนาดภาพที่ใกล้ที่สุด


จริง ... "picture.type (ใหญ่)" ยังให้ขนาด 200x200 - ไม่ใหญ่มากต้องบอกว่า
เจมส์


0

ฉันคิดว่า ณ ตอนนี้วิธีเดียวที่จะได้ภาพขนาดใหญ่ของเพื่อนคือการใช้ FQL ขั้นแรกคุณต้องดึงรายชื่อเพื่อน:

https://graph.facebook.com/me/friends

idsจากนั้นแยกรายการนี้และสารสกัดจากเพื่อน ๆ ทุกคน เมื่อคุณมีสิ่งนั้นให้ดำเนินการสืบค้น FQL ต่อไปนี้:

SELECT id, url FROM profile_pic WHERE id IN (id1, id2) AND width=200 AND height=200

200นี่เป็นเพียงขนาดตัวอย่างคุณสามารถป้อนอะไรก็ได้ คุณควรได้รับคำตอบดังต่อไปนี้:

{
  "data": [
    {
      "id": ..., 
      "url": "https://fbcdn-profile-a.akamaihd.net/..."
    }, 
    {
      "id": ..., 
      "url": "https://fbcdn-profile-a.akamaihd.net/..."
    }
  ]
}

โดยแต่ละ URL เป็นลิงก์ไปยังรูปภาพขนาด 200x200px


0

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

https://graph.facebook.com/v2.0/OBJECT_ID/picture?access_token=XXXXX


เพียงเพิ่มพารามิเตอร์อีกหนึ่งรายการในคำขอ: type = large โปรดตรวจสอบคำตอบของฉันด้านล่าง
เกิดมาเพื่อ hula

0

ลองเปลี่ยนขนาดของรูปภาพโดยเปลี่ยนขนาดพิกเซลจาก url ในแต่ละวัตถุ json ดังนี้:

ตัวอย่างเช่นฉันเปลี่ยนs480x480เป็นs720x720

ก่อน: https://fbcdn-sphotos-ca.akamaihd.net/hphotos-ak-xfp1/t1.0-9/q71/s480x480/10454308_773207849398282_283493808478577207_n.jpg

หลัง: https://fbcdn-sphotos-ca.akamaihd.net/hphotos-ak-xfp1/t1.0-9/q71/s720x720/10454308_773207849398282_283493808478577207_n.jpg


0

ตัวแปรสไตล์ JS เพียงตั้งค่าความกว้างของภาพขนาดใหญ่คุณจะได้รับตัวแปรที่ใหญ่ที่สุด

FB.api(
  '/' + userId,
  {fields: 'picture.width(2048)'},
  function (response) {
    if (response && !response.error) {
      console.log(response.picture.data.url);
    }
  }
);


0

หมายเหตุ : จาก Graph API v8.0 คุณmust provide the access tokenสำหรับทุกคำขอ UserID ที่คุณทำ

การกดปุ่มกราฟ API:

https://graph.facebook.com/<user_id>/picture?height=1000&access_token=<any_of_above_token>

ด้วย firebase:

FirebaseUser user = mAuth.getCurrentUser();
String photoUrl = user.getPhotoUrl() + "/picture?height=1000&access_token=" +
  loginResult.getAccessToken().getToken();

คุณได้รับโทเค็นจากregisterCallbackแบบนี้

       LoginManager.getInstance().registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            FirebaseUser user = mAuth.getCurrentUser();
            String photoUrl = user.getPhotoUrl() + "/picture?height=1000&access_token=" + loginResult.getAccessToken().getToken();
        }

        @Override
        public void onCancel() {
            Log.d("Fb on Login", "facebook:onCancel");
        }

        @Override
        public void onError(FacebookException error) {
            Log.e("Fb on Login", "facebook:onError", error);
        }
    });

นี่คือสิ่งที่เอกสารกล่าวว่า:

ตั้งแต่วันที่ 24 ตุลาคม 2020 จะต้องมีโทเค็นการเข้าถึงสำหรับการสืบค้นที่ใช้ UID ทั้งหมด หากคุณสอบถาม UID และต้องมีโทเค็น:

  • ใช้โทเค็นการเข้าถึงของผู้ใช้สำหรับคำขอรับรองความถูกต้องเข้าสู่ระบบ Facebook
  • ใช้โทเค็นการเข้าถึงเพจสำหรับคำขอที่กำหนดขอบเขตเพจ
  • ใช้โทเค็นการเข้าถึงแอปสำหรับคำขอฝั่งเซิร์ฟเวอร์
  • ใช้โทเค็นการเข้าถึงไคลเอ็นต์สำหรับการร้องขอบนมือถือหรือเว็บไคลเอ็นต์

เราขอแนะนำให้คุณใช้โทเค็นไคลเอ็นต์เฉพาะในกรณีที่คุณไม่สามารถใช้โทเค็นประเภทอื่นได้

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