C# 如何让推文的时间超过几个月?

C# 如何让推文的时间超过几个月?,c#,twitter,linq-to-twitter,C#,Twitter,Linq To Twitter,我正在使用带有特定标签的LINQ to Twitter 4.1.0检索推文。但我面临的问题是,我只收到600条推特。 我想得到比几个月前更老的推文。 谁能建议我怎么做 [List<Search> searchResultsList = new List<Search>(); ulong lastId = 0; var context = new TwitterContext(auth); int count = 0;

我正在使用带有特定标签的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]
[List searchResultsList=new List();
ulong lastId=0;
var context=新TwitterContext(auth);
整数计数=0;
int maxNumberToFind=1000;
var dateFrom=DateTime.Now.AddDays(-20);
var搜索结果=
(来自上下文中的搜索。搜索
其中search.Type==SearchType.search&&
search.Query==Query&&
search.SinceID==2016-12-11&&
search.Count==150&&
search.ResultType==ResultType.Recent&&
search.IncludeEntities==true
选择搜索).ToList();][1]

我建议您查看“截止日期”和MaxId:

截止日期:截至该日期的推文,YYYY-MM-DD。(字符串)

MaxID:返回此ID之前或之前的推文。(ulong)

我会查询“直到”日期,并使用LINQ的“LastOrDefault()”获取最后一条推文。然后使用该对象的ID作为下一个查询的MaxID执行另一个查询。这会让你在你要求的某个日期之前收到所有推文

注意此参数也很重要:

计算每页要检索的推文数。马克斯是100岁。(国际)

这可能与您收到的推文数量有限有关

编辑:作者乔·梅奥(LinqToTwitter的创建者)也可能对您有所帮助。下面是一些代码(免责声明:我还没有测试过,但你知道了):

List searchResultsList=new List();
var context=新TwitterContext(auth);
var maxCount=100;
var untilDate=新日期时间(2016,12,11);
var lastTweetInRange=
(来自上下文中的搜索。搜索
其中search.Type==SearchType.search&&
search.Query==查询&&
search.Count==maxCount&&
search.Until==untilDate&&
search.IncludeEntities==true
选择search).LastOrDefault();
var tweetsInRange=(来自context.search中的搜索
其中search.Type==SearchType.search&&
search.Query==查询&&
search.Count==maxCount&&
search.MaxId==lastTweetInRange.id&&
search.IncludeEntities==true
选择search.ToList();

< /代码> 您可能还想考虑分页搜索。下面是一个演示:

    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));
    }
静态异步任务DopagedSearchSync(TwitterContext twitterCtx)
{
const int MaxSearchEntriestReturn=100;
字符串searchTerm=“twitter”;
//此搜索词的最早id
ulong sinceID=1;
//在第一次查询后用于跟踪当前会话
ulong maxID;
var combinedSearchResults=新列表();
列表搜索响应=
等待
(来自twitterCtx.search中的搜索
其中search.Type==SearchType.search&&
search.Query==searchTerm&&
search.Count==MaxSearchEntriestReturn&&
search.SinceID==SinceID
选择搜索。状态)
.SingleOrDefaultAsync();
合并的SearchResults.AddRange(searchResponse);
ulong previousMaxID=ulong.MaxValue;
做
{
//比您刚才查询的最新id少一个
maxID=searchResponse.Min(status=>status.StatusID)-1;
Assert(maxID
控制台写入线(
“\n用户:{0}({1})\n推特:{2}”,
tweet.User.ScreenNameResponse,
tweet.User.UserIDResponse,
tweet.Text);
}
不久前,我写了一篇博文,大致解释了这是如何工作的:

它有点旧,不包括异步语法,但解释了
SinceID
MaxID
和技术。Twitter也有很好的文档,解释了他们分页策略的方式和原因:


尽管如此,twitterapi确实限制了搜索的时间。在第节中,他们描述了他们只能追溯到6到9天。

我不知道,但您是否尝试更改搜索。SinceID?您是否尝试指定获取推文的日期范围?变量dateFrom在代码中的用法是什么?@big_water:实际上我对daterange一无所知。但我一直在努力做到这一点,直到。但这对我不起作用(@hellogodnight:dateFrom在我的代码中是额外的。通过更改search.SinceID,它也无法工作。@Ranjana,我已经用一些代码更新了。我还没有测试过
    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));
    }