好吧,这是我的两难境地:
我读过很多关于有多少人希望能够使用PHPFlickr显示Flickr中的一组图片的文章,但遗憾的是PhotoSets的API没有提供单独的照片描述。有些人试图设置他们的PHP,这样当脚本在页面上组装图库时,它将拉取每张照片上的描述。然而,该方法已经表明它可以是多么缓慢和低效。
我在其他地方有了一个想法,用照片ID和描述创建一个逗号分隔值字符串。我将它存储在MySQL数据库中,然后在我的脚本在页面上组装图库时调用它。我将使用explode创建一个包含照片ID及其描述的数组,然后调用该数组来填充gaps...thus less API调用和一个更快的页面。
因此,在后端管理中,我有一个表单,我在其中为图库设置了信息,并提供了一个集合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"...hence数组$returnDesc,这样我就可以只得到一个我想要的字符串,而不是另一个。
第二个问题是我是不是把事情搞得太复杂了。我喜欢尝试编写更干净/更精简的代码,并在寻求意见。
欢迎提出改进建议。提前谢谢你。
发布于 2011-06-23 19:16:24
我不是100%确定,因为我刚刚浏览了phpFlickr的源代码,并查看了Flickr API中的getInfo()调用。但不管怎样,让我试一试:)
首先,看起来你不应该需要这个循环,就像你提到的那样。print_r($rsp);的输出是什么样子的?可能是因为$rsp是一个包含1个元素的数组,在这种情况下,您可以去掉内部循环,将其替换为$pic = $rsp[0]; $desc = $pic['description'];之类的内容
另外,我会在数据库表中创建一个新的" description“列(它将照片id作为主键),并将描述单独存储在它们中。像这样解析db字段有点像噩梦。最后,您可能希望强制htmlspecialchars在UTF8模式下工作,因为我不认为默认情况下它是这样做的。内存中的第三个参数是内容编码。
编辑: phpFlickr没有自己的缓存系统吗?为什么不使用它,并使缓存大小更大呢?看起来你可能是在重新发明轮子。也许您所需要做的就是增加缓存大小,并创建一个getDescription函数:
function getDescription ($id)
{
$rsp = $phpFlickr->photos_getInfo ($id);
$pic = $rsp[0];
return $pic['description'];
}https://stackoverflow.com/questions/6033142
复制相似问题