【发布时间】:2017-02-07 18:25:57
【问题描述】:
我正在设置 Gmail 列表 API,但由于某种原因,即使我已将 maxResults 设置为 100,它也会返回我收件箱中的所有 5,000 封邮件。这是我当前的代码:
$pageToken = NULL;
$messages = array();
$opt_param = array();
do {
try {
if ($pageToken) {
$opt_param['pageToken'] = $pageToken;
$opt_param['maxResults'] = 100;
$opt_param['labelIds'] = 'INBOX';
}
$messagesResponse = $service->users_messages->listUsersMessages($userId, $opt_param);
if ($messagesResponse->getMessages()) {
$messages = array_merge($messages, $messagesResponse->getMessages());
$pageToken = $messagesResponse->getNextPageToken();
}
} catch (Exception $e) {
print 'An error occurred: ' . $e->getMessage();
}
} while ($pageToken);
foreach ($messages as $message) {
print 'Message with ID: ' . $message->getId() . '<br/>';
}
return $messages;
我不确定我哪里出错了,但我需要能够将我的收件箱过滤到最近发送的 100 条消息。
【问题讨论】:
-
这应该可行...这里很傻,但是您确定 $pageToken 不是“假的”? (即 maxResults 真的被设置了吗?)另外,这应该没什么区别,但也许可以尝试将 maxResults 作为字符串传递?
-
是的,我不小心没有将 $pageToken 添加到此,但它已设置。我现在就更新代码。
-
即使在第一个循环中?
-
不,是在实际代码中设置的,只是我复制代码到这里时没有突出显示。它总是在实际代码中。这也全部取自 Gmail API 文档,因此不确定 if 语句的用途。
-
也不确定,但由于它以 NULL 开头,因此 if 将返回 false,因此第一次调用不会设置 maxResults ...我会将
$opt_param['maxResults'] = 100;和$opt_param['labelIds'] = 'INBOX';移出那个“if”,所以你的第一个调用与所有后续调用具有相同的参数(减去 pageToken)