尝试通过c#使用Tweetinvi库获取过滤流。
我正在尝试做类似于搜索的操作,我已经能够成功接收推文:
public List<ITweet> SearchTweets(string query)
{
List<ITweet> tweets = new List<ITweet>();
TwitterCredentials.ExecuteOperationWithCredentials(Credentials, () =>
{
var searchParam = Search.GenerateSearchTweetParameter(query);
searchParam.Lang = Language.English;
searchParam.MaximumNumberOfResults = 100;
tweets = Search.SearchTweets(searchParam);
});
return tweets;
}
但这里的限制是我只能得到最多100条推文。我想以类似的方式利用流,并获得与我传递的tracks
匹配的推文流。我试过这个:
public void FilterStream(string query)
{
IFilteredStream tweets;
TwitterCredentials.ExecuteOperationWithCredentials(Credentials, () =>
{
var filteredStream = Tweetinvi.Stream.CreateFilteredStream();
filteredStream.AddTrack(query);
filteredStream.AddTrack("#" + query);
filteredStream.MatchingTweetReceived += (sender, args) => { Debug.WriteLine(args.Tweet.Text); };
filteredStream.StartStreamMatchingAllConditions();
});
}
但问题是它似乎在无限循环中运行,我不确定在何处停止或限制从流中收到的推文数量以使其停止。图书馆的documentation目前还不清楚,我无法实现我所追求的行为。我确定自己走的是正确的路线,只是不确定如何停止流媒体并存储我在List<ITweet>
构造中收到的所有推文。
答案 0 :(得分:1)
要停止使用流:
filteredStream.StopStream();
您可以全局统计推文,然后在收到您需要的推文数量时停止。
答案 1 :(得分:0)
我知道这是一个老问题,但我刚刚做到了这一点:
NULL
答案 2 :(得分:0)
您应该尝试在MatchingTweetReceived方法中放置一个条件,如下所示:
public void FilterStream(string query)
{ IFilteredStream tweets;
TwitterCredentials.ExecuteOperationWithCredentials(Credentials, () =>
{
var filteredStream = Tweetinvi.Stream.CreateFilteredStream();
filteredStream.AddTrack(query);
filteredStream.AddTrack("#" + query);
filteredStream.MatchingTweetReceived += (sender, args) => {
Debug.WriteLine(args.Tweet.Text);
if (condition)
stream.StopStream();
}; filteredStream.StartStreamMatchingAllConditions(); }); }
这对我来说很好。