FacebookグラフAPIを使用して、ユーザーのプロフィール写真を取得できることがわかります
http://graph.facebook.com/517267866/picture?type=large
正常に動作します。ただし、ブラウザに上記のURLを入力すると、画像の実際のアドレスは
http://profile.ak.fbcdn.net/profile-ak-snc1/v227/560/83/n517267866_1928.jpg
最初のURLをプログラムで使用して2番目のURLを取得するにはどうすればよいですか?
最初のURLは、2番目のURLにHTTP 302(一時リダイレクト)を提供します。したがって、2番目のURLをプログラムで見つけるには、最初のURLに対してHTTPリクエストを発行し、応答のLocation
ヘッダーを取得できます。
ただし、2番目のURLが永続的であることに依存しないでください。 HTTPレスポンスコード(パーマネント301ではなく302)を少し読むと、Facebookが定期的にそれらのURLを変更して、人々がサーバーを使用して画像をホストできないようにすることができます。
Edit:OPが投稿したCDN URLが404になっていることに注意してください。したがって、URLの寿命は長くなりません。また、SSLで保護されたページの<img>
からGraph APIにリンクしている場合、 パラメータがあります 追加する必要があります 必ずhttps://graph.facebook.com
を使用してください。
更新:APIには パラメーターを追加 – redirect=false
–リダイレクトではなくJSONが返されます。再構築されたJSONにはCDN URLが含まれます。
{
"data": {
"url": "http://profile.ak.fbcdn.net/...",
"is_silhouette": false
}
}
繰り返しますが、私はこのCDN URLが長持ちすることに依存しません。 JSONレスポンスは寛容なCORSヘッダーで送信されるため、XHRリクエストを使用してこのクライアント側を自由に行うことができます。
私はこれが遅いことに気付きますが、プロフィール画像のURLを取得する別の方法があります。
元のURLにパラメーターredirect=false
を追加して、通常リダイレクトされる画像の実際のURLを取得できます。
したがって、新しいリクエストは http://graph.facebook.com/517267866/picture?type=large&redirect=false のようになります。これにより、画像のURLとis_silhouetteブール値を含むJSONオブジェクトが返されます(画像がデフォルトのFacebook画像の場合はtrue)。
画像も指定したサイズになります。寸法を追加することで、これをさらにテストできます。 http://graph.facebook.com/517267866/picture?type=large&redirect=false&width=400&height=4
iOSでプロフィール写真を取得したい他の人:
ユーザーのFacebook写真を取得するためにこれを実行しました。
NSString *profilePicURL = [NSString stringWithFormat:@"http://graph.facebook.com/%@/picture?type=large", fbUserID];
ここで、「fbUserID」はFacebookユーザーのプロファイルIDです。
このように、常にprofilePicURLのurlを呼び出すだけで画像を取得でき、常に問題なく取得できます。既にユーザーIDを取得している場合は、APIリクエストは必要ありません。facebook.com/の後のURLにIDを貼り付けるだけです。
参考までに、iOSでfbUserIDが必要な人は誰でも:
if (FBSession.activeSession.isOpen) {
[[FBRequest requestForMe] startWithCompletionHandler:
^(FBRequestConnection *connection,
NSDictionary<FBGraphUser> *user,
NSError *error) {
if (!error) {
self.userName = user.name;
self.fbUserID = user.id;
}
}];
}
これを機能させるには、アクティブなFBSessionが必要です(Facebookのドキュメントと「Scrumptious」の例を参照)。
URLを含む良質のプロファイル画像のJSONが必要な場合は、それを使用できます。
http://graph.facebook.com/517267866/picture?height=1024&redirect=false
ピクチャが必要な場合は、パラメータリダイレクトなしで使用します。
http://graph.facebook.com/517267866/picture?height=1024
517267866は、上記の例のいずれかのプロファイルIDです。必要なFacebook IDを入力してください
それがお役に立てば幸いです
$url = 'http://graph.facebook.com/100000771470028/picture?type=large';
$rray=get_headers($url);
$hd = $rray[4];
echo(substr($hd,strpos($hd,'http')));
これにより、要求したURLが返されます。元のURLからURLを動的に呼び出すため、facebookでURLを変更する問題は問題になりません。
これが実際に機能する唯一のものです。
me?fields=picture.type(*YOURTYPE*)
ここで、YOURTYPEは、次のいずれかです:small、normal、album、large、square
Androidの場合:
最新のFacebook SDKによると、
最初に、API
がGraphRequest API
も与えるユーザーの詳細をすべて取得するために、URL of current Profile Picture
を呼び出す必要があります。
Bundle params = new Bundle();
params.putString("fields", "id,email,gender,cover,picture.type(large)");
new GraphRequest(token, "me", params, HttpMethod.GET,
new GraphRequest.Callback() {
@Override
public void onCompleted(GraphResponse response) {
if (response != null) {
try {
JSONObject data = response.getJSONObject();
if (data.has("picture")) {
String profilePicUrl = data.getJSONObject("picture").getJSONObject("data").getString("url");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}).executeAsync();
今、FacebookはSSLが必要です
->重要なS、httpsを追加-> https://graph.facebook.com/userId/?fields=picture&type=large
2014年6月の作品
function getFacebookImageFromURL($url)
{
$headers = get_headers($url, 1);
if (isset($headers['Location']))
{
return $headers['Location'];
}
}
$url = 'https://graph.facebook.com/zuck/picture?type=large';
$imageURL = getFacebookImageFromURL($url);
Hmm..iはユーザー画像へのURLを取得するためにあらゆることを試みました。完璧な解決策は、このようなfqlの使用でした->
$fql_b = 'SELECT pic from user where uid = ' . $user_id;
$ret_obj_b = $facebook->api(array(
'method' => 'fql.query',
'query' => $fql_b,
));
$dp_url =$ret_obj_b[0]['pic'];
他の望ましい結果を得るには、picをbig、pic_squareに置き換えます。助けてください...
ImageView user_picture;
userpicture=(ImageView)findViewById(R.id.userpicture);
URL img_value = null;
img_value = new URL("http://graph.facebook.com/"+id+"/picture?type=large");
Bitmap mIcon1 = BitmapFactory.decodeStream(img_value.openConnection().getInputStream());
userpicture.setImageBitmap(mIcon1);
IDは1ですプロファイルID。