2012-10-24 2 views
4

현재 사용자의 Yahoo 이메일 메시지에서 다음 정보에 액세스해야하는 Java 응용 프로그램을 작성 중입니다. YQL은 이것을 수행하는 '빠른 쉬운 방법'처럼 보였지만, 더 어렵다고 판명되었습니다. 실행 한 모든 테스트는 여기에서 수행되었습니다. http://developer.yahoo.com/yql/console/ webapp/oauth를 사용하여 동일한 결과를 복제 할 수 있습니다.YQL을 사용하여 Yahoo Mail에서 새 메시지에 액세스

  • 으로
  • FromEmail
  • FROMNAME
  • 주제
  • 메시지
  • 날짜
  • MID
  • 나는 문제 (모든 1 쿼리 호출이를 얻는 데

또는 심지어 2, 내가하지 않은 해결책으로 많은 시간을 투자하여 투자했다). 이것은 내가 가진 모든 솔루션을 밖으로 잘 작동

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; 

그러나 한 가지 큰 타격 결함이 : 여기의 짧은이며, 현재 나는 다음과 같은 YQL 있습니다. 우리가 10 개의 전자 메일을 가지고 있다면 E1 - E10과 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)'결과. 난 그냥 선택 하위를 실행하고이 마련이를 디버깅하기 위해 :이 쿼리는 10을 반환

SELECT folder.folderInfo.fid, mid 
FROM ymail.messages 
WHERE numMid=10 
AND startMid=0 
AND messageInfo.flags.isRead=0 

, 불행하게도 자세히 검토 한 읽지 VS 읽기를 필터링하지 않습니다. 일부는 더 주위 놀겠 후 나는 다음과 같은 쿼리에 select 문을 변경 :

SELECT folder.folderInfo.fid, messageInfo.mid 
FROM ymail.messages 
WHERE numMid=10 
AND startMid=0 
AND messageInfo.flags.isRead=0 

마지막으로,이 작품! 단지 10 대신 47 개의 이메일이 반환됩니다. 더 재미있는 것들을 만들기 위해받은 편지함에 207 개의 (읽지 않은) 이메일이 있다는 사실을 압니다. 나는 numMid를 0에서 300 사이의 startMid (0부터 300까지 몇 개의 전자 메일을 시작하고 오프셋과 같이)에서 변경하고 결과 세트 수를 변경하지 않습니다. 물론 select 문을 'messageInfo.mid'에서 'midMid'/ startMid 'work'로 다시 변경하면 필터링이 더 이상 작동하지 않습니다. 나는 numMid = 50000이나 그 라인을 따라 뭔가를 설정하는 다른 해결책이 있다는 것을 알고있다. 그러나 YQL은 처음에는 약간 느리며, 이것이 느리게 느려지는 것을 상상할 수있다.

문제는 무엇입니까? YQL이 방황했거나 유지 관리가되지 않았거나 잘못된 것이 있습니까?

감사합니다.

EDIT : 분명히 나타나는 '47'은 내가 가지고있는 상위 50 개의 이메일 중 3 개가 읽혀 있습니다. 나는이 50 한계를 무시할 수 있도록 YQL을 '트릭'하는 법을 아직 모르고있다.

답변

0

조금 늦었지만 귀하의 질문에 대한 답변이 있다고 생각합니다.

쿼리 매개 변수는 numInfo 쿼리 매개 변수를 제외하고 거의 정확합니다.ymail.messages numMid = 75 및 startMid = 0 AND numInfo = 75 및 messageInfo.flags.isRead = 0

을 주목 numInfo=75로부터

SELECT * 에 쿼리를 변경해보십시오 . 마지막 75 개의 읽지 않은 메시지를 가져와야합니다. 다른 쿼리 매개 변수에 대한 자세한 공식 문서 here

편집을 참조 읽으려면 1
테이블 ymail.messages은 기본적으로 읽지 않은 메시지를 반환해야합니다. 읽지 않은 메시지를 받고 싶다면 사용해야하는 매개 변수는 GroupBy입니다. 설명서 찾기 here

관련 문제