1

好的,这是我的困境:

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

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

第二个问题是我是否把它弄得太复杂了。我喜欢尝试学习编写更简洁/更精简的代码,并且正在寻找意见。

欢迎提出改进建议。先感谢您。

4

1 回答 1

0

我不是 100% 确定,因为我刚刚浏览了phpFlickr的源代码,并查看了调用的 Flickr APIgetInfo()。不过还是让我试试吧:)

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

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

编辑: phpFlickr 没有自己的缓存系统吗?为什么不使用它并使缓存大小变大呢?似乎您可能在这里重新发明轮子......也许您需要做的就是增加缓存大小,并创建一个getDescription函数:

function getDescription ($id)
{
    $rsp = $phpFlickr->photos_getInfo ($id);
    $pic = $rsp[0];
    return $pic['description'];
}
于 2011-06-23T11:16:24.463 回答