Bat*_*zun 5 c# linq twitter linq-to-twitter
我试图让所有推文(计数总推文数)属于主题标签.我的功能在这里,如何使用maxID和sinceID获取所有推文.什么是"计数"而不是"计数"?我不知道.
if (maxid != null)
{
var searchResponse =
await
(from search in ctx.Search
where search.Type == SearchType.Search &&
search.Query == "#karne" &&
search.Count == Convert.ToInt32(count)
select search)
.SingleOrDefaultAsync();
maxid = Convert.ToString(searchResponse.SearchMetaData.MaxID);
foreach (var tweet in searchResponse.Statuses)
{
try
{
ResultSearch.Add(new KeyValuePair<String, String>(tweet.ID.ToString(), tweet.Text));
tweetcount++;
}
catch {}
}
while (maxid != null && tweetcount < Convert.ToInt32(count))
{
maxid = Convert.ToString(searchResponse.SearchMetaData.MaxID);
searchResponse =
await
(from search in ctx.Search
where search.Type == SearchType.Search &&
search.Query == "#karne" &&
search.Count == Convert.ToInt32(count) &&
search.MaxID == Convert.ToUInt64(maxid)
select search)
.SingleOrDefaultAsync();
foreach (var tweet in searchResponse.Statuses)
{
try
{
ResultSearch.Add(new KeyValuePair<String, String>(tweet.ID.ToString(), tweet.Text));
tweetcount++;
}
catch { }
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个例子.请记住,这MaxID
是针对当前会话并阻止重新读取您在当前会话中已处理的推文.SinceID
是您在此搜索字词中收到的最早的推文,可帮助您避免重新阅读之前会话期间已针对此搜索字词处理过的推文.从本质上讲,你正在创建一个窗口,其中MaxID
是下一个最新的推SinceID
文,是你不想读过的最早的推文.在给定搜索词的第一个会话中,您将设置SinceID
为1
因为您还没有最早的推文.会话结束后,保存,SinceID
以免您不小心重读推文.
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));
}
Run Code Online (Sandbox Code Playgroud)
这种方法看起来像很多代码,但实际上可以让您更好地控制搜索.例如,您可以根据推文的内容(如CreatedAt
)查看推文并确定查询的次数.try/catch
当您超出速率限制或Twitter出现问题时,您可以将查询包装在一个块中以监视HTTP 429,从而让您记住您的位置并恢复.您还可以监视twitterContext
RateLimit
属性以查看是否正在接近并提前避免HTTP 429的异常.盲目阅读N条推文的任何其他技术都可能会迫使您浪费速率限制并降低应用程序的可扩展性.
SinceID
如果您要保存推文,请务必为给定的搜索字词保存,以便在下次使用该搜索字词进行搜索时不再重读相同的推文.有关此机制的更多信息,请阅读Twitter文档中的使用时间轴.
归档时间: |
|
查看次数: |
2593 次 |
最近记录: |