使用YQL访问Yahoo Mail的新邮件

4
我目前正在编写一个JAVA应用程序,需要从用户Yahoo电子邮件消息中获取以下信息(以便向他们显示)。 YQL看起来像是一种“快速简便的方法”来做到这一点,然而它证明更加困难。我在此处进行了所有测试:http://developer.yahoo.com/yql/console/ 我可以使用我的webapp / oauth重复相同的结果。
  • 收件人
  • 发件人电子邮件地址
  • 发件人姓名
  • 主题
  • 消息正文
  • 日期
  • MID

我无法将所有内容放入一个查询调用中(即使是两个调用也有困难,虽然我没有花费太多时间研究这样的解决方案)。目前我有以下YQL:

SELECT folder.unread, message FROM ymail.msgcontent
    WHERE (fid,mids )
    IN
        (SELECT folder.folderInfo.fid, mid
        FROM ymail.messages
        WHERE numMid=2
        AND startMid=0)
        AND fid='Inbox' 
        AND message.flags.isRead=0;

这是我所有解决方案中最好的一个,但有一个主要致命缺陷。 如果我们有10封电子邮件E1 - E10,除了E2,E3之外,它们全部未读,那么运行该查询后,结果集将显示E1,而不是E1,E4。显然这是不好的。 因此,我尝试在子查询中插入“AND message.flags.isRead = 0”:

SELECT folder.unread, message FROM ymail.msgcontent
    WHERE (fid,mids )
    IN
        (SELECT folder.folderInfo.fid, mid
        FROM ymail.messages
        WHERE numMid=10
        AND startMid=0 
        AND message.flags.isRead=0)
        AND fid='Inbox' 

然而,这将产生“null”作为结果。为了调试此问题,我只运行子查询并得出以下结果:

SELECT folder.folderInfo.fid, mid
FROM ymail.messages
WHERE numMid=10
AND startMid=0 
AND messageInfo.flags.isRead=0

这个查询返回了10条结果,但是经过进一步的检查,它没有将已读和未读的结果进行筛选。在进行更多的尝试后,我将选择语句更改为以下查询:

SELECT folder.folderInfo.fid, messageInfo.mid
FROM ymail.messages
WHERE numMid=10
AND startMid=0 
AND messageInfo.flags.isRead=0

最终,这个程序可以运行!但是返回了47封电子邮件而不是10封。更有趣的是,我知道我的收件箱中有207封(未读)邮件,那为什么是47呢?我已将“numMid”(显示多少封邮件)从0到300和“startMid”(从哪开始,如偏移量一样)从0到300进行了更改,但结果集数量并没有改变。当我将选择语句从“messageInfo.mid”改回“mid”时,“numMid / startMid”再次“工作”,但是来自isRead的过滤不再起作用。我知道还有其他解决方案,比如将numMid设置为50000或类似的值,但是YQL本来就很慢,我只能想象这会显著减慢速度。

问题是,有人做过这个吗? YQL是不是坏了/未维护,还是我做错了什么?

谢谢!

编辑:显然,出现的“47”是我拥有的50封电子邮件中的三封。我还没有想出如何“欺骗”YQL以允许我覆盖这个50限制。

1个回答

0

有点晚了,但我认为我有你的问题的答案。

你的查询几乎正确,除了numInfo查询参数。尝试将查询更改为

SELECT * FROM ymail.messages WHERE numMid=75 AND startMid=0 AND numInfo=75 AND messageInfo.flags.isRead=0

注意numInfo=75。这应该可以让你获取最近的75个未读邮件。要了解有关不同查询参数的更多信息,请参阅官方文档here

编辑1
表ymail.messages默认应返回未读邮件。如果您想获取未读邮件,则应使用GroupBy参数。查找文档here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接