我目前正在编写一个JAVA应用程序,在该应用程序中我需要从用户雅虎电子邮件(显示回给他们)访问以下信息。 YQL看起来像这样做的“快捷方式”,但它证明更加困难。我运行的所有测试都在这里完成:http://developer.yahoo.com/yql/console/我可以使用我的webapp/oauth复制相同的结果。使用YQL从雅虎邮件访问新邮件
- 为
- 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'
然而,这会产生“空”的结果。为了调试这个我就跑子选择,并提出了这一点:
SELECT folder.folderInfo.fid, mid
FROM ymail.messages
WHERE numMid=10
AND startMid=0
AND messageInfo.flags.isRead=0
该查询返回10,后不幸进一步审查,它不会过滤掉读未读VS。经过一些更多的挑逗,我把选择语句更改为以下查询:
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(开始有多少电子邮件,如偏移量),并且都不会更改结果集计数。当然,当我将select语句从'messageInfo.mid'更改为'mid'时,numMid/startMid'work'又一次,但是他的isRead过滤功能不再有效。我知道还有其他的解决方案,我设置了numMid = 50000或者沿着这些线,但YQL开始有点慢,我只能想象这会显着减慢速度。
所以问题是,有没有人这样做? YQL刚刚坏了/没有维护,还是我做错了什么?
谢谢!
编辑:显然这个'47'显示是从我有的前50个电子邮件,其中3个被读取。我还没有弄清楚如何“欺骗”YQL以允许我覆盖这个限制。