2011-05-17 168 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']; 
} 
相关问题