【问题标题】:event using for autoupdate用于自动更新的事件
【发布时间】:2016-05-26 20:44:23
【问题描述】:

我在 c# .NET 上有这个小代码,它使用 tweetinvi 发布推文并显示推特的时间线。而且我想在发送推文时自动更新时间线。谁能建议如何处理事件?感谢您的回答。

private void button1click(object sender, EventArgs e)
    {
        if (richTextBox1.Text != "")
        {
            Tweet.PublishTweet(richTextBox1.Text);
            MessageBox.Show("Your tweet was sent!", "Important Message");

        }
        else
        {
            MessageBox.Show("You need to write something!", "Important Message");
        }
    }

    private void Timeline_GetHomeTimeline(object sender, EventArgs e)
    {

    var loggedUser = User.GetLoggedUser();
        string x = "";
        var homeTimelineTweets = loggedUser.GetHomeTimeline();
        foreach (var tweet in homeTimelineTweets)
        {
            x += tweet.Text + Environment.NewLine;
        }
        richTextBox2.Text = x;


    }

【问题讨论】:

  • 基本上,如果您需要近乎实时的更新,那么您需要调查 Streaming API:dev.twitter.com/streaming/overview
  • 下面提供了一些关于它是如何工作的直觉:stackoverflow.com/q/5960128/2568535
  • 不,我想让事件变得更简单,所以当推文按钮被按下时,它会再次执行 Timeline_GetHomeTimeline 方法,所以我得到了刚刚发布的推文的新时间线

标签: c# .net tweetinvi


【解决方案1】:

首先请注意,拨打多个电话User.GetLoggedUser(); 是一种非常糟糕的做法。原因是端点被限制为每 15 分钟 15 个请求(每分钟 1 个)。

如果用户碰巧在 15 分钟内发布了超过 15 条推文,那么你的代码就会崩溃。

现在您有多种解决方案来解决问题,但最好的一个是UserStream(解决方案 1)。

解决方案 1

我建议在Initialized 事件中添加以下代码。

var us = Stream.CreateUserStream();
us.TweetCreatedByMe += (sender, args) =>
{
    // Update your rich textbox by adding the new tweet with tweet.Text
    var tweetPublishedByMe = args.Tweet;

    // OR Get your timeline and rewrite the text entirely in your textbox
    var userTimeline = Timeline.GetHomeTimeline();
    if (userTimeline != null)
    {
        // foreach ...
    }
};

us.StartStreamAsync();

解决方案 2

如果您不需要在每次用户发布推文时重新加载您的Timeline,但您确实需要显示新推文,请使用以下解决方案。

var tweet = Tweet.PublishTweet("hello");
if (tweet != null)
{
    // Update your rich textbox
}

解决方案 3

如果推文已成功发布,请更新您的 timeline

var tweet = Tweet.PublishTweet("hello");
if (tweet != null)
{
    var userTimeline = Timeline.GetHomeTimeline();
    if (userTimeline != null)
    {
        // foreach ...
    }
}

注意请注意,我在任何时候都不需要检索LoggedUser。大多数情况下,LoggedUser 应该被检索一次,然后在您的应用中使用。

另外请注意,我是 Tweetinvi 的主要开发者。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多