0

It clearly state that it allows to get up to 3200 tweets per person (see documentation). But using this code:

var statusTweets =
      from tweet in twitterCtx.Status
      where tweet.Type == StatusType.User
      && tweet.ScreenName == "JoeMayo"
      select tweet;

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

it gives me the first 20 tweets only, also you can't apply cursor movement using this code. Does anyone have a LINQ To Twitter code that allows me to fetch as many tweets as possible?

David Ferenczy Rogožan
  • 23,966
  • 9
  • 79
  • 68
Photonic
  • 1,316
  • 19
  • 31
  • As per the documentation you linked: "Gets the 20 most recent statuses for the authorized user". `from tweet in twitterCtx.Status` You are selecting statuses, not tweets. – Rob Aug 21 '15 at 05:33

3 Answers3

4

To fetch tweets from Twitter we can get by 2 ways:

using Hastag and ScreenName

I created one custom method where you can get 3200 tweets in one request.

public void GetTwitterFeeds(dynamic settings, bool ishashtag, DateTime startDate, DateTime endDate)
        {
            string screenname = settings.socialFetchTerm.ToString();
            var auth = new SingleUserAuthorizer
            {
                Credentials = new InMemoryCredentials
                {
                    ConsumerKey = AppSettings.ConsumerKey,
                    ConsumerSecret = AppSettings.ConsumerSecret,
                    OAuthToken = AppSettings.AccessToken,
                    AccessToken = AppSettings.AccessTokenSecret
                }
            };
            var twitterCtx = new TwitterContext(auth);

            var ownTweets = new List<Status>();
            ulong sinceId = 0;
            ulong maxID = 0;
            int lastStatusCount = 0;
            bool flag = true;
            var statusResponse = new List<Status>();
            if (!ishashtag)
            {

                statusResponse = (from tweet in twitterCtx.Status
                                  where tweet.Type == StatusType.User
                                        && tweet.ScreenName == screenname
                                        && tweet.Count == 200
                                        && (tweet.CreatedAt >= startDate && tweet.CreatedAt <= endDate)
                                  select tweet).ToList();
            }
            else
            {
                statusResponse = (from search in twitterCtx.Search
                                  where search.Type == SearchType.Search &&
                                        search.Query == screenname
                                        && search.Count == 200
                                  from Status status in search.Statuses
                                  where (status.CreatedAt >= startDate && status.CreatedAt <= endDate)
                                  select status
                    ).ToList();
            }
            if (statusResponse.Count > 0)
            {
                maxID = ulong.Parse(statusResponse.First().StatusID);
                ownTweets.AddRange(statusResponse);
            }
            do
            {
                int rateLimitStatus = twitterCtx.RateLimitRemaining;

                if (rateLimitStatus != 0)
                {
                    if (ishashtag)
                    {

                            statusResponse = (from search in twitterCtx.Search
                                              where search.Type == SearchType.Search &&
                                                    search.Query == screenname
                                                    && search.Count ==200
                                              from Status status in search.Statuses
                                              where
                                                  (status.CreatedAt >= startDate && status.CreatedAt <= endDate) &&
                                                  status.SinceID == sinceId && status.MaxID == maxID
                                              select status
                                ).ToList();



                            lastStatusCount = statusResponse.Count;

                            if (lastStatusCount != 0)
                            {
                                maxID = ulong.Parse(statusResponse.Last().StatusID) - 1;

                                ownTweets.AddRange(statusResponse);
                            }
                            else
                            {
                                flag = false;
                            }
                    }

                    else
                    {

                            statusResponse = (from tweet in twitterCtx.Status
                                              where tweet.Type == StatusType.User
                                                    && tweet.ScreenName == screenname
                                                    && tweet.SinceID == sinceId && tweet.MaxID == maxID
                                                    && tweet.Count == 200 
                                                    && (tweet.CreatedAt >= startDate && tweet.CreatedAt <= endDate)
                                              select tweet).ToList();


                            lastStatusCount = statusResponse.Count;

                            if (lastStatusCount != 0)
                            {
                                maxID = ulong.Parse(statusResponse.Last().StatusID) - 1;

                                ownTweets.AddRange(statusResponse);
                            }
                            else
                            {
                                flag = false;
                            }
                        }
                }
                else
                {
                    flag = false;
                }

            } while (flag);

            foreach (var tweetStatus in ownTweets)
            {
                if (tweetStatus != null)
                {
                    var socialSiteData = new SocialSitesData
                    {
                        //  SocialType = SocialType.Twitter,

                        SocialType = settings.socialType,
                        SocialSubType = settings.socialSubType,
                        SocialFetchTerm = settings.socialFetchTerm,
                        PostId = tweetStatus.StatusID,
                        Post = tweetStatus.Text,
                        PostUrl = "https://twitter.com/" + tweetStatus.ScreenName + "/status/" + tweetStatus.StatusID,
                        ImageSource =
                            tweetStatus.Entities.MediaEntities.Count > 0
                                ? tweetStatus.Entities.MediaEntities[0].MediaUrl
                                : "",
                        VideoSource =
                            tweetStatus.Entities.UrlEntities.Count > 0
                                ? tweetStatus.Entities.UrlEntities[0].ExpandedUrl
                                : "",
                        PostTime = tweetStatus.CreatedAt,
                    };
                    if (!_socialHubCrudDal.IsSocialSiteDataExists(tweetStatus.StatusID))
                        _socialHubCrudDal.AddSocialSiteData(socialSiteData);
                }
            }
        }
Light
  • 1,077
  • 10
  • 33
  • Hey thanks, i think your code was abit too much and also status.SinceID == sinceId && status.MaxID == maxID didnt work.... I from looking at your code i rewrote it. – Photonic Aug 21 '15 at 09:48
0

The documentation says "Gets the 20 most recent statuses for the authorized user".

You might have to use/send additional "Parameters/Filters" - count as mentioned in the document, which states "Number of tweets to return; max is 200." and which is an optional field, and hence only top 20 is returned in your case.

Yasser Shaikh
  • 46,934
  • 46
  • 204
  • 281
0

Recoded from @Rakesh Sadhula

    public void GetTwitterFeeds(string screenName, DateTime startDate, DateTime endDate)
    {

        var twitterCtx = new TwitterContext(authorizer);

        var ownTweets = new List<Status>();
        ulong maxID = 0;
        int lastStatusCount = 0;
        bool flag = true;
        var statusResponse = new List<Status>();

        statusResponse = (from tweet in twitterCtx.Status
                            where tweet.Type == StatusType.User
                                && tweet.ScreenName == screenName
                                && tweet.Count == 200
                                && (tweet.CreatedAt >= startDate && tweet.CreatedAt <= endDate)
                            select tweet).ToList();

        if (statusResponse.Count > 0)
        {
            maxID = ulong.Parse(statusResponse.Last().StatusID.ToString());
            ownTweets.AddRange(statusResponse);
        }
        if (ownTweets.Count == 200)
        {
            do
            {
                int rateLimitStatus = twitterCtx.RateLimitRemaining;

                if (rateLimitStatus != 0)
                {
                    statusResponse = (from tweet in twitterCtx.Status
                                      where tweet.Type == StatusType.User
                                          && tweet.ScreenName == screenName
                                          && tweet.MaxID == maxID
                                          && tweet.Count == 200
                                          && (tweet.CreatedAt >= startDate && tweet.CreatedAt <= endDate)
                                      select tweet).ToList();

                    lastStatusCount = statusResponse.Count;

                    if (lastStatusCount != 0)
                    {
                        maxID = ulong.Parse(statusResponse.Last().StatusID.ToString()) - 1;
                        ownTweets.AddRange(statusResponse);
                    }
                    else
                    {
                        flag = false;
                    }
                }
                else
                {
                    flag = false;
                }
            } while (flag);
        }
        if (statusResponse.Count > 0)
        {
            foreach (Status tweet in ownTweets)
            {
                listTweets.Items.Add(tweet.Text);
            }
            lb_tUser.Text = "@" + screenName;
            lb_tweeted.Text = statusResponse.Count.ToString();
        }
    }
Photonic
  • 1,316
  • 19
  • 31