2013-06-03 3 views
1

SinceID 또는 MaxID 절을 주석 처리하면 다음 쿼리가 작동하지만 ok와 both 모두 포함되면 "잘못된 URL"예외가 생성됩니다 .maxid (ulong.max)와 sinceid 세트로 검색에 실패하지만 별도로 작동합니다.

var maxId = ulong.MaxValue; 
var sinceId = (ulong)341350918903701507; 

var searchResult = 
(
    from search in ctx.Search 
     where search.Type == SearchType.Search && 
     search.ResultType == ResultType.Mixed && 
     search.Query == "red wedding" && 
     search.SinceID == sinceId && 
     search.MaxID == maxId && 
     search.IncludeEntities == false && 
     search.Count == 200 
    select search).SingleOrDefault(); 

답변

1

당신이 피들러에서 쿼리 결과를 보면, 응답이라고 볼 수 있습니다 :

{"errors":[{"code":195,"message":"Missing or invalid url parameter"}]} 
내가 트위터 모두 SinceID으로 쿼리를 받아 들일 이유에 응답 할 수 없습니다

및 MaxID. 그러나 쿼리가 올바르게 형성되고 특정 시나리오에 대해이 두 매개 변수 사이의 관계에 대한 제약 조건을 설명하는 문서가 없습니다. MaxID의 목적은 다음 쿼리에서 반환 할 가장 높은 트윗의 ID입니다. MaxID와 SinceID는 모두 데이터를 페이지 단위로 표시하는 데 도움을주기위한 것입니다. 그래서 먼저 내가 처음 검색, 당신이로

Working with Timelines with LINQ to Twitter

1

내가 같은 문제를 갖고있는 것 같다, 그래서 내가 가지고있는 유일한 해결책은 수동으로 수행했다 :이 작업을 수행하는 방법에 대한 블로그 포스트를 작성

var searchResult = 
      (
       from search in TwitterCtx.Search 
       where search.Type == SearchType.Search && 
         search.Query == query && 
         search.Count == pageSize && 
         search.IncludeEntities == true && 
         search.ResultType == ResultType.Recent && 
         search.SinceID == sinceId 
       select search 
      ).SingleOrDefault<Search>(); 

resultList = searchResult.Statuses; 

가 그럼 난 (새 트윗이 더 pageSize가입니다 계산 때 사건을) 그래서 이런 while 루프를 가지고 다른 트윗을 검색 할 수 있습니다 :이처럼 가지고 하나에 sinceId 값을 설정 목록

ulong minId = ulong.Parse(resultList.Last<Status>().StatusID) - 1; 
List<Status> newList = new List<Status>(); 

while (minId > sinceId) 
{ 
    resultList.AddRange(newList); 

    searchResult = 
     (
      from search in TwitterCtx.Search 
      where search.Type == SearchType.Search && 
       search.Query == query && 
       search.Count == pageSize && 
       search.IncludeEntities == true && 
       search.ResultType == ResultType.Recent && 
       search.MaxID == minId && 
       search.SinceID == sinceId 
      select search 
     ).SingleOrDefault<Search>(); 

    newList = searchResult.Statuses; 
    if (newList.Count == 0) 
     break; 

    minId = ulong.Parse(newList.Last<Status>().StatusID) - 1; 
} 

여기에서 이유는 무엇입니까? 왜냐하면 여기에서 theId와 maxId를 모두 사용할 수 있습니다.

0

다른 사람이이 문제를 발견 한 경우 MaxId가 잘못된 Tweet ID 일 때이 문제가 발생했습니다.

0부터 시작했지만 ulong.MaxValue는 동일한 문제가 있습니다. 유효한 값으로 스위치를 끄면 올바르게 작동합니다. SinceId도 사용하지 않으면 잘 작동하는 것 같습니다.

0

동일한 오류 "누락되었거나 잘못된 url 매개 변수"를 사용했지만 Joe Mayo's solution에 따라 if (sinceID < maxID) 조건을 추가했습니다. while 루프는 maxID가 작을 때마다 위의 쿼리에서 오류를 발생시키기 때문에 sinceID, 나는 틀린 생각한다.

if (sinceID < maxID) 
{ 
    do 
    { 
     // now add sinceID and maxID 
     searchResponse = 
      await 
      (from search in twitterCtx.Search 
      where search.Type == SearchType.Search && 
        search.Query == "from:@" + twitterAccountToDisplay + " -retweets" && 
        search.Count == count && 
        search.SinceID == sinceID && 
        search.MaxID == maxID 
        select search) 
       .SingleOrDefaultAsync(); 

       if (searchResponse == null) 
       break; 

       if (searchResponse.Count > 0 && searchResponse.Statuses.Count > 0) 
       { 
       newStatuses = searchResponse.Statuses; 
       // first tweet processed on current query 
       maxID = newStatuses.Min(status => status.StatusID) - 1; 
       statusList.AddRange(newStatuses); 

       lastStatusCount = newStatuses.Count; 
       } 
       if (searchResponse.Count > 0 && searchResponse.Statuses.Count == 0) 
       { 
        lastStatusCount = 0; 
       } 
     } 
     while (lastStatusCount != 0 && statusList.Count < maxStatuses);  
     //(searchResponse.Count != 0 && statusList.Count < 30); 
}