2012-09-15 3 views
7

내 Android 애플리케이션에서 Facebook 계정에서 사용자의 표지 사진을 얻으려고합니다.Facebook API를 사용하여 사진 가져 오기

아래의 코드를 사용하여 프로필 사진을 얻을 수 있습니다.

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

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

documentation는 표지 사진 입수 다음 지정.

사용자의 표지 사진

사용 조건 (명시 필드 = 커버 파라미터를 이용하여 요청 함)

반환 access_token은 :

offset_y 필드 ID, 소스 및 배열 따라서 JSON 응답 구조는 다음과 같습니다.

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

나는 페이스 북의 그래프 API에 익숙하지 않으므로 이에 대해 많은 지식이 없다.

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

또한이 coverPicUrl = new URL("http://graph.facebook.com/" + userId + "/fields=cover");

을 시도하지만 사용자 프로필의 커버 사진을 얻을 수 없었다.

온라인 검색에서도 결과가 좋지 않았습니다.

도움이 될만한 의견이 있습니다.

감사합니다.

답변

8

소스 태그 (JSONObject)는 다른 JSONObject 인 "표지"태그 안에 중첩되어 있습니다. 이 결과를 분석하려면이 같은 것을 사용해야합니다 :

예에서 사용 된 JOCover
JSONObject JOSource = JOCover.optJSONObject("cover"); 
String coverPhoto = JOSource.getString("source"); 

이미 루트를 구문 분석 할 JSONOBject (JOCover) 있다고 가정합니다. 대신 JSONObject을 대신 사용할 수 있습니다.

"source"태그는 "표지"태그에 중첩되어 있으므로 직접 액세스 할 수 없습니다. ".optJSONObject("cover")"을 사용해야합니다. 사람들이 .optJSONObject 대신 .getString을 사용하는 것을 보았습니다. 그러나 나는 그것을 사용한 적이 없습니다. 당신에게 맞는 것을 선택하십시오.

편집 나는 이전 솔루션을 편집하고 그래프 API 솔루션으로 대체하고, 그래프 API를 사용하여 솔루션에 대한 귀하의 요청에 따라

. 나는이 솔루션을 테스트하고 완벽하게 작동 한

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 
} 

:

바람직하게는 AsyncTask에서 doInBackground이 코드를 사용합니다. 귀하의 활동에 필요한 기본 URL에 추가로 fields을 추가해야합니다. 테스트를 위해 나는 단지 fields=cover

을 사용했으며 onPostExecute에는 표지 사진을 표시해야합니다. 희망이 도움이됩니다.

+0

당신이 말해 주 시겠어요 요청을하기 위해 사용해야하는 URL? 이 오류가 계속 발생합니다. '{ "오류": { "메시지": "알 수없는 경로 구성 요소 :/필드 = 커버", "유형": "OAuthException" "코드"2500 } }' – Swayam

+0

나도이 오류가 . org.json.JSONException : 소스에 대한 값이 없습니다. ' – Swayam

+0

@swayam :'/ field = ????'를 사용할 때 액세스 토큰도 제공해야합니다. 이상적인 트릭을 수행해야하는 코드를 추가했습니다. –

1

당신은 이미 표지 사진을 얻을 수있는 그 문자열에서 Json 배열에서 그 문자열을 읽고 사진 URL을 커버하고 있습니다. 는이 같은 표지 사진의 URL을

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

당신이 이미지 URL이 JSON 개체를 형성 얻을 수 있습니다.

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

어떤 URL을 사용해야합니까? 나는 혼란 스럽다. 나는이 오류를 답장으로 계속 받았다. '{ "오류": { "메시지": "알 수없는 경로 구성 요소 :/필드 = 커버", "유형": "OAuthException" "코드"2500 } }' – Swayam

1

내 응용 프로그램에서 비슷한 기능을 구현했습니다. source 태그가 다음 범용 같은 라이브러리를 사용하여 ImageView로 설정할 수 있습니다 pic_cover 객체 내에 중첩되어 있기 때문에, 이것은 표지 사진의 URL을 제공

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

: 이것은 내가 FQL을 사용하여, 그것을 어떻게입니다 이미지 로더

3

: 가져 오기 커버 사진 페이스 북 API 및 엔드 포인트 https://graph.facebook.com/me?fields=cover를 사용하여 더 이상

2014 년이 그것은 다음과 같은 응답을 제공했는데 12월 20일에 같이 작동합니다 :

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

그러나 지금은 단지 사용자의 id 제공 : 검증

{ 
    "id": "19292868552" 
} 

me?fields=cover를 사용하여 Graph Tool explorer 2.2를 사용하여.

+2

2015 년 4 월 4 일에 작동 중입니다. –

+0

@YangShun은 더 이상 작동하지 않습니까? 이견있는 사람 ? – Sahan

+2

2016 년 9 월 14 일부터 계속 작동하지만 앱의 user_photos 범위를 적용해야합니다. –

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

이것은 질문에 대한 대답을 제공하지 않습니다.비평하거나 저자의 설명을 요청하려면 게시물 아래에 의견을 남기십시오. 자신의 게시물에 언제나 댓글을 달 수 있으며 충분한 [평판] (http://stackoverflow.com/help/whats-reputation)을 갖게되면 [모든 게시물에 댓글을 달 수] 있어야합니다 (http://stackoverflow.com/help/privileges/comment). –

+0

괜찮 았으면 좋겠다. 나는 단지 사람을 도우려고했다. –

관련 문제