【发布时间】:2016-12-21 23:14:56
【问题描述】:
我正在使用以下查询:
无人深空
与 API Explorer 和我的 C# 应用程序相比,我从 Web UI 获得的结果不同。
GMail 网页界面
注意,对话视图已禁用:
如果我启用对话视图,我会得到 9 个由 Web UI 返回的线程;使用线程 API,我得到 7 个线程。
API 资源管理器https://developers.google.com/gmail/api/v1/reference/users/messages/list:
{
"messages": [
{
"id": "15686dcf7989e60f"
},
{
"id": "1566bce4412a439d"
},
{
"id": "156327e51b979f48"
},
{
"id": "1560f0caf9297ab9"
},
{
"id": "155f01dba1c3ad77"
},
{
"id": "1538bce006a95a84"
},
{
"id": "15342e9d99b4d3f6"
}
]
}
我在 C# 应用程序中看到了与 API Explorer 相同的结果。 API 和 Web UI 之间似乎存在脱节。 Web UI 返回 10 个结果,API 仅返回这 10 个结果中的 7 个(我已经手动验证它们是 10 个的子集)。
更新:
事实证明,API 将查询视为文字。用引号将 Web UI 中的查询括起来会得到与 API 相同的结果。
这确实留下了如何使用 API 复制原始搜索的问题;是否必须运行 3 个查询,然后只获取所有 3 个返回的结果?当您开始处理复杂的查询时,会变得有点解析工作。
更新 2
我尝试通过单独运行 3 个 AND 项,然后提取结果,其中消息 ID 是所有 3 个查询的结果集,我得到了与 API 调用相同的 7 个结果。
p>用于测试的代码:
var service = GMailServiceManager.Instance.Service;
var resultsNo = GMailUtils.GetItems(service, null, "No", true);
var resultsMans = GMailUtils.GetItems(service, null, "Man's", true);
var resultsSky = GMailUtils.GetItems(service, null, "Sky", true);
var anded = from nos in resultsNo.Items
from manses in resultsMans.Items
from skys in resultsSky.Items
where nos.Id == manses.Id && nos.Id == skys.Id
select nos.Id;
GMailUtils.GetItems() 只是处理 API 请求的批处理和一些其他特定于应用程序的例程。它使用以下内容来检索批次中的每组项目:
UsersResource.MessagesResource.ListRequest request = service.Users.Messages.List("me");
request.Q = search;
request.Fields = "messages(id),nextPageToken";
request.PageToken = pageToken;
// Logging and batching here
...
request.Execute();
...
我现在不知道 Web UI 是如何产生其他点击的;在两个实例中,点击突出显示在 www.no-mans-sky.com 上(它们在同一个线程中):
NoMan 和 Sky 的其他点击分别在电子邮件中(注意不是 Man 的)。
更新 3
回到 Web UI,我决定对搜索词 Man's 进行一些测试。
在 Web UI 中,我获得了数百次点击:
对于"Man's",我获得了 11 次点击:
API 与引用的 Web UI 匹配:
{
"messages": [
{
"id": "15686dcf7989e60f"
},
{
"id": "1566bce4412a439d"
},
{
"id": "156327e51b979f48"
},
{
"id": "1560f0caf9297ab9"
},
{
"id": "155f01dba1c3ad77"
},
{
"id": "1538bce006a95a84"
},
{
"id": "15342e9d99b4d3f6"
},
{
"id": "13da4a6d7a4159b2"
},
{
"id": "13da4a502eca7dff"
},
{
"id": "12e70fbf3d655ac8"
},
{
"id": "1278adc3ed72f6a8"
}
]
}
基于此,API 的查询似乎被视为字符串文字,而不是 Web-UI 样式的查询。对我来说似乎是一个错误,因为我找不到使用 API 重现 Web UI 结果的方法。
【问题讨论】:
-
您将在 UI 中获得线程,并在 listing messages 时分隔消息。如果您改为list threads,是否匹配?
-
我在 UI 中关闭了线程,并且 UI 获得的结果比 API 多。
-
我明白了。如果您要打开对话视图并列出线程,两种情况下的结果是否一样多?我不能 100% 确定它是如何工作的,但是 UI 可能会显示对话中的所有消息,而使用 API 列出消息则不会。
-
@Tholle 不,使用线程我仍然得到 7 个结果,Web UI 得到 9 个而不是 10 个。
-
不幸的是,UI 中有 8 个项目被标记为收件箱,另外两个没有标签,这也是我的第一个想法。 includeSpamTrash=true 从 API 返回几十个结果。
标签: gmail-api