我目前正在編寫一個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以允許我覆蓋這個限制。