web-dev-qa-db-ja.com

Facebookページのより大きなプロフィール写真を取得する方法

Facebookから次のURLで画像を取得しています: http://external.ak.fbcdn.net/safe_image.php?d=d282e1e7c86c9270232f97ddc737df39&w=90&h=90&url=http%3A%2F%2Fi52.tinypic.com %2F2q0ixzl.jpg

今、私は200 x 200のようなより大きなバージョンが欲しいです。そのためのURLはありますか?そうでない場合、どうすればこの画像をより大きなサイズに変換できますか?

18
PJR

通常、ユーザーまたはページのプロフィール写真を収集する場合、アイコンサイズの写真の形式は次のとおりです。

http://graph.facebook.com/[page id/profile id]/picture

全体像について:

http://graph.facebook.com/[page id/profile id]/picture?type=large

[〜#〜] edit [〜#〜]注意点:Facebookサーバーに保存されている画像が200 * 200のサイズ未満の場合、利用可能な最高の解像度として画像を取得します(例:128 * 160)。 Gdライブラリを使用してサイズを変更することもできます。

そしてもう1つ

Facebookは、プロフィール写真の最高解像度として200 * 600pxをサポートしています。アスペクト比を維持することにより、これらの寸法に合うように画像のサイズを変更します。

* 2017年2月19日更新*

この新しいURLフォーメーションを使用して、目的のプロファイル画像を取得する必要があります。

http://graph.facebook.com/{profile_id}/picture?width={number‌​}&height={number}

[ありがとう https://stackoverflow.com/users/2829128/vay]

52
Sujit Agarwal

より大きな画像を取得したい場合は、次のように高さと幅を設定できます。

http://graph.facebook.com/[page id/profile id]/picture?width=[number]&height=[number]

詳細と例はこちら: 写真-Facebook開発者

23

これも機能します

picture.type(large)

 if ([FBSDKAccessToken currentAccessToken]) {
    [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields": @"picture.type(large),name, email"}]
     startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
         if (!error) {
             NSLog(@"fetched user:%@", result);
             NSMutableDictionary *data=[[NSMutableDictionary alloc]init];
             data=result;


             fbId.text=[data valueForKey:@"id"];
             userName.text=[data valueForKey:@"name"];
             _emailFB.text=[data valueForKey:@"email"];



             NSDictionary *dictionary = (NSDictionary *)result;

             NSDictionary *data3 = [dictionary objectForKey:@"picture"];
             NSDictionary *data2 = [data3 objectForKey:@"data"];
             NSString *photoUrl = (NSString *)[data2 objectForKey:@"url"];

             NSLog(@"Photo : %@",photoUrl);


         }
     }];
}

}

6
Subhojit Mandal

はい、Facebookページの元の(ほとんどの場合は大きい)プロフィール写真を取得する方法があります。

実際、答えはすでに問題になっています。元の画像のURLはすでにsave_imageのURLに埋め込まれています。あなたの場合は「url = http%3A%2F%2Fi52.tinypic.com%2F2q0ixzl.jpg」です。これは「 http://i52.tinypic.com/2q0ixzl.jpg "」を意味します。

私の場合、ロンドンのページは

https://www.facebook.com/pages/London-United-Kingdom/106078429431815?fref=ts

検索キーワードLondonでfbオブジェクトIDを簡単に取得できます。幅と高さのパラメータを使用してみました。ユーザープロフィール写真またはユーザー共有写真では機能しますが、公開ページのプロフィール写真では機能しません。

https://graph.facebook.com/106078429431815/picture?width=300&height=300  // can’t work

たった180x77のURLをたどることで得られる最大の写真

https://graph.facebook.com/106078429431815/picture?type=large

しかし、fb graph apiを使用してsafe_image.php urlを取得できます。また、元の画像のURLもパラメーターのurlセクション内にあります。

"url": "https://fbexternal-a.akamaihd.net/safe_image.php?d=AQCrtKykRotXBuaS&w=180&h=540&url=http%3A%2F%2Fupload.wikimedia.org%2Fwikipedia%2Fcommons%2Fthumb%2Farchive%2F2%2F21%2F20141005220235%2521City_of_London_skyline_at_dusk.jpg%2F720px-City_of_London_skyline_at_dusk.jpg&fallback=hub_city&prefix=d"

これが私が使用したコードです。

[FBRequestConnection startWithGraphPath:[NSString stringWithFormat:@"/%@/picture?redirect=false&type=large",[firstCityPage objectForKey:@"id"]]
                    completionHandler:^(
                                        FBRequestConnection *connection,
                                        id result,
                                        NSError *error
                                        ) {

                        NSString *profileImgUrl = [NSString stringWithFormat:@"http://graph.facebook.com/%@/picture?type=large", [firstCityPage objectForKey:@"id"]];

                        if (error==nil) {
                            NSString *fbSaveImgUrl = [[(NSDictionary*)result objectForKey:@"data"] objectForKey:@"url"];

                            NSURLComponents *urlComponents = [NSURLComponents componentsWithURL:[NSURL URLWithString:fbSaveImgUrl]
                                                                        resolvingAgainstBaseURL:NO];

                            for (NSURLQueryItem *queryItem in urlComponents.queryItems) {
                                if ([queryItem.name isEqualToString:@"url"]) {
                                    profileImgUrl = queryItem.value;
                                    break;
                                }
                            }

                        } else {
                            NSLog(@"%@",[error description]);
                        }

                        NSLog(@"url: %@", profileImgUrl);

                        ...
                    }];

しかし、リスクがあります。

  1. 外部画像のURLが検証される保証はありません。

  2. Facebookは、将来、safe_image url内の明示的な外部URLを削除するか、safe_imageurlを開発者から非表示にする可能性があります。

ご自身の責任で使用してください。

0
River2202