2011-05-17 171 views
1

OK,這裏是我的困境:PHPFlickr腳本...這可以更清潔/更精簡嗎?

我讀過各地有多少人希望能夠以顯示一組使用PHPFlickr來自Flickr的圖片,但哀嘆如何進行的photosets API不把個人照片說明。有些人試圖設置他們的PHP,因爲當腳本在頁面上組裝頁面時,它會拉取每張照片的描述。然而,該方法表明它可能會有多慢和低效率。

我在其他地方發現了一個用照片ID和描述創建一串逗號分隔值的想法。我會將它存儲在MySQL數據庫中,然後在我的腳本在頁面上組裝圖庫時調用它。我會使用爆炸來創建一個照片ID和它的描述數組,然後調用它來填補空白......因此更少的API調用和更快的頁面。

所以在後臺管理員中,我有一個表單,在其中爲圖庫設置了信息,並且我手上了一個Set ID。然後該腳本會通過並創建這個分隔值的字符串(「|〜|」作爲分隔符)。以下是我想出了:

include("phpFlickr.php"); 
$f = new phpFlickr("<api>"); 

$descArray = ""; 

// This will create an Array of Photo ID from the Set ID. 
// $setFeed is the set ID brought in from the form. 
$photos = $f->photosets_getPhotos($setFeed); 
foreach ($photos['photoset']['photo'] as $photo) { 
    $returnDesc = array(); 
    $photoID = $photo['id']; 
    $rsp = $f->photos_getInfo($photoID); 
    foreach ($rsp as $pic) { 
     $returnDesc[] = htmlspecialchars($pic['description'], ENT_QUOTES); 
    } 
    $descArray .= $photoID."|~|".$returnDesc[0]."|~|"; 
} 

然後將字符串$ descArray將被放置在與從形式帶來的其他信息,將其放入數據庫MySQL的字符串。

我的第一個問題是我正確使用第二個foreach循環來獲取這些描述?我嘗試了以下遍佈網絡的其他示例,但並未使用它們,但它們從未工作過。當我提出第二個foreach時,它就起作用了。我應該做其他事嗎?

我注意到返回的數據是兩個條目。一個是描述,另一個只是一個「o」...因此數組$ returnDesc,所以我只能得到我想要的一個字符串,而不是其他字符串。

第二個問題是,如果我讓這個過於複雜或沒有。我喜歡嘗試學習編寫更清晰/更精簡的代碼,並且正在尋找意見。

有關改進的建議值得歡迎。先謝謝你。

回答

0

我不是100%確定的,因爲我剛剛瀏覽了phpFlickr的源文件,並且看到了調用getInfo()的Flickr API。但讓我有一個去無論如何:)

首先,它看起來像你不應該需要循環,就像你提到的。 的輸出是什麼樣的?這可能是因爲$rsp是1個元素的數組,在這種情況下,你可以拋棄內環並且用類似$pic = $rsp[0]; $desc = $pic['description'];

而且,我會在數據庫中創建表的一個新的「描述」一欄替換(即將照片ID作爲主鍵),並將其描述存儲在它們自己的文件中。解析db字段就像是一場噩夢。最後,你可能想強制htmlspecialchars以UTF8模式工作,因爲我認爲它默認不會。從內存中,第三個參數是內容編碼。

編輯:不是phpFlickr有它自己的緩存系統嗎?爲什麼不使用它並使緩存大小很大?似乎你可能正在重新發明這裏的車輪...也許你所需要做的就是增加緩存大小,並製作一個getDescription函數:

function getDescription ($id) 
{ 
    $rsp = $phpFlickr->photos_getInfo ($id); 
    $pic = $rsp[0]; 
    return $pic['description']; 
} 
相關問題