2013-09-05 2 views
4

전 타임 라인에 올린 모든 트윗을 반환하고 싶습니다.내 타임 라인의 모든 트윗을 반환하십시오.

I는 그래서 Linq To Twitter 라이브러리를 사용하고 있습니다 -이 돌아 오게하는 방법이 같이 잘 작동 및 제 200 그러나 처음 200 내가 검색 할 수있는 최대 것 같다을 찾아온다

var statusTweets = 
       from tweet in twitterCtx.Status 
       where tweet.Type == StatusType.User 
         && tweet.UserID == MyUserID 
         && tweet.Count == 200 
       select tweet; 

       statusTweets.ToList().ForEach(
        tweet => Console.WriteLine(
        "Name: {0}, Tweet: {1}\n", 
        tweet.User.Name, tweet.Text)); 

1000이라고 해? 이 라이브러리의 다른 부분에 다음 페이지 등으로 이동하는 것과 같이 next cursor movement 옵션이없는 것 같습니다.

+0

linq 문에서이 '&& tweet.Count == 200'을 제외하면 어떻게됩니까? – EkoostikMartin

+0

예치 나는 그것도 생각했다! 기본값은이 행이없는 20입니다. 내가 300 명으로 늘리면 여전히 200을 되 찾는다. – Ebikeneser

답변

4

짹짹을 통해 페이징하기 위해 Count, MaxID 및 SinceID의 조합을 사용합니다. 이상하게 들리 겠지만, 트윗 스트림이 지속적으로 업데이트되고 있다는 점을 감안할 때이 접근법에 대한 아주 좋은 이유가 있습니다. 트위터 설명서를 가리키며 트위터에 LINQ가이를 수행하는 방법을 설명하는 블로그 게시물 Working with Timelines with LINQ to Twitter을 작성했습니다.

// last tweet processed on previous query set 
ulong sinceID = 210024053698867204; 

ulong maxID; 
const int Count = 10; 
var statusList = new List<status>(); 

var userStatusResponse = 
    (from tweet in twitterCtx.Status 
    where tweet.Type == StatusType.User && 
     tweet.ScreenName == "JoeMayo" && 
     tweet.SinceID == sinceID && 
     tweet.Count == Count 
    select tweet) 
    .ToList(); 

statusList.AddRange(userStatusResponse); 

// first tweet processed on current query 
maxID = userStatusResponse.Min(
    status => ulong.Parse(status.StatusID)) - 1; 

do 
{ 
    // now add sinceID and maxID 
    userStatusResponse = 
     (from tweet in twitterCtx.Status 
     where tweet.Type == StatusType.User && 
       tweet.ScreenName == "JoeMayo" && 
       tweet.Count == Count && 
       tweet.SinceID == sinceID && 
       tweet.MaxID == maxID 
     select tweet) 
     .ToList(); 

    if (userStatusResponse.Count > 0) 
    { 
     // first tweet processed on current query 
     maxID = userStatusResponse.Min(
      status => ulong.Parse(status.StatusID)) - 1; 

     statusList.AddRange(userStatusResponse); 
    } 
} 
while (userStatusResponse.Count != 0 && statusList.Count < 30); 
+0

좋아, 나는 오늘 밤 이것을 구현할 시간이 없다.하지만 내일이면 해답을 얻을 것이다. 내 첫 번째 질문은 당신의 해결책으로 두드러진다. sinceID? IE 구걸에서 시작하고 싶습니까? – Ebikeneser

+0

짹짹이 0이 아니므로 1 이상으로 시작할 수 있습니다. 트위터 API가 당신에게 짹짹이를 줄지는 않을 것입니다. 왜냐하면 IIRC는 일정 시간 뒤로 돌아 가기 때문입니다. –

+0

이것은 효과가있었습니다. 그러나 이것은 비교적 느린 프로세스처럼 보입니다. 그러나 최대 3200 개의 트윗을 가져 오는 데는 꽤 시간이 걸렸습니다. 더 효율적인 방법/라이브러리가 있습니까? – Ebikeneser