Facebook Graph API: tek bir istekte daha büyük resimler elde edin


88

Şu anda Graph API Explorer'ı kullanıyorum bazı testler yapmak . Bu iyi bir araç.

Arkadaşların isimleri, kimlikleri ve resimleriyle birlikte kullanıcının arkadaş listesini almak istiyorum. Ben de yazıyorum:

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

Ama resim sadece 50x50 ve bu talepte daha büyük bir tane istiyorum.

Mümkün mü ?

Yanıtlar:


68

yine de 'resim' özelliğini çekmenize gerek yoktur. çok daha uygun bir yol var, ihtiyacınız olan tek şey userid, aşağıdaki örneğe bakın;

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

ps türü, istediğiniz boyutu tanımlar

plz temel izinlerle belirteç kullanmanın, / me / friends sadece id + name özniteliklerine sahip arkadaşların listesini döndüreceğini unutmayın.


1
Ama son cümleye katılmıyorum: temel izinle id + name özniteliğinden daha fazlasına erişebilirsiniz, örn: graph.facebook.com/btaylor
Martin

29
uhm, "tek istekte" ne olacak?
Iulian Onofrei

4
U aynı zamanda resmin full_picture instat'ını da kullanabilirsiniz.
Bo Pennings

"message": "Bu tür için (# 12) resim kenarı, v2.3 ve üstü sürümler için kullanımdan kaldırılmıştır",
Araç Seti

202

Facebook'taki bu hatada açıklandığı gibi, artık yeni API " alan genişletmesi aracılığıyla belirli resim boyutları da talep edebilirsiniz " sözdizimi .

Şöyle:

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

27
Aslında. alanlar = resim.width (640) daha da iyidir.
kaay

6
Görünüşe göre Facebook Graph API API'sini değiştirdi. Önerinizi kullanmaya çalıştığımda Facebook "Alt alanlar resim tarafından desteklenmiyor" şeklinde yanıt verdi.
Phat

2
alma hatası: {"error": {"message": "Desteklenmeyen alma isteği. Lütfen developer.facebook.com/docs/graph-api adresindeki Graph API belgelerini okuyun ", "type": "GraphMethodException", "code": 100}}
Vineesh TP

13
? Alanı = full_picture, 2.x sorguları için eklere bakın
Kevin

3
Yeni Facebook Değişiklikleri ile daha büyük görüntü elde edilemiyor. Herhangi bir ipucu var mı?
shadab.tughlaq

82

Tüm arkadaşları (tabii ki Uygulamayı da kullanan) doğru resim boyutlarına sahip olmanın en iyi yolu , boyut etiketlerinden biriyle (kare, küçük, normal, büyük) alan genişletmeyi kullanmaktır :

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

(düzenleme: bu artık çalışmıyor)

... veya genişliği / yüksekliği belirtebilirsiniz:

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

Btw, bunu şu şekilde de yazabilirsin:

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

1
Bilgi için thanx, cevabı güncelleyeceğim. full_picture arkadaşlar için işe yaramıyor gibi görünse de: / ben / arkadaşlar? alanlar = full_picture - bunun nasıl mümkün olacağına dair bir fikriniz var mı?
luschn

34

id,name,pictureAlan dizisini şu şekilde değiştirin:id,name,picture.type(large)

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

Sonuç:

{
   "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 nasıl büyüktür?
AlxVallejo

1
En son (2.10) Graph API "büyük" boyutta mevcut değil:Graph returned an error: (#100) For field 'picture': type must be one of the following values: thumbnail, small, album
Honza

33

Resmin boyutunu aşağıdaki gibi piksel cinsinden ayarlayabilirsiniz:

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

Benzer şekilde, typeparametre kullanılabilir

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

Gönderen dokümantasyon

enum {küçük, normal, albüm, büyük, kare} yazın



20

Graph API Explorer'ı kapsamlı bir şekilde araştırdım ve sonunda tam_fotoğrafı buldum

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

Not: Full_picture'ın her zaman istediğim tam boyutlu görüntüyü sağlamayacağını fark ettim. "ekler"

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

bu sadece gösteri genişliğidir: 720px. Sadece büyük fotoğrafın böyle bul. en büyük grafik için.facebook.com/photo_id u 6 farklı boyutta fotoğraf görebilirsiniz.
gokhan

bunu arkadaşlar uç
noktasıyla

9

Hum ... Sanırım bir çözüm buldum.

Aslında, sadece talep edebilir

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

Göre http://developers.facebook.com/docs/reference/api/ (bölüm "Pictures"), profilin fotoğrafların url kullanıcı kimliği ile inşa edilebilir

Örneğin, kullanıcı kimliğinin $ id olduğunu varsayarsak:

"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"

Ancak bu nihai görsel URL'si değil, bu yüzden birinin daha iyi bir çözümü varsa, bunu bilmekten memnuniyet duyarım :)



3

Facebook grafik API'sine isteğinizde width& belirtebilirsiniz height:http://graph.facebook.com/user_id/picture?width=500&height=500


2

From v2.7, /<picture-id>?fields=imagessize farklı boyutlarda resimlerin bulunduğu bir liste verecektir, ilk öğe tam boyutlu resimdir.

Aynı anda birden fazla görüntü için herhangi bir çözüm bilmiyorum.


1

Grafik yanıtlarında bulunan resimlerde URL (" http://photos-c.ak.fbcdn.net/ " olanlar) , varsayılan "_s.jpg" yi "_n.jpg" (? Normal boyut) ile değiştirin veya "_b.jpg" (? büyük boy) veya "_t.jpg" (küçük resim).

Hacakable URL'ler / REST API, Web'i daha iyi hale getirir.


1
Görünüşe göre her zaman "İsteğiniz işlenirken bir hata oluştu. Referans # 50.27f74317.14274.604fb0" şimdi maalesef
Kevin

1

rest-fb kullanıcıları (kare resim, daha büyük öz.): Bağlantı myFriends = fbClient.fetchConnection ("ben / arkadaşlar", Kullanıcı.class, Parametre.with ("alanlar", "public_profile, e-posta, ad, soyad, cinsiyet, resim .width (100) .height (100) "));


1

Bu hatayı şununla bir istekte bulunduğumda aldım picture.type(full_picture):

"(# 100) 'resim' alanı için: tür şu değerlerden biri olmalıdır: küçük, normal, albüm, büyük, kare"

Birlikte istek yaptığınızda picture.type(album)vepicture.type(square) bir resim 50x50 piksel boyutuna sahip tepkiler beni.

İle istekte bulunduğumda picture.type(large)İle bana 200x200 piksel boyutunda bir görüntü ile yanıt veriyor.

İle istekte bulunduğumda picture.width(800)İle 477x477 piksel boyutunda bir görüntü ile yanıt veriyor.

ile picture.width(250)yanıtlar 320x320.

ile picture.width(50)yanıtlar 50x50.

ile picture.width(100)yanıtlar 100x100.

ile picture.width(150)yanıtlar 160x160.

Sanırım facebook, kullanıcı o fotoğrafı ilk eklediğinde çeşitli boyutlarda yeniden boyutlandırılan görüntüleri veriyor.

Burada gördüklerim, kullanıcı Resmi istemek için API, istenen resmin yeniden boyutlandırılmasını desteklemiyor. Sanırım en yakın görüntü boyutunu veriyor.


Doğru ... "picture.type (büyük)" ayrıca bana 200x200 verdi - çok büyük değil
James


0

Şu andan itibaren büyük arkadaş fotoğraflarını çekmenin tek yolunun FQL kullanmak olduğunu düşünüyorum. Öncelikle, bir arkadaş listesi getirmeniz gerekir:

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

Sonra bu listeyi ayrıştırın ve tüm arkadaşları çıkartın ids. Buna sahip olduğunuzda, aşağıdaki FQL sorgusunu çalıştırın:

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

200işte sadece örnek bir boyut, her şeyi girebilirsiniz. Aşağıdaki yanıtı almalısınız:

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

Her url, 200x200 piksellik bir resmin bağlantısıdır.




0

JS tarzı varyant. Sadece muazzam büyük resim genişliğini ayarlayın ve en büyük çeşidi elde edin.

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

0

Tam boyutlu görüntü elde etmek için resim anahtarı yerine tam resim kullanabilirsiniz.


0

Not : Graph API v8.0'dan, yaptığınız must provide the access tokenher UserID talebi için siz.

Grafik API'sini kullanmak:

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

Firebase ile:

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

Jetonu registerCallbackaynen bunun gibi alırsın

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

Belgelerin söylediği şu:

24 Ekim 2020'den itibaren, tüm UID tabanlı sorgular için bir erişim belirteci gerekli olacaktır. Bir UID'yi sorguluyorsanız ve bu nedenle bir belirteç eklemeniz gerekiyorsa:

  • Facebook Oturum açma kimlik doğrulamalı istekleri için bir Kullanıcı erişim belirteci kullanın
  • sayfa kapsamlı istekler için bir Sayfa erişim belirteci kullanın
  • sunucu tarafı istekler için bir Uygulama erişim jetonu kullanın
  • Mobil veya web istemci tarafı talepleri için bir İstemci erişim belirteci kullanın

Diğer belirteç türlerinden birini kullanamıyorsanız, yalnızca bir İstemci belirteci kullanmanızı öneririz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.