【问题标题】:PHPFlickr script...could this be cleaner/leaner?PHPFlickr 脚本...这可以更清洁/更精简吗?
【发布时间】:2011-08-27 08:23:52
【问题描述】:

好的,这是我的困境:

我已经阅读了很多关于有多少人希望能够使用 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 所以我可以得到我想要的一个字符串而不是另一个。

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

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

【问题讨论】:

    标签: php xml foreach flickr phpflickr


    【解决方案1】:

    我不能 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'];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-10
      • 1970-01-01
      • 2017-11-06
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 2011-04-03
      相关资源
      最近更新 更多