簡體   English   中英

使用Facebook API獲取封面照片

[英]Get Cover Photo using Facebook API

在我的Android應用程序中,我試圖從他的Facebook帳戶獲取用戶的封面照片。

我可以使用下面的代碼獲取個人資料圖片。

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

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

文檔指定了以下用於檢索封面照片。

用戶的封面照片(必須使用fields = cover參數明確請求)

需要access_token

返回:字段數組id,source和offset_y

因此,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"
}

我是Facebook Graph API的新手,因此對如何解決這個問題知之甚少。

我試過這個coverPicUrl = new URL("http://graph.facebook.com/" + userId + "/cover?type=large");

還有這個coverPicUrl = new URL("http://graph.facebook.com/" + userId + "/fields=cover");

但我無法獲得用戶個人資料的封面圖片。

在線搜索也沒有取得任何豐碩成果。

任何幫助確實會受到贊賞。

謝謝!

“source”標記(JSONObject)嵌套在另一個JSONObject(“cover”標記)中。 要解析此結果,您必須使用以下內容:

JSONObject JOSource = JOCover.optJSONObject("cover");
String coverPhoto = JOSource.getString("source");

JOCover使用的JOCover假定您已經有一個JSONOBject (JOCover)來解析根。 您可以在自己的位置替換自己的JSONObject

無法直接訪問“source”標記,因為它嵌套在“cover”標記中。 你將不得不使用“ .optJSONObject("cover") ”。 我見過人們使用.getString而不是.optJSONObject但我從未使用它。 選擇適合你的方法。

編輯

根據您對使用Graph API的解決方案的要求,我正在編輯早期的解決方案並將其替換為Graph API解決方案。

最好在AsyncTask ,在doInBackground使用此代碼:

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
}

我已經測試了這個解決方案並且完美地工 您必須向活動所需的基本URL添加任何添加fields 為了測試,我只使用fields=cover

onPostExecute ,做你的事情來顯示封面圖片。 希望這可以幫助。

注意 :使用Facebook 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"
}

使用Graph Tool explorer 2.2使用me?fields=cover驗證了這一點。

你已經覆蓋了照片Url只是從Json數組中讀取了String,從那個String你可以得到封面照片。 這是封面照片網址

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

像這樣你可以得到Json對象的Image Url。

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

我在我的應用中實現了類似的功能。 我是這樣做的,使用FQL:

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

這使得url成為封面照片,因為source標簽嵌套在pic_cover對象中,然后可以使用像Universal Image Loader這樣的庫將其設置為ImageView

object.getJSONObject("cover").getString("source")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM