如何在Google Photos API中使用可选参数?

时间:2019-04-27 07:27:47

标签: php google-api google-photos

我正在使用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;
}

1 个答案:

答案 0 :(得分:0)

我对此不是100%肯定,但似乎iterateAllElements会在字面上遍历该帐户中的所有可用元素,而忽略了您指定的pageSize(甚至是默认的pageSize)通过无限制地向API请求所有内容。

您可以遍历返回的页面,将iterateAllElements替换为iteratePages,但是如果没有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行为及其文档非常奇怪和混乱。