1

バッチリクエストを介してPHPSDKを使用しています(すべてのアルバムのカバーを取得するのが高速になるように)。正常に動作していますが、取得している写真はアルバムカバーではなく、さまざまなトリミングサイズの個々の写真です。

$albums_resp = $facebook->api('/'.$fbid.'/albums','GET');
$albums = $albums_resp['data'];

//prepare batch query for album covers
$queries = array ();    
foreach ($albums as $album)
{
    if ($album['cover_photo'] != null)
    {
        $query = array('method' => 'GET', 'relative_url' => $album['cover_photo']);
        array_push($queries, $query);
    }
}

$queries_str = json_encode($queries);
$batchResponse = $facebook->api('?batch='.$queries_str, 'POST');

ここ/{albumID}/picture?type=smallに示されているURLを使用する別の方法があることは知っていますが、Facebookが表紙に表示するのと同じ画像サイズを取得することはできません(私は、、を試しました)。このアプローチをすべてのアルバムのバッチリクエストで使用すると、応答をアルバムIDと関連付ける方法がないようです。私が応答して受け取るのは、画像の場所を含むリダイレクトステータス302です。thumbnailsmallcover

/{albumID}/picture?type=small25枚のアルバムがある場合、25枚の画像リダイレクトを意味し、ページが遅くなるため、画像リンクを直接配置したくありません。

4

1 に答える 1

1

最後に、cover_photoIDを使用して完全な画像情報(さまざまなサイズの画像のURLとID自体を含む)を取得し、それをアルバムのカバー写真IDと関連付けました。

$cover_photos = array();
foreach ($batchResponse as $cover_photo_resp)
{   
    if ($cover_photo_resp['code'] == 200)
    {
        $cover_photo = json_decode($cover_photo_resp['body'], true);    
        $cover_photos[$cover_photo['id']] = $cover_photo;
    }
}

//correlate the cover photos with the respective albums, according to the cover photo ID
for ($i = 0; $i < count($albums); $i++)
{
    $albums[$i]['cover_photo_obj'] = $cover_photos[$albums[$i]['cover_photo']]; 
}

最終的には、$albums[]各アルバムに追加のフィールドがありcover_photo_obj、カバー写真に関するすべての情報を含むオブジェクトを参照する連想配列の配列になります。

于 2013-04-26T23:34:31.643 に答える