首页 > 解决方案 > 如何在 Google Photos API 中使用可选参数?

问题描述

我正在使用 Google Photos API 开发 php 项目。我有一个问题,如果我传递诸如 pageSize 之类的可选参数,它仍然无法获取所有图像。

$optParams = array(
  'pageSize' => 1,
);

$response = $photosLibraryClient->listMediaItems($optParams);
foreach ($response->iterateAllElements() as $item) {
    $id = $item->getId();
    $description = $item->getDescription();
    $mimeType = $item->getMimeType();
    $productUrl = $item->getProductUrl();
    $filename = $item->getFilename();

    echo '<br>';
    echo $filename;
}

标签: phpgoogle-apigoogle-photos

解决方案


我不是 100% 确定这一点,但它似乎iterateAllElements确实迭代了帐户中可用的所有元素,忽略了您指定的 pageSize(甚至是默认的 pageSize),通过从 API 请求所有内容而没有任何界限。

您可以迭代返回的页面,替换iterateAllElementsiteratePages,但如果没有albumId,它似乎也无法正常工作,API 返回不规则的页面大小,如下例所示:

$optParams = array(
  'pageSize' => 5 // Changed
);

$response = $photosLibraryClient->searchMediaItems($optParams); // Changed the method

foreach ($response->iteratePages() as $key => $page) {
    echo "Page #{$key}<br>";
    foreach ($page as $item) {
        $id = $item->getId();
        $description = $item->getDescription();
        $mimeType = $item->getMimeType();
        $productUrl = $item->getProductUrl();
        $filename = $item->getFilename();

        echo '<br>';
        echo $filename;
    }
}

如果在没有提供 的情况下调用了搜索或列表albumId,则上面的示例将返回如下内容:

[
    [{...},{...},{...}],
    [{...},{...},{...},{...},{...}],
    [{...}],
    [],
    [{...},{...},{...},{...},{...}],
    []
]

如果您找到解决此特定问题的好方法,请告诉我。

Ps.:他们的 API 行为和它的文档非常奇怪和令人困惑。


推荐阅读