2012-08-14 116 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

相關問題