Facebook Graph API: uzyskaj większe zdjęcia w jednym żądaniu


88

Obecnie używam Graph API Explorer do wykonywania testów. To dobre narzędzie.

Chcę otrzymać listę znajomych użytkownika, z imionami, identyfikatorami i zdjęciami znajomych. Więc wpisuję:

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

Ale zdjęcie ma tylko 50x50 i chciałbym mieć większy w tej prośbie.

Czy to możliwe ?

Odpowiedzi:


68

nie musisz jednak pobierać atrybutu „obraz”. jest znacznie wygodniejszy sposób, jedyne czego potrzebujesz to identyfikator użytkownika, patrz przykład poniżej;

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

typ ps definiuje żądany rozmiar

plz pamiętaj, że używając tokena z podstawowymi uprawnieniami, / me / friends zwróci listę znajomych tylko z atrybutami id + name


1
Ale nie zgadzam się z ostatnim zdaniem: za podstawowym pozwoleniem możesz uzyskać dostęp do więcej niż atrybutu id + name, np. Graph.facebook.com/btaylor
Martin

29
uhm, a co z „w jednej prośbie”?
Iulian Onofrei

4
Możesz także użyć full_picture instat of picture.
Bo Pennings

„message”: „(# 12) krawędź obrazu dla tego typu jest przestarzała w wersjach 2.3 i nowszych”,
Zestaw narzędzi

202

Jak opisano w tym błędzie na Facebooku, możesz teraz zażądać określonych rozmiarów obrazów za pomocą nowej składni API „ rozszerzania pól ”.

Tak jak to:

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

27
W rzeczy samej. fields = picture.width (640) jest jeszcze lepsze.
kaay

6
Wygląda na to, że Facebook Graph API zmienił ich interfejs API. Facebook odpowiedział „Podpola nie są obsługiwane przez obraz”, gdy próbowałem skorzystać z Twojej sugestii.
Phat H. VU

2
uzyskiwanie błędu: {"error": {"message": "Nieobsługiwane żądanie pobierania. Przeczytaj dokumentację interfejsu Graph API pod adresem developers.facebook.com/docs/graph-api ", "type": "GraphMethodException", "code": 100}}
Vineesh TP

13
Zobacz? Field = full_picture, załączniki do zapytań 2.x
Kevin

3
Dzięki nowym zmianom na Facebooku nie można uzyskać większego obrazu. Ktoś podpowiedź?
shadab.tughlaq

81

Najlepszym sposobem, aby wszyscy znajomi (którzy oczywiście również używają aplikacji) mieli poprawne rozmiary obrazu, korzystając z rozszerzenia pola , z jednym z tagów rozmiaru (kwadratowy, mały, normalny, duży):

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

(edycja: to już nie działa)

... lub możesz określić szerokość / wysokość:

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

Btw, możesz też napisać to tak:

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

1
Dzięki za informacje, zaktualizuję odpowiedź. Wygląda na to, że full_picture nie działa dla znajomych: / me / friends? fields = full_picture - czy masz pojęcie, jak to byłoby możliwe?
luschn

34

Zmień tablicę pól id,name,picturenaid,name,picture.type(large)

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

Wynik:

{
   "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
Jaka jest wielkość 200 x 200?
AlxVallejo

1
W najnowszym (2.10) Graph API nie jest „duży” dostępny:Graph returned an error: (#100) For field 'picture': type must be one of the following values: thumbnail, small, album
Honza

33

Możesz ustawić rozmiar obrazu w pikselach, na przykład:

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

W podobny sposób typemożna użyć parametru

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

Z dokumentacji

type enum {small, normal, album, large, square}



20

Dokładnie zbadałem Graph API Explorer i ostatecznie znalazłem full_picture

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

PS Zauważyłem, że full_picture nie zawsze zapewnia obraz w pełnym rozmiarze. „załączniki” tak

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

to jest tylko szerokość pokazu: 720px. Twoje tylko duże zdjęcie znajduje się w ten sposób. dla największego graph.facebook.com/photo_id można zobaczyć zdjęcie w 6 różnych rozmiarach.
gokhan

Właśnie przetestowałem to z punktem końcowym znajomych i nie zadziałało
luschn

9

Hum ... Myślę, że znalazłem rozwiązanie.

W rzeczywistości można po prostu poprosić

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

Zgodnie z http://developers.facebook.com/docs/reference/api/ (sekcja "Zdjęcia"), url zdjęć profilowych można budować z identyfikatorem użytkownika

Na przykład, zakładając, że identyfikator użytkownika jest w $ 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"

Ale to nie jest ostateczny adres URL zdjęcia, więc jeśli ktoś ma lepsze rozwiązanie, byłbym zadowolony :)


1

3

Możesz określić width& heightw swoim żądaniu do Facebook Graph API:http://graph.facebook.com/user_id/picture?width=500&height=500


2

Od v2.7, /<picture-id>?fields=imageswyświetli listę z różnymi rozmiarami obrazów, przy czym pierwszym elementem będzie obraz w pełnym rozmiarze.

Nie znam żadnego rozwiązania dla wielu obrazów naraz.


1

W obrazach URL znalezionych w odpowiedziach na wykresie („ http://photos-c.ak.fbcdn.net/ ”), po prostu zastąp domyślny „_s.jpg” przez „_n.jpg” (? Normalny rozmiar) lub „_b.jpg” (? duży rozmiar) lub „_t.jpg” (miniatura).

Hacakable URL / REST API sprawiają, że sieć jest lepsza.


1
Wydaje się, że zawsze wyświetla komunikat „Wystąpił błąd podczas przetwarzania Twojego żądania. Numer referencyjny 50.27f74317.14274.604fb0”, niestety
Kevin

1

użytkownicy rest-fb (kwadratowy obraz, większa rozdzielczość): Connection myFriends = fbClient.fetchConnection ("ja / przyjaciele", User.class, Parameter.with ("fields", "public_profile, email, first_name, last_name, gender, picture .width (100) .height (100) "));


1

Otrzymałem ten błąd, gdy wysłałem żądanie z picture.type(full_picture):

„(# 100) Dla pola„ obraz ”: typ musi mieć jedną z następujących wartości: mały, normalny, album, duży, kwadratowy”

Kiedy wysyłam żądanie za pomocą picture.type(album)i picture.type(square), odpowiada mi obrazem o rozmiarze 50x50 pikseli.

Kiedy wysyłam żądanie picture.type(large), odpowiada mi obrazem o rozmiarze 200x200 pikseli.

Kiedy picture.width(800)wysyłam żądanie , odpowiada mi obrazem o rozmiarze 477x477 pikseli.

z picture.width(250), odpowiedzi 320x320.

z picture.width(50), odpowiedzi 50x50.

z picture.width(100), odpowiedzi 100x100.

z picture.width(150), odpowiedzi 160x160.

Myślę, że Facebook podaje obrazy, których rozmiar zmienia się, gdy użytkownik po raz pierwszy dodaje to zdjęcie.

Widzę tutaj, że API do żądania obrazu użytkownika nie obsługuje zmiany rozmiaru żądanego obrazu. Wydaje mi się, że jest to najbliższy rozmiar obrazu.


To prawda ... „picture.type (large)” również dał mi 200x200 - nie bardzo duży, muszę powiedzieć
James


0

Myślę, że na razie jedynym sposobem na uzyskanie dużych zdjęć znajomych jest użycie FQL. Najpierw musisz pobrać listę znajomych:

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

Następnie przeanalizuj tę listę i wyodrębnij wszystkich znajomych ids. Kiedy to masz, po prostu wykonaj następujące zapytanie FQL:

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

200tutaj jest tylko przykładowy rozmiar, możesz wpisać wszystko. Powinieneś otrzymać następującą odpowiedź:

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

Każdy adres URL jest linkiem do obrazu o wymiarach 200 x 200 pikseli.




0

Wariant w stylu JS. Wystarczy ustawić ogromną szerokość obrazu, a otrzymasz największy wariant.

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


0

Uwaga : z Graph API v8.0 must provide the access tokendla każdego żądania identyfikatora użytkownika.

Uderzenie w Graph API:

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

Z firebase:

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

Otrzymujesz token registerCallbackwłaśnie w ten sposób

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

Oto, co mówi dokumentacja:

Od 24 października 2020 r. Token dostępu będzie wymagany dla wszystkich zapytań opartych na UID. Jeśli zapytasz o UID, a zatem musisz dołączyć token:

  • używać tokena dostępu użytkownika do uwierzytelniania żądań logowania na Facebooku
  • użyj tokenu dostępu do strony dla żądań o zakresie strony
  • użyj tokenu dostępu do aplikacji dla żądań po stronie serwera
  • używać tokena dostępu klienta do żądań po stronie klienta mobilnego lub WWW

Zalecamy używanie tokena klienta tylko wtedy, gdy nie możesz użyć jednego z pozostałych typów tokenów.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.