API đồ thị của Facebook: có được hình ảnh lớn hơn trong một yêu cầu


88

Tôi hiện đang sử dụng Graph API Explorer để thực hiện một số thử nghiệm. Đó là một công cụ tốt.

Tôi muốn lấy danh sách bạn bè của người dùng, với tên, id và hình ảnh của bạn bè. Vì vậy, tôi gõ:

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

Nhưng hình ảnh chỉ có kích thước 50x50 và tôi muốn có một bức ảnh lớn hơn trong yêu cầu này.

Có khả thi không?

Câu trả lời:


68

bạn không cần phải kéo thuộc tính 'ảnh'. có nhiều cách thuận tiện hơn, thứ duy nhất bạn cần là userid, xem ví dụ bên dưới;

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

kiểu ps xác định kích thước bạn muốn

Xin lưu ý rằng sử dụng mã thông báo với các quyền cơ bản, / me / friends sẽ chỉ trả về danh sách bạn bè với thuộc tính id + tên


1
Nhưng tôi không đồng ý với bạn câu cuối cùng: với quyền cơ bản, bạn có thể truy cập nhiều hơn thuộc tính id + name, ví dụ: graph.facebook.com/btaylor
Martin

29
uhm, còn "trong một yêu cầu" thì sao?
Iulian Onofrei

4
Bạn cũng có thể sử dụng hình ảnh full_picture của hình ảnh.
Bo Pennings

"message": "(# 12) bức tranh cạnh cho loại hình này không được dùng cho phiên bản v2.3 và cao hơn",
Toolkit

201

Như được mô tả trong lỗi này trên Facebook, bạn cũng có thể yêu cầu kích thước hình ảnh cụ thể ngay bây giờ thông qua cú pháp " mở rộng trường " API mới .

Như vậy:

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

27
Thật. fields = picture.width (640) thậm chí còn tốt hơn.
kaay

6
Có vẻ như API Đồ thị của Facebook đã thay đổi api của họ. Facebook đã trả lời "Các trường con không được hỗ trợ bởi hình ảnh" khi tôi cố gắng sử dụng đề xuất của bạn.
Phat H. VU

2
nhận được lỗi: { "lỗi": { "message": "Không được hỗ trợ get yêu cầu Vui lòng đọc tài liệu API Graph tại developers.facebook.com/docs/graph-api ", "loại": "GraphMethodException", "code": 100}}
Vineesh TP

13
Xem? Field = full_picture, tệp đính kèm cho các truy vấn 2.x
Kevin

3
Với các Thay đổi mới của Facebook, không thể lấy hình ảnh lớn hơn. Có ai gợi ý không?
shadab.tughlaq

81

Cách tốt nhất để có được tất cả bạn bè (tất nhiên là những người cũng đang sử dụng Ứng dụng) có kích thước hình ảnh chính xác là sử dụng mở rộng trường , bằng một trong các thẻ kích thước (vuông, nhỏ, bình thường, lớn):

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

(chỉnh sửa: điều này không hoạt động nữa)

... hoặc bạn có thể chỉ định chiều rộng / chiều cao:

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

Btw, bạn cũng có thể viết nó như thế này:

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

1
thanx cho thông tin, tôi sẽ cập nhật câu trả lời. full_picture dường như không hiệu quả với bạn bè: / me / friends? fields = full_picture - bạn có biết cách này có thể thực hiện được không?
luschn

34

Thay đổi mảng trường id,name,picturethànhid,name,picture.type(large)

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

Kết quả:

{
   "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 lớn như thế nào?
AlxVallejo

1
Trong mới nhất (2.10) Graph API không phải là kích thước "lớn" có sẵn:Graph returned an error: (#100) For field 'picture': type must be one of the following values: thumbnail, small, album
Honza

33

Bạn có thể đặt kích thước của hình ảnh bằng pixel, như sau:

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

Theo cách tương tự, typetham số có thể được sử dụng

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

Từ tài liệu

gõ enum {small, normal, album, large, square}



20

Tôi đã nghiên cứu rộng rãi về Graph API Explorer và cuối cùng đã tìm thấy full_picture

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

Tái bút Tôi nhận thấy rằng full_picture không phải lúc nào cũng cung cấp hình ảnh kích thước đầy đủ mà tôi muốn. 'tệp đính kèm' không

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

đây chỉ là chiều rộng hiển thị: 720px. Bạn chỉ tìm thấy bức ảnh lớn như thế này. cho graph.facebook.com/photo_id lớn nhất, bạn có thể xem ảnh 6 kích cỡ khác nhau.
gokhan

tôi vừa thử nghiệm điều này với điểm cuối của bạn bè và nó không hoạt động
luschn

9

Hum ... Tôi nghĩ tôi đã tìm ra giải pháp.

Trong thực tế, chỉ có thể yêu cầu

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

Theo http://developers.facebook.com/docs/reference/api/ (phần "Ảnh"), url của ảnh trong hồ sơ có thể được tạo bằng id người dùng

Ví dụ: giả sử id người dùng là $ 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"

Nhưng nó không phải là URL hình ảnh cuối cùng, vì vậy nếu ai đó có giải pháp tốt hơn, tôi rất vui được biết :)



3

Bạn có thể chỉ định width& heighttrong yêu cầu của mình đối với API đồ thị của Facebook:http://graph.facebook.com/user_id/picture?width=500&height=500


2

From v2.7, /<picture-id>?fields=imagessẽ cung cấp cho bạn một danh sách với các kích thước hình ảnh khác nhau, yếu tố đầu tiên là hình ảnh có kích thước đầy đủ.

Tôi không biết giải pháp nào cho nhiều hình ảnh cùng một lúc.


1

URL trong ảnh được tìm thấy trong phản hồi Biểu đồ (" http://photos-c.ak.fbcdn.net/ "), chỉ cần thay thế mặc định "_s.jpg" bằng "_n.jpg" (? Kích thước bình thường) hoặc "_b.jpg" (? kích thước lớn) hoặc "_t.jpg" (hình thu nhỏ).

Các URL có thể thay đổi / API REST làm cho Web tốt hơn.


1
Có vẻ như luôn luôn thông báo "Đã xảy ra lỗi khi xử lý yêu cầu của bạn. Tham chiếu # 50.27f74317.14274.604fb0" hiện rất tiếc
Kevin

1

người dùng rest-fb (hình vuông, kích thước lớn hơn.): Kết nối myFriends = fbClient.fetchConnection ("tôi / bạn bè", User.class, Parameter.with ("fields", "public_profile, email, first_name, last_name, giới tính, ảnh . width (100) .height (100) "));


1

Tôi gặp lỗi này khi đưa ra yêu cầu với picture.type(full_picture):

"(# 100) Đối với trường 'ảnh': loại phải là một trong các giá trị sau: nhỏ, bình thường, anbom, lớn, hình vuông"

Khi tôi đưa ra yêu cầu với picture.type(album)picture.type(square), hãy trả lời tôi bằng hình ảnh có kích thước 50x50 pixel.

Khi tôi đưa ra yêu cầu picture.type(large), hãy trả lời tôi bằng hình ảnh có kích thước 200x200 pixel.

Khi tôi đưa ra yêu cầu picture.width(800), hãy trả lời tôi bằng hình ảnh có kích thước 477x477 pixel.

với picture.width(250), phản hồi 320x320.

với picture.width(50), phản hồi 50x50.

với picture.width(100), phản hồi 100x100.

với picture.width(150), phản hồi 160x160.

Tôi nghĩ rằng facebook cung cấp cho các hình ảnh thay đổi kích thước khác nhau khi người dùng thêm ảnh đó lần đầu tiên.

Những gì tôi thấy ở đây, API để yêu cầu Hình ảnh của người dùng không hỗ trợ thay đổi kích thước hình ảnh được yêu cầu. Tôi nghĩ nó cho kích thước hình ảnh gần nhất.


Đúng ... "picture.type (cỡ lớn)" cũng mang lại cho tôi 200x200 - tôi phải nói là không lớn lắm
James


0

Tôi nghĩ rằng cách duy nhất để có được những bức ảnh lớn về bạn bè là sử dụng FQL. Trước tiên, bạn cần tìm nạp danh sách bạn bè:

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

Sau đó phân tích cú pháp danh sách này và trích xuất tất cả bạn bè ids. Khi bạn có điều đó, chỉ cần thực hiện truy vấn FQL sau:

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

200đây chỉ là một kích thước mẫu mực, bạn có thể nhập bất cứ thứ gì. Bạn sẽ nhận được phản hồi sau:

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

Với mỗi url là liên kết đến hình ảnh 200x200px.




0

Biến thể theo kiểu JS. Chỉ cần đặt chiều rộng hình ảnh cực lớn và bạn sẽ nhận được biến thể lớn nhất.

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

0

Bạn có thể sử dụng full_picture thay vì phím ảnh để có được hình ảnh kích thước đầy đủ.


0

Lưu ý : Từ Graph API v8.0, bạn must provide the access tokenthực hiện mọi yêu cầu UserID.

Đánh vào API đồ thị:

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

Với firebase:

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

Bạn nhận được mã thông báo registerCallbacknhư thế này

       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);
        }
    });

Đây là những gì tài liệu cho biết:

Bắt đầu từ ngày 24 tháng 10 năm 2020, mã thông báo truy cập sẽ được yêu cầu cho tất cả các truy vấn dựa trên UID. Nếu bạn truy vấn UID và do đó phải bao gồm mã thông báo:

  • sử dụng mã thông báo truy cập Người dùng cho các yêu cầu xác thực Đăng nhập Facebook
  • sử dụng mã thông báo truy cập Trang cho các yêu cầu trong phạm vi trang
  • sử dụng mã thông báo truy cập ứng dụng cho các yêu cầu phía máy chủ
  • sử dụng mã thông báo truy cập máy khách cho các yêu cầu phía máy khách di động hoặc web

Chúng tôi khuyên bạn chỉ nên sử dụng mã thông báo Khách hàng nếu bạn không thể sử dụng một trong các loại mã thông báo khác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.