【发布时间】:2015-08-18 14:25:42
【问题描述】:
我使用与gmail api 配合使用的google php 库。我想从我的 gmail 帐户中获取所有消息。
我就是这样做的:
do {
$this->client->setUseBatch(false);
$messagesResponse = $service->users_messages->listUsersMessages('me', compact('pageToken'));
if ($messagesResponse->getMessages()) {
$batch = new Google_Http_Batch($this->client);
$this->client->setUseBatch(true);
foreach ($messagesResponse as $item) {
$request = $service->users_messages->get('me', $item->id, ['format' => 'raw']);
$batch->add($request);
}
$messages = array_merge($messages, $batch->execute());
$pageToken = $messagesResponse->getNextPageToken();
}
} while ($pageToken);
当我从 CLI 运行此脚本时,出现以下错误:
[Google_IO_Exception]
操作在 100000 毫秒后超时,收到 57157107 个字节
如果我用检索新令牌来评论该行,那么我会收到前 100 条消息并且它有效。但我无法获取所有这些。 PHP没有超时,这是google_io_exception,所以我不知道如何解决这个问题。另外,任何优化技巧都会很棒,因为我唯一知道的是批处理请求,但我使用它们。
【问题讨论】:
-
可能是API的一些限制?如果您可以成功获得前 100 封邮件,是否有办法传入偏移量,这样您就可以遍历收件箱并一次收到 100 封邮件?我必须承认我对 GMail api 没有任何经验,所以这只是我的猜测......
-
我建议尝试使用小于 100 的批量大小。尝试 20 或 50 看看是否可靠地工作得更快。 (您只需将 maxResults 添加到您的 listUsersMessages 调用中即可做到这一点,而不更改代码中的任何其他内容。)
-
奇怪的是,现在我得到“(429) 超出用户速率限制。”。我去我的开发控制台检查,我收到了 100% 的剩余请求。不知道是什么问题,会努力解决的
-
Eric,我在设置 maxResults = 20 时遇到了同样的错误。脚本运行了几分钟,然后显示“操作在 100000 毫秒后超时,收到 53707801 个字节”。有什么建议吗?
标签: php google-api-php-client gmail-api