PHPFlickr脚本......这可能更干净/更精简吗?

时间:2011-05-17 15:22:03

标签: php xml foreach flickr phpflickr

好的,这是我的困境:

我已经阅读了有多少人希望能够使用PHPFlickr显示来自Flickr的一组图像,但是对于PhotoSets的API如何不放置单独的照片描述感到遗憾。有些人试图设置他们的PHP,因此当脚本组装页面上的图库时,它将拉出每张照片的描述。但是,该方法显示了它的缓慢和低效。

我在其他地方发现了一个想法,即用照片ID和描述创建一串逗号分隔值。我将它存储在MySQL数据库中,然后在我的脚本在页面上组装库时调用它。我将使用explode来创建照片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所以我可以得到我想要的一个字符串而不是另一个。

第二个问题是我是否过于复杂。我喜欢尝试学习更清洁/更精简的代码,并且正在寻找意见。

欢迎提出改进建议。提前谢谢。

1 个答案:

答案 0 :(得分:0)

我不是100%肯定,因为我刚刚浏览了phpFlickr的来源,并查看了getInfo()来自print_r($rsp);的{​​{1}}来电。但是,无论如何,让我去吧​​:)。

首先,看起来你不应该像你提到的那样需要那个循环。 $rsp的输出是什么样的?可能$pic = $rsp[0]; $desc = $pic['description'];是一个包含1个元素的数组,在这种情况下,您可以抛弃内部循环并将其替换为类似htmlspecialchars

的内容

另外,我会在您的数据库表中创建一个新的“description”列(将照片ID作为主键),并将描述存储在它们自己的位置。像这样解析数据库字段有点像噩梦。最后,您可能希望强制getDescription在UTF8模式下工作,因为我认为默认情况下不会这样做。从内存中,第三个参数是内容编码。

编辑: phpFlickr有没有自己的缓存系统?为什么不使用它并使缓存大小?好像你可能在这里重新发明轮子......也许你需要做的就是增加缓存大小,并制作一个function getDescription ($id) { $rsp = $phpFlickr->photos_getInfo ($id); $pic = $rsp[0]; return $pic['description']; } 函数:

{{1}}