событие, используемое для автообновления

У меня есть этот небольшой код на С# .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;


    }

person Aleksandr    schedule 15.02.2016    source источник
comment
По сути, если вам требуется обновление почти в режиме реального времени, вам необходимо изучить Streaming API: dev. twitter.com/streaming/обзор   -  person Terry Burton    schedule 15.02.2016
comment
Следующее дает некоторое представление о том, как это работает: stackoverflow.com/q/5960128/2568535   -  person Terry Burton    schedule 15.02.2016
comment
Нет, я хотел бы сделать это проще с событием, поэтому, когда нажимается кнопка твита, он снова выполняет метод Timeline_GetHomeTimeline, поэтому я получаю новую временную шкалу с только что опубликованным твитом.   -  person Aleksandr    schedule 15.02.2016


Ответы (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.

person Linvi    schedule 17.02.2016