Facebookアプリのフィードビューに大きな写真をすぐに表示したい。 1つのAPI呼び出しを使用してストリーム/フィードから大きな写真のsrc URLを取得することは可能ですか?写真IDはストリーム/フィードで返され、もちろんこの写真IDを追加のFQLまたはグラフAPI呼び出しで提供して、その写真に関するすべての情報を取得できます。しかし、マルチクエリまたはバッチ呼び出しを使用して、1つのAPIラウンドトリップを使用してより大きな写真src URLを取得する方法はありますか?
ストリーム/フィードの写真でこれを試したことはありませんが、一般的に受け入れられている方法は次のとおりです。
http://graph.facebook.com/{ID of object}/picture
「大」バージョンが必要な場合は、次のようにします。
http://graph.facebook.com/{ID of object}/picture?type=large
これが実際の写真(ユーザープロフィール写真やページプロフィール写真ではなく)で機能するかどうかは100%確信はありませんが、私はそれがうまくいくと思います-唯一の注意点は、明らかにログインユーザーが必要だということです(公開されていない限り)写真を閲覧する権限があります。
誰かがこれを探していて、大きな文字を入力するだけでは十分でない場合、他の解決策を見つけました。
タイプlarge
はとにかく小さなものです(200pxに近い)。 ?width=1000
または?height=1000
を追加すると、より大きな画像を取得できます。 Facebookは指定された寸法に最も近い画像を返し、アスペクト比を保持します。 ?width=1000&height=1000
などの両方の寸法を渡すと、facebookは指定された寸法(この場合は正方形)に画像を切り取ります。
Facebook UserId(オブジェクトID)を使用して写真を取得します。
https://graph.facebook.com/173xxxx8635/picture?type=large&redirect=false
画像のURLを含むJSONデータを返します。
{
"data": {
"is_silhouette": false,
"url": "https://fbcdn-profile-a.akamaihd.net/xxx/xyz/1cc066a2cae3f301d"
}
}
この問題を抱えていたとき、設定したサイズではなく、ダウンロードした画像であることがわかりました。
たとえば、次のリクエストですべての写真をダウンロードした場合
[FBRequestConnection startWithGraphPath:@"/me/photos?fields=created_time,name,picture&type=tagged" parameters:nil HTTPMethod:@"GET" completionHandler:^(FBRequestConnection * connection, id result, NSError *error) {
NSDictionary * userData = (NSDictionary *)result;
NSMutableArray * array = [[NSMutableArray alloc] initWithArray:userData[@"data"]];
for (NSDictionary * dict in eventsToAdd) {
UIImage * image = dict[@"picture"]
}
}];
写真が欲しいので、辞書キー検索「写真」を使用しています。
これは、この検索で「ソース」を検索した場合よりも低品質の画像を取得します:
[FBRequestConnection startWithGraphPath:@"/me/photos?fields=created_time,name,source&type=tagged" parameters:nil HTTPMethod:@"GET" completionHandler:^(FBRequestConnection * connection, id result, NSError *error) {
NSDictionary * userData = (NSDictionary *)result;
NSMutableArray * array = [[NSMutableArray alloc] initWithArray:userData[@"data"]];
for (NSDictionary * dict in eventsToAdd) {
UIImage * image = dict[@"source"]
}
}];
Facebook API Explorerで写真を検索し、写真とソースjpgリンクをクリックすると、サイズと品質の違いがわかります。
このメソッドを変更してから、型パラメーターの使用をやめることができました。違いはないようです。
注:私はiPadや大きな画面ではなくiPhoneを使用しているため、これがどのように大きな画面に影響するかわかりません。
新しいAPIを使用する良い方法は、イベントテーブルからpic_coverフィールドを取得し、使用するサイズに応じて処理することです。
@streetlogicsの答えは問題なく機能しますが、{object_id}
が含まれる写真でのみ有効です。
http://graph.facebook.com/{object_id}/picture
しかし、フィードの共有リンク用に大きな写真が必要でした。この写真には{object_id}
がない場合があります。 {picture}
サムネイルURLには、元のサイトの大きな画像のエンコードされたURLが含まれていることがようやくわかりました。
https://external.xx.fbcdn.net/safe_image.php?d=AQBe9UvGd0vPbAHP&w=130&h=130&url=http%3A%2F%2Fskift.com%2Fwp-content%2Fuploads%2F2015%2F12%2Fpollution.jpg&cfs=1
->含む->
http://skift.com/wp-content/uploads/2015/12/pollution.jpg
そこで、{object_id}
をチェックするループを作成し、存在しない場合は{picture}
からURLを抽出します。
if(isset($post['object_id'])) {
echo "http://graph.facebook.com/".$post['object_id']."/picture";
}
elseif(isset($post['picture'])) {
echo urldecode(preg_replace('/&cfs.*/', '', preg_replace('/.*url=/', '', $post['picture'])));
}
else {
echo "no_large_image";
}