2012-09-15 21 views
7

私のAndroidアプリケーションでは、自分のFacebookアカウントからユーザーの表紙写真を取得しようとしています。Facebook APIを使用して写真を撮る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" 
} 

私はFacebook Graph APIにはかなり新しく、これについてどうやって行くのかについて多くの知識はありません。

私は

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

もこのcoverPicUrl = new URL("http://graph.facebook.com/" + userId + "/fields=cover");を試みたが、私は、ユーザープロファイルの表紙画像を取得することができていません。

オンラインで検索しても結実が得られませんでした。

ご協力いただければ幸いです。

ありがとうございます!

答えて

8

"source"タグ(JSONObject)は別のJSONObject、つまり "cover"タグの中にネストされています。この結果を解析するには、使用する必要がありますこのような何か:

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

例で使用JOCoverは、すでにルートを解析するJSONOBject (JOCover)を持っていることを前提としています。代わりにあなた自身のJSONObjectを代用することができます。

"source"タグは、 "cover"タグにネストされているため、直接アクセスすることはできません。 「.optJSONObject("cover")」を使用する必要があります。私は人々が.optJSONObjectの代わりに.getStringを使用するのを見ましたが、私は一度も使っていません。あなたに適したものを選択してください。グラフAPIを使用してソリューションのためのあなたの要求を1として

EDIT

、私は、以前のソリューションを編集し、グラフ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

あなたはすでに写真URLをカバーしています.Jsonアレイからその文字列を読み込んだだけで、その文字列からCover写真を取得できます。 これは、カバー写真のURLを使用すると、画像のURLは、JSONオブジェクトを形成し得ることができ、このような

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

です。

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

:フェッチ表紙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" 
} 

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

私はそれを念頭に置いておくよ、私は人を助けたかった –

関連する問題