gpt4 book ai didi

c# - 如何使用 LinqToTwitter 获取标签上的所有推文

转载 作者:太空狗 更新时间:2023-10-29 22:30:24 26 4
gpt4 key购买 nike

我正在尝试让所有推文(计算推文总数)都属于主题标签。我的功能在这里,如何使用 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 { }
}
}

}

最佳答案

这是一个例子。请记住,MaxID 是针对当前 session 的,可防止重新读取您已在当前 session 中处理过的推文。 SinceID 是您针对此搜索词收到的最早的推文,可帮助您避免重新阅读您在之前的 session 中已针对此搜索词处理过的推文。本质上,您正在创建一个窗口,其中 MaxID 是下一条要获取的最新推文,而 SinceID 是您不想阅读过去的最旧推文。在给定搜索词的第一个 session 中,您可以将 SinceID 设置为 1,因为您还没有最旧的推文。 session 结束后,保存 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));
}

这种方法看起来代码很多,但实际上可以让您更好地控制搜索。例如您可以检查推文并根据推文的内容(如 CreatedAt)确定查询次数。您可以将查询包装在 try/catch block 中,以便在您超过速率限制或 Twitter 出现问题时监视 HTTP 429,从而让您记住自己的位置并继续。您还可以监视 twitterContext RateLimit 属性以查看您是否接近并提前避免 HTTP 429 异常。任何其他盲目阅读 N 条推文的技术都可能迫使您浪费速率限制并降低您的应用程序的可扩展性。

  • 提示:请记住为给定的搜索词保存 SinceID,如果您保存推文,以避免下次重新阅读相同的推文您使用该搜索词进行搜索。

有关此机制的更多信息,请阅读 Working with Timelines在 Twitter 文档中。

关于c# - 如何使用 LinqToTwitter 获取标签上的所有推文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34943598/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com