4

私は現在、ユーザーの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 を「だます」方法をまだ理解していません。

4

1 に答える 1

0

少し遅れましたが、あなたの質問に対する答えがあると思います。

あなたのクエリは、numInfoクエリパラメータを除いてほぼ正しいクエリです。クエリを次のように変更してみてください

SELECT * FROM ymail.messages WHERE numMid=75 AND startMid=0 AND numInfo=75 AND messageInfo.flags.isRead=0

に注意してnumInfo=75ください。これにより、最新の 75 件の未読メッセージが取得されます。さまざまなクエリ パラメータの詳細については、こちらの公式ドキュメントを参照してください。

編集 1
テーブル ymail.messages は、デフォルトで未読メッセージを返す必要があります。GroupBy未読メッセージを取得する場合に使用する必要があるパラメーターがあります。ドキュメントはこちら

于 2013-01-03T19:15:51.417 に答える