私は現在、ユーザーのYahoo電子メールメッセージから次の情報にアクセスする必要があるJAVAアプリケーションを作成しています(表示するため)。YQL はこれを行うための「簡単な方法」のように見えましたが、より困難であることが証明されています。私が実行したすべてのテストはここで行われました: http://developer.yahoo.com/yql/console/ webapp/oauth を使用して同じ結果を再現できます。
- に
- FromEメール
- 名前から
- 主題
- メッセージ
- 日にち
- ミッド
これをすべて 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;
これは、私が持っているすべてのソリューションの中で最もうまく機能しますが、重大な致命的な欠陥が 1 つあります。E1 から E10 までの 10 通のメールがあり、E2、E3 を除いてすべて未読の場合、そのクエリを実行すると、結果セットには E1、E4 ではなく E1 が表示されます。明らかにこれは良くありません。そこで、サブセレクトに「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 ステートメントを次のクエリに変更します。
SELECT folder.folderInfo.fid, messageInfo.mid
FROM ymail.messages
WHERE numMid=10
AND startMid=0
AND messageInfo.flags.isRead=0
最後に、これはうまくいきます!例外として、10 通ではなく 47 通のメールが返されます。さらに興味深いことに、受信トレイには 207 通の (未読の) メールがあることがわかっています。なぜ 47 通なのか?? 「numMid」(これを表示する数と考えてください) を 0 から 300 に変更し、startMid (オフセットのように開始するメールの数) を 0 から 300 に変更しましたが、どちらも結果セットの数を変更しません。もちろん、selectステートメントを「messageInfo.mid」から「mid」に戻すと、numMid/startMidが再び機能しますが、isReadからのフィルタリングは機能しなくなります。numMid=50000 またはそれらの線に沿って何かを設定する他のソリューションがあることは知っていますが、YQL は最初は少し遅く、これが大幅に遅くなると想像することしかできません。
それで問題は、これをやった人はいますか?YQL が壊れた/維持されていないだけですか、それとも何か間違ったことをしていますか?
ありがとうございました!
編集: どうやらこの「47」は、私が持っている上位 50 通のメールからのもので、そのうち 3 通が読まれているようです。この 50 の制限をオーバーライドできるように YQL を「だます」方法をまだ理解していません。