1

I'm trying to find all the possible entries on twitter for a particular keyword, but using the code below only the fist 100 are returned. The search returns null on the second iteration. Can anyone tell me what I'm doing wrong?

    public async void SearchForTweets()
    {
        const int maxNumberToFind = 100;
        const string whatToFind = "iphone";

        ulong lastId = 0;
        var total = 0;
        int count;
        do
        {
            var id = lastId;

            // Get the first 100 records, or the first 100 whose ID is less than the previous set
            var searchResponse =
                await
                    (from search in _twitterCtx.Search
                     where search.Type == SearchType.Search &&
                           search.Query == whatToFind &&
                           search.Count == maxNumberToFind &&
                           (id == 0 || search.MaxID < id)
                     select search)
                        .SingleOrDefaultAsync();

            // Only if we find something
            if (searchResponse != null && searchResponse.Statuses != null)
            {
                // Out put each tweet found
                searchResponse.Statuses.ForEach(tweet =>
                    Console.WriteLine(
                        "{4} ID: {3} Created: {2} User: {0}, Tweet: {1}",
                        tweet.User.ScreenNameResponse,
                        tweet.Text,
                        tweet.CreatedAt,
                        tweet.StatusID,
                        DateTime.Now.ToLongTimeString()));

                // Take a note of how many we found, and keep a running total
                count = searchResponse.Statuses.Count;
                total += count;

                // What is the ID of the oldest found (Used to limit the next search)
                lastId = searchResponse.Statuses.Min(x => x.StatusID);
            }
            else
            {
                count = 0;
            }
        } while (count == maxNumberToFind); // Until we find less than 100
        Console.Out.WriteLine("total = {0}", total);
    }
  • Possible duplicate of [How To Get All Tweets on Hashtag using LinqToTwitter](http://stackoverflow.com/questions/34943598/how-to-get-all-tweets-on-hashtag-using-linqtotwitter) – Michael Freidgeim Oct 24 '16 at 07:55

2 Answers2

1

Solved it,

search.MaxID < id

needs to be

search.MaxID == id
1

Here is a full function

public static List<Status> search(string searchTerms, int maxPagination)
{
    var twitterCtx = new TwitterContext(authorizer);
    List<Status> searchResults = new List<Status>();
    int maxNumberToFind = 100;
    int pagination = 0;
    ulong lastId = 0;
    int count = 0;

    do
    {
        var id = lastId;
        var tweets = Enumerable.FirstOrDefault(
                        from tweet in twitterCtx.Search
                        where tweet.Type == SearchType.Search &&
                            tweet.Query == searchTerms &&
                            tweet.Count == maxNumberToFind && (tweet.MaxID == id)
                        select tweet);

        searchResults.AddRange(tweets.Statuses.ToList());
        lastId = tweets.Statuses.Min(x => x.StatusID); // What is the ID of the oldest found (Used to get the next pagination(results)
        pagination++;

        count = (pagination > maxPagination) ? 0 : tweets.Count; // Limit amount of search results
    } while (count == maxNumberToFind);

    return searchResults;
}
Photonic
  • 1,316
  • 19
  • 31