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