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 ?

Jaskółka oknówka
źródło

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

burza piwna
źródło
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)
thaddeusmt
źródło
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)}
luschn
źródło
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"
      }
   }
}
Julian Mann
źródło
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}

Agu Dondo
źródło
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
Jonghee Park
źródło
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 :)

Jaskółka oknówka
źródło
1
RODZAJE
ROZMIARÓW OBRAZÓW
3

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

Alexey Kislitsin
źródło
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.

maxbellec
źródło
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.

Ronan
źródło
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) "));

sigi
źródło
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.

Ebleme
źródło
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.

Paweł Gościcki
źródło
0

Mam ten sam problem, ale próbowałem rozwiązać ten problem. zwraca duży obraz. Nie jest to idealne rozwiązanie, ale możesz spróbować tego.

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

Ajay
źródło
Po prostu dodaj jeszcze jeden parametr do żądania: type = large. Sprawdź moją odpowiedź poniżej.
urodzony do hula
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);
    }
  }
);
Dzmitry Vasilevsky
źródło
0

Możesz użyć full_picture zamiast klucza picture, aby uzyskać obraz w pełnym rozmiarze.

Khalil ur Rehman
źródło
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.

Gmacv
źródło