使用YQL从Yahoo Mail访问新邮件

时间:2012-10-24 17:16:13

标签: yahoo yql yahoo-mail

我目前正在编写一个JAVA应用程序,我需要从用户Yahoo电子邮件中访问以下信息(显示回来)。 YQL看起来像一个“快速简单的方法”,但事实证明它更难。我运行的所有测试都是在这里完成的:http://developer.yahoo.com/yql/console/我可以使用我的webapp / oauth复制相同的结果。

  • FromEmail
  • FROMNAME
  • 主题
  • 消息
  • 日期
  • MID

我无法将此全部用于1个查询调用(甚至2个,尽管我没有投入太多时间研究它作为解决方案)。这是它的缺点,目前我有以下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,遗憾的是在进一步审核后,它不会过滤掉读取VS未读。在进行了一些操作之后,我将select语句更改为以下查询:

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

最后,这有效!除了回复47封电子邮件而不仅仅是10封。为了让事情变得更有趣,我知道我的收件箱中有207封(未读)电子邮件,为什么47?我已经将0-300的'numMid'(想想显示的数量)改为0-300和startMid(要启动的电子邮件数量,如偏移量)从0到300,并且都没有更改结果集计数。当然,当我将select语句从'messageInfo.mid'更改回'mid'时,numMid / startMid'再次'工作',但是从isRead过滤不再有效。我知道还有其他解决方案,我设置numMid = 50000或类似的东西,但是YQL开始时有点慢,我只能想象这会显着减慢它。

所以问题是,有没有人这样做过? YQL刚刚破坏/没有维护或者我做错了吗?

谢谢!

编辑:显然,显示的“47”来自我的前50封电子邮件,其中3封是已阅读的。我还没弄明白如何“欺骗”YQL以允许我覆盖这50个限制。

1 个答案:

答案 0 :(得分:0)

有点迟,但我想我已经回答了你的问题。

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

  

SELECT *   来自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