0

我们正在尝试为一家著名的制药公司网站实现一项功能,该功能需要使用 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')合并

4

1 回答 1

1

无法将 API 的响应限制为仅包含特定服务器上的资源。

如果您需要调整防火墙以便访问 Facebook 的服务器,则检索分配给 Facebook 的 IP 地址的完整列表的方法列在文档中:https ://developers.facebook.com/docs/ApplicationSecurity/

目前可以使用以下命令检索:

whois -h whois.radb.net -- '-i origin AS32934' | grep ^路线

于 2012-11-02T03:20:23.957 回答