2012-09-15 3 views
7

Kullanarak Kapak Fotoğrafı Alın Android uygulamasında, Facebook hesabından kullanıcının kapak fotoğrafını çekmeye çalışıyorum.Facebook API

Aşağıdaki kodu kullanarak profil resmini alabilirim.

profilePicUrl = new URL("http://graph.facebook.com/" + userId + "/picture?type=large"); 

profilePicBmp = BitmapFactory.decodeStream(profilePicUrl.openConnection().getInputStream()); 

documentation kapak fotoğrafını almak için aşağıdaki belirtir.

kullanıcının kapak fotoğrafı

gerektirir (açıkça alanları = kapak parametre kullanılarak talep edilmelidir)

İade ACCESS_TOKEN:

offset_y alanlar id, kaynak ve dizisi Yani, JSON yanıtının yapısı böyle bir şey olurdu.

{ 
    "cover": { 
     "cover_id": "10151008748223553", 
     "source": "http://sphotos-a.ak.fbcdn.net/hphotos-ak-ash4/s720x720/391237_10151008748223553_422785532_n.jpg", 
     "offset_y": 0 
    }, 
    "id": "19292868552" 
} 

Facebook Grafik API'sine oldukça yeni geldim ve bundan dolayı bunun nasıl yapılacağı konusunda fazla bir bilgim yok.

Bu coverPicUrl = new URL("http://graph.facebook.com/" + userId + "/cover?type=large");

ve ayrıca bu coverPicUrl = new URL("http://graph.facebook.com/" + userId + "/fields=cover");

çalıştı Ama kullanıcı profilinin kapak resmini elde etmek mümkün olmamıştır. Çevrimiçinde arama yapmak hiç de verimli sonuç vermemiştir.

Herhangi bir yardım gerçekten takdir edilecektir.

Teşekkürler!

cevap

8

"Kaynak" etiketi (JSONObject) başka bir JSONObject öğesinin içinde "kapak" etiketi içine yerleştirilmiştir. Bu sonucu ayrıştırmak için, böyle bir şey kullanmak gerekir:

örnekte kullanılan JOCover
JSONObject JOSource = JOCover.optJSONObject("cover"); 
String coverPhoto = JOSource.getString("source"); 

zaten kök ayrıştırmak için bir JSONOBject (JOCover) olduğunu varsayar. Kendi JSONObject'unuzu kendi yerine koyabilirsiniz. o "örtü" etiketi iç içe olarak

"kaynak" etiketi

doğrudan erişilemez. " .optJSONObject("cover")" kullanmanız gerekecek. Kullanıcıların .optJSONObject yerine .getString kullandığını gördüm, ancak hiç kullanmadım. Sizin için neyin işe yaradığını seçin.

DÜZENLEME Daha önce çözüm düzenleme ve Graph API çözümü ile yerine ediyorum, Grafik API kullanarak bir çözüm için İsteğiniz

. Bu çözümü test edilmiş ve mükemmel çalışıyor olması

String URL = "https://graph.facebook.com/" + THE_USER_ID + "?fields=cover&access_token=" + Utility.mFacebook.getAccessToken(); 

String finalCoverPhoto; 

try { 

    HttpClient hc = new DefaultHttpClient(); 
    HttpGet get = new HttpGet(URL); 
    HttpResponse rp = hc.execute(get); 

    if (rp.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { 
     String result = EntityUtils.toString(rp.getEntity()); 

     JSONObject JODetails = new JSONObject(result); 

     if (JODetails.has("cover")) { 
      String getInitialCover = JODetails.getString("cover"); 

      if (getInitialCover.equals("null")) { 
       finalCoverPhoto = null; 
     } else { 
      JSONObject JOCover = JODetails.optJSONObject("cover"); 

      if (JOCover.has("source")) { 
       finalCoverPhoto = JOCover.getString("source"); 
      } else { 
       finalCoverPhoto = null; 
      } 
     } 
    } else { 
     finalCoverPhoto = null; 
    } 
} catch (Exception e) { 
    // TODO: handle exception 
} 

:

Tercihen, bir AsyncTask yılında, doInBackground bu kodu kullanın. Etkinliğiniz için gerekli olan temel URL'ye fields ekleme eklemeniz gerekecek. Test uğruna, sadece fields=cover

kullanılan Ve onPostExecute yılında, kapak resmi görüntülemek için bir şey yapmak. Bu yardımcı olur umarım.

+0

söyler misiniz isteği yapmak için kullanmam gereken URL? Bu hatayı almaya devam ediyorum. '{ "hata": { "mesaj": "Bilinmeyen yol bileşenleri:/alan = kapağı", "tipi": "OAuthException", "kod": 2500 } } ' – Swayam

+0

Çok bu hata olsun . 'org.json.JSONException: Kaynak için değer yok – Swayam

+0

@swayam:'/field = ???? 'kullanırken, erişim belirtecini de sağlamanız gerekir. İdeal olarak sizin için hile yapması gereken daha fazla kod ekledim. –

1

Zaten var fotoğraf URL sadece Kapak fotoğrafını alabilirsiniz String Json diziden o Dize, okumak kapsamaktadır. bu böyle kapak fotoğrafı url

"source": "http://sphotos-a.ak.fbcdn.net/hphotos-ak-ash4/s720x720/391237_10151008748223553_422785532_n.jpg", 

olduğunu Görüntü URL Json Nesnesi oluşturmak alabilirsiniz.

String cover_photo = JsonObject.getString("source"); 
+1

Hangi URL'yi kullanmalıyım? Kafam karıştı. Bu hatayı yanıt olarak almaya devam ediyorum. '{ "hata": { "mesaj": "Bilinmeyen yolu bileşenleri:/alan = kapak", "tip": "OAuthException", "kod": 2500 } }' – Swayam

1

Uygulamamda benzer bir özelliği uyguladım. source etiketi sonra Universal gibi bir kütüphaneyi kullanan bir ImageView ayarlanabilir pic_cover nesne, içinde yuvalanmış beri bu bir kapak fotoğrafa url verir

String cover_photo = jsonObj.getJSONObject("pic_cover").getString("source"); 

: Bu benim FQL kullanarak yaptım nasıl Görüntü Yükleyici

3

Not: getiriliyor Kapak Fotoğrafı Facebook API ve son nokta https://graph.facebook.com/me?fields=cover kullanarak artık

2014 Bu şu yanıtı vermek gerekiyordu 20 Aralık olduğu gibi çalışır:

{ 
    "cover": { 
    "cover_id": "10151008748223553", 
    "source": "http://sphotos-a.ak.fbcdn.net/hphotos-ak-ash4/s720x720/391237_10151008748223553_422785532_n.jpg", 
    "offset_y": 0 
    }, 
    "id": "19292868552" 
} 

Ama şimdi sadece Kullanım id verir: Doğrulanmış

{ 
    "id": "19292868552" 
} 

bu me?fields=cover kullanılarak Graph Tool explorer 2.2 kullanarak.

+2

4 Nisan 2015 tarihinde çalışıyor. –

+0

Artık @YangShun çalışmıyor? Düşüncesi olan var mı ? – Sahan

+2

Bu hala 14 Eylül 2016'da çalışıyor, ancak uygulamanız için user_photos kapsamını uygulamanız gerekiyor. –

0
object.getJSONObject("cover").getString("source") 
+2

Bu, soruya bir cevap vermemektedir.Bir yazarın eleştirisini veya açıklamasını istemek için, gönderilerinizin altında bir yorum bırakın. Her zaman kendi gönderilerinize yorum yazabilirsiniz ve yeterli sayıda [ününüzü] aldıktan sonra (http://stackoverflow.com/help/whats-reputation) [herhangi bir yayına yorum yapabilir] (http://stackoverflow.com/help/privileges/comment). –

+0

tamam aklımda tutuyorum, sadece kişiye yardım etmek istedim –