C#Tweetinvi库 - 如何停止流

时间:2014-12-08 02:04:48

标签: c# twitter tweetinvi

尝试通过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>构造中收到的所有推文。

3 个答案:

答案 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();     }); }

这对我来说很好。