2012-08-14 118 views
0

这就是我现在正在做的事情。下载多张个人资料照片

foreach($response['data'] as $friends_phtoos) { 
    $f_id = $friends_phtoos['id']; 
    $img = 'https://graph.facebook.com/'.$f_id.'/picture'; 
    $image = $f_id.'.jpg'; 
getFacebookPhoto($img, $image); 
} 

但是它正在采取大量的时间来下载所有的10张照片我做这个循环中获得最大的10张照片 。

快速获取这些照片的最佳方法是什么? 我听说过批次。但我不知道如何在PHP中使用它。

getFacebookPhoto函数是一个用于下载照片的卷曲函数。 我可以使用卷曲来获取Facebook照片吗?这是否违反了FB的条款和条件? (附加问题;)

+1

我得到了反对这个问题的投票:)我们在这里优化其他工作。我分享了我的工作并寻求帮助。仍然反对票:)惊讶! – Mahesh 2012-08-15 06:45:00

回答

1

您正在进行10个API调用,这会降低您的速度。使用卷曲没有问题,但由于我不知道你的getFacebookPhoto函数看起来像我将使用file_get_contents给你一个完整的解决方案。

诀窍是进行一次API调用并获取所有照片。使用Graph API路径/ID/photo/也会使事情稍微放慢,因为这会导致301重定向到用户的照片。我打算使用FQL,因为它速度更快。这为您提供了一个包含Facebook照片的ID和URL的阵列。不要认为数据将以您发送ID的相同顺序返回。

$f_id = array(); 
foreach($response['data'] as $friends_phtoos) { 
    $f_id[] = $friends_phtoos['id']; 
} 
$ids = implode(',',$f_id); 
$fql = "SELECT id, pic FROM profile WHERE id IN ({$ids})"; 
$url = 'http://graph.facebook.com/fql?q=' . urlencode($fql); 
$fb_photos = json_decode(file_get_contents($url)); 
+0

非常好。谢谢 – Mahesh 2012-08-15 05:20:38

+0

** getFacebookPhoto **将图片保存在服务器中。这是否违反fb的条款和条件?我用culr来下载它们。 – Mahesh 2012-08-15 05:22:20

+0

这取决于你如何使用它们。您可以合法地将它们缓存为“短期”,但您应在所有者更改照片时更新它们。我发现只要在外部缓存确定的每个页面加载时使它们变得更加容易就可以了。 – cpilko 2012-08-15 13:34:59

-1

考虑到这个forloop没有什么特别之处,问题很可能在于您的下载。这么长时间的原因与你的实现无关,但很可能与下载速度本身有关。

+0

我在专用服务器上有很好的下载速度。它有1Gbps的端口。这次下载的平均下载速度是多少? – Mahesh 2012-08-14 16:52:40

+0

@MaheshKumar它可能不一定就在你的尽头。它可能在Facebook的结尾。 – 2012-08-14 16:53:05

+0

听到这个很遗憾。没有办法加速它? – Mahesh 2012-08-14 16:58:47

相关问题