2013-09-05 31 views
4

我希望返回我在時間線上發佈的所有推文。從我的時間線返回所有推文

我用Linq To Twitter庫作爲如此 -

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)); 

這工作正常,並帶回了第一個200但是第200似乎是最大的,我可以檢索,因爲有沒有辦法帶回說1000?似乎沒有next cursor movement選項,就像在此庫的其他部分中移動到下一頁等一樣。

+0

當你從你的linq語句中排除'&& tweet.Count == 200'時會發生什麼? – EkoostikMartin

+0

我也想到了!沒有這一行的默認值是20。如果我把它增加到300說,它仍然帶回200 ... – Ebikeneser

回答

4

您將使用Count,MaxID和SinceID的組合來通過推文進行頁面傳送。這聽起來很奇怪,但這種方法有一個很好的理由,因爲推特流不斷更新。我寫了一篇博客文章,Working with Timelines with LINQ to Twitter,指向Twitter文檔並描述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或更大開始。 Twitter API不太可能會給你發推文,因爲IIRC他們只會返回一定的時間。 –

+0

這工作,謝謝,這似乎是一個相對緩慢的過程,然而,檢​​索最多3200鳴叫需要相當長的一段時間,是否有更有效的方法/庫,你會建議? – Ebikeneser

相關問題