我们正在尝试为一家著名的制药公司网站实现一项功能,该功能需要使用 facebook API 从 facebook 检索图像,以生成结果图像文件。
然而,我们在使用 API 调用检索图像时遇到了技术困难,因为图像来自的 URL 的域和 IP(sphotos-d.ak.fbcdn.net 和 a2.sphotos.ak.fbcdn.net)的随机变化被检索(由于 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。该语句将返回包含图像数据的 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')合并