0

有名な製薬会社の Web サイトに、facebook API を使用して facebook から画像を取得し、結果の画像ファイルを生成する機能を実装しようとしています。

ただし、画像の取得元 URL のドメインと IP (sphotos-d.ak.fbcdn.net および a2.sphotos.ak.fbcdn.net ) がランダムに変更されるため、API 呼び出しを使用して画像を取得する技術的な問題に直面しています。が取得されます (CDN、DNS ラウンド ロビン、および負荷分散のため)。開発環境はかなり制限されており、広範囲の IP アドレスを開くことはできません。

この API 呼び出しを実行して静的 URL または IP を返す代替ソリューションを教えてください。

実装の詳細を以下に示します。

Facebook から画像を取得する関数:

function getAlbumPhotos(album_id) {
    var count = 1;
    id = album_id;
    //call FB to get JSON of all photos in an album - the response function is inline
    //and sets the output div  with images and sets up click handlers
    FB.api('/' + id + '/photos', function (response) {
        var nHTML = "";

        //build html for all photos
        for (var i = 0, l = response.data.length; i < l; i++) {
            //photo ids
            photo_id = response.data[i];
            //image url
            image_link = photo_id.source
            nHTML += fbPhotos(count, image_link);
            count++;
        }
        //set the html content
        nHTML = "<h1>"+__("select.friend")+"</h1>" + nHTML + "<div class='clear'></div>";
        $('#myContent').html(nHTML);
                                Cufon.refresh();
        //set click handlers for all new items
        for (var i = 0, l = response.data.length+1; i < l; i++) {
            $('#fbphoto_' + i).click(fbPhoto_click);
        }
        hideBusy();
    });

コード FB.api('/' + id + '/photos', function (response) {}) 「id」は、ユーザーが選択したアルバム ID です。このステートメントは、画像データ (例: 完全な画像の URL、アップロード日、タイトル) を含む json 型の画像データのリストを返します。

「完全な画像の URL」は次のようになります

http://a2.sphotos.ak.fbcdn.net/hphotos-ak-snc6/205045_1360429746128_61249_n.jpg

http://sphotos-d.ak.fbcdn.net/hphotos-ak-ash4/s720x720/308224_1593433971088_1975239922_n.jpg

この URL を使用してクライアントに画像を表示し、ポストカードを作成します

ポストカードの作成:

サーバー (ポストカードを作成)

<?php

$LeftPath = "http://a2.sphotos.ak.fbcdn.net/hphotos-ak-snc6        /205045_1360429746128_61249_n.jpg";
$RightPath = "http://a2.sphotos.ak.fbcdn.net/hphotos-ak-snc6/205045_1360429746128_61249_n.jpg";
$Postcard = imagecreatefromjpeg('images/Postcard/postcard_BG.jpg');
$LeftImage = imagecreatefromjpeg($LeftPath); 
$RightImage =  imagecreatefromjpeg($RightPath); 
imagealphablending($Postcard, false);
imagesavealpha($Postcard, true);
imagecopymerge($Postcard, $LeftImage, 336, 233, 0, 0, 300, 300, 100);
imagecopymerge($Postcard, $RightImage, 642, 276, 0, 0, 300, 300, 100); 

header('Content-Type: image/jpeg');
imagejpeg($Postcard, NULL, 75);
?>

サーバー上で、Facebook から「Full image url」で画像を取得し、PHP の GD Libraly を使用して内部ポストカード画像 ('images/Postcard/postcard_BG.jpg') とマージします。

4

1 に答える 1

1

API からの応答を制限して、特定のサーバー上のリソースのみを含める方法はありません。

Facebook のサーバーにアクセスできるようにファイアウォールを調整する必要がある場合は、Facebook に割り当てられた IP アドレスの完全なリストを取得する方法が次のドキュメントに記載されています: https://developers.facebook.com/docs/ApplicationSecurity/

現在、次のコマンドで取得できます。

whois -h whois.radb.net -- '-i オリジン AS32934' | grep ^ルート

于 2012-11-02T03:20:23.957 に答える