C# 如何让推文的时间超过几个月?
我正在使用带有特定标签的LINQ to Twitter 4.1.0检索推文。但我面临的问题是,我只收到600条推特。 我想得到比几个月前更老的推文。 谁能建议我怎么做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;
[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));
}