2017-01-11 14 views
4

LINQ to Twitter 4.1.0と特定のハッシュタグを使用してツイートを取得しています。しかし、私が直面している問題は、私はたった600のつぶやきしか得ていないということです。 数ヶ月よりも古いツイートを取得したいと思います。 誰も私にこの方法を提案できますか?数ヶ月よりも古いツイートを取得するには?

[List<Search> searchResultsList = new List<Search>(); 
     ulong lastId = 0; 
     var context = new TwitterContext(auth); 
     int count = 0; 
     int maxNumberToFind = 1000; 
     var dateFrom = DateTime.Now.AddDays(-20); 

     var searchResults = 
         (from search in context.Search 
          where search.Type == SearchType.Search && 
           search.Query == Query && 
           search.SinceID == 2016-12-11 &&         
           search.Count == 150 && 
           search.ResultType == ResultType.Recent && 
           search.IncludeEntities == true 
          select search).ToList();][1] 
+0

私は考えていませんが、search.SinceIDを変更しようとしましたか? – hellogoodnight

+0

つぶやきを取得する期間を指定しようとしていますか? –

+0

あなたのコードでdateFrom変数の使用法は何ですか? – hellogoodnight

答えて

2
私はあなたが "まで" の日付を指定することができるように見えます documentation見て示唆し

、およびMAXID:

まで:ツイートこの日、YYYY-MM-DDまで。 (文字列)

MaxID:このIDの前につぶやきを返します。 (ulong)

LINQの "LastOrDefault()"を使用して「Until」日付をクエリし、最後のツイートを取得します。その後、そのオブジェクトのIDを次のクエリのMaxIDとして使用して別のクエリを実行します。これはあなたが求めているように、特定の日付の前にすべてのつぶやきを取得する必要があります。ツイートの

カウント数がページごとに取得する:

それは、このパラメータを注意することも重要です。最大値は100です。(int)

これは、受信しているつぶやきの数が限られている可能性があります。

編集:This post by Joe Mayo(LinqToTwitterの作成者)も役立つかもしれません。 (:私はこれをテストしていませんが、あなたはアイデアを得る免責事項):ここではいくつかのコードがある

List<Search> searchResultsList = new List<Search>(); 
    var context = new TwitterContext(auth); 
    var maxCount = 100; 
    var untilDate = new DateTime(2016,12,11); 

    var lastTweetInRange = 
        (from search in context.Search 
         where search.Type == SearchType.Search && 
          search.Query == Query &&        
          search.Count == maxCount && 
          search.Until == untilDate && 
          search.IncludeEntities == true 
         select search).LastOrDefault(); 

    var tweetsInRange = (from search in context.Search 
         where search.Type == SearchType.Search && 
           search.Query == Query &&        
           search.Count == maxCount && 
           search.MaxId == lastTweetInRange.id && 
           search.IncludeEntities == true 
         select search).ToList(); 
+0

ありがとう::) – Ranjana

+0

@Ranjana、私はいくつかのコードで更新しました。私はそれをテストしていないが、それは私が何を記述しているかを視覚化するのに役立ちます:) –

+0

あなたの応答をありがとう。私はUntilでエラーが出ます。 https://i.stack.imgur.com/NZ6mU.png – Ranjana

1

あなたはまた、ページング検索を検討する必要があります。ここではデモです:

static async Task DoPagedSearchAsync(TwitterContext twitterCtx) 
    { 
     const int MaxSearchEntriesToReturn = 100; 

     string searchTerm = "twitter"; 

     // oldest id you already have for this search term 
     ulong sinceID = 1; 

     // used after the first query to track current session 
     ulong maxID; 

     var combinedSearchResults = new List<Status>(); 

     List<Status> searchResponse = 
      await 
      (from search in twitterCtx.Search 
      where search.Type == SearchType.Search && 
        search.Query == searchTerm && 
        search.Count == MaxSearchEntriesToReturn && 
        search.SinceID == sinceID 
      select search.Statuses) 
      .SingleOrDefaultAsync(); 

     combinedSearchResults.AddRange(searchResponse); 
     ulong previousMaxID = ulong.MaxValue; 
     do 
     { 
      // one less than the newest id you've just queried 
      maxID = searchResponse.Min(status => status.StatusID) - 1; 

      Debug.Assert(maxID < previousMaxID); 
      previousMaxID = maxID; 

      searchResponse = 
       await 
       (from search in twitterCtx.Search 
       where search.Type == SearchType.Search && 
         search.Query == searchTerm && 
         search.Count == MaxSearchEntriesToReturn && 
         search.MaxID == maxID && 
         search.SinceID == sinceID 
       select search.Statuses) 
       .SingleOrDefaultAsync(); 

      combinedSearchResults.AddRange(searchResponse); 
     } while (searchResponse.Any()); 

     combinedSearchResults.ForEach(tweet => 
      Console.WriteLine(
       "\n User: {0} ({1})\n Tweet: {2}", 
       tweet.User.ScreenNameResponse, 
       tweet.User.UserIDResponse, 
       tweet.Text)); 
    } 

私はこの作品、一般的にどのように説明するために、しばらく前にブログ記事を書いた:

Working with Timelines with LINQ to Twitter

それは少し古いですし、非同期構文が含まれていませんが、ありませんSinceID,MaxIDとその技術を説明してください。 TwitterのAPIが戻ってあなたが検索して行くことができるどこまで制限を行い、言ったことで

Working with Timelines (Twitter)

:Twitterはまた、自分のページング戦略の方法と理由を説明し、良いドキュメントを持っています。 The Search API, Best Practicesセクションでは、彼らは6〜9日だけ戻ってくると説明しています。

+0

ほんとにすごいです..しかし、私は10日間のつぶやきしか得ていません..それ以上ではありません。このAPIは歴史的なデータを得るための柔軟性を与えません。 – Ranjana

+1

Twitter APIからの制限ですこれまたは他のライブラリではありません。 –

関連する問題