我在c#.NET上有这个小代码,它发布推文并使用tweetinvi显示twitter的时间线。并且我希望在发送推文时自动更新时间线。任何人都可以建议如何使用事件吗?谢谢你的回答。
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;
}
答案 0 :(得分:0)
首先请注意,拨打多个电话User.GetLoggedUser();
是一种非常糟糕的做法。原因是端点每15分钟(每分钟1次)限制为15个请求。
如果用户在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的主要开发者。