有名な製薬会社の 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') とマージします。