Twitter 客户端 - 使用 Twitterizer 库通过 Twitter OAuth 登录到 C# 应用程序






4.93/5 (13投票s)
使用 Twitterizer 进行 C# Twitter 集成。
介绍
本文介绍了 WPF 应用程序与 twitter 的集成,以及一个使用 Twitterizer 库的包含所有基本功能(推文、私信等)的简单 twitter 客户端。
其目的是提供一种使用 twitter 登录应用程序并执行对开发者可能有用的基本操作的简便方法。
背景
codeproject 上已经有一篇关于 twitter 和 facebook 集成的优秀文章,名为“使用 oAuth 的 C# 应用程序与 facebook 和 twitter 集成”。
请按照上述文章中的说明创建您自己的 secretKey 和 token。
但本文的目的是提供使用 Twitterizer 的 twitter 最常用功能。我一直在寻找 twitterizer 的帮助,遇到了很多问题,所以我决定为其他使用 C# 的 twitterizer 的人写一篇文章。
本文使用 WPF 中的 xml 和浏览器。所以在继续之前,请确保您了解这些。有很多关于 xml 和浏览器控件的文章,例如XML 入门 所以我不会讨论这些。
工作原理
当应用程序运行时,它会检查用户是否已登录。如果没有,则显示一个浏览器窗口,以便从 twitter 验证。用户登录到 twitter,twitter 生成一个 pin,用户将其粘贴到提供的文本框中。现在启动主窗口,可以在其中执行所有操作。
登录/注销
当用户登录到 twitter 时,twitter 会将一个键值对发送到应用程序,称为令牌。然后将这些令牌保存到 xml 中。每当用户想要更新状态、发送私信或检查关注者等时,必须将这些令牌与请求一起发送给 twitter。
当用户第一次登录时,此令牌会保存到 xml,下次用户启动应用程序时,应用程序首先检查令牌是否已保存在 xml 文件中。如果令牌已经保存,则表示用户已经登录,否则显示浏览器。
当用户想要注销时,只需单击主窗口中的注销按钮来删除该 xml 文件。下次,系统会再次提示用户登录。
使用代码
代码包含三个 WPF 窗口和两个类。
浏览器窗口和类:
public partial class Browser : Window
{
public Browser()
{
InitializeComponent();
}
XMLStuff myXML;
private void btnRefresh_Click(object sender, RoutedEventArgs e)
{
browserControl.Refresh();
}
// checks whether already logged in or not. if logged in then goto main window, else goto twitter
private void Window_Loaded_1(object sender, RoutedEventArgs e)
{
myXML = new XMLStuff();
statusBarMessage.Text = "Checking for login info..";
bool loggedIn = AlreadyLoggedIn();
statusBarMessage.Text = "Not logged in, shifting to login page.";
if (!loggedIn)
{
Login();
statusBarMessage.Text = "";
}
else
{
MainWindow mw = new MainWindow();
mw.Show();
this.Close();
}
}
private void btnSend_Click(object sender, RoutedEventArgs e)
{
TwitterStuff.pin = tbPin.Text; //when user enters pin, it is saved to TwitterStuff class
Properties.Settings.Default.Save();
TwitterStuff.tokenResponse2 = OAuthUtility.GetAccessToken(TwitterStuff.consumerKey,
TwitterStuff.consumerSecret, TwitterStuff.tokenResponse.Token, tbPin.Text);
myXML.writeToXML(TwitterStuff.tokenResponse2.ScreenName.ToString(),
TwitterStuff.tokenResponse2.Token, TwitterStuff.tokenResponse2.TokenSecret);
TwitterStuff.screenName = TwitterStuff.tokenResponse2.ScreenName.ToString();
SetLocalTokens();
//MessageBox.Show("Logged In and local tokens are set");
statusBarMessage.Text = "Successfuly logged in.";
MainWindow mw = new MainWindow();
mw.Show();
this.Close();
}
private void browserControl_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
lblUri.Content = browserControl.Source.AbsoluteUri.ToString();
progressBar.IsIndeterminate = false;
progressBar.Visibility = System.Windows.Visibility.Hidden;
// MessageBox.Show(browserControl.Source.AbsoluteUri.ToString());
}
// open twitter site with our consumerKey and consumerSecret to login
private void Login()
{
TwitterStuff.tokenResponse = OAuthUtility.GetRequestToken(TwitterStuff.consumerKey,
TwitterStuff.consumerSecret, TwitterStuff.callbackAddy);
string target = "http://twitter.com/oauth/authenticate?oauth_token=" +
TwitterStuff.tokenResponse.Token;
try
{
browserControl.Navigate(new Uri(target));
}
catch (System.ComponentModel.Win32Exception noBrowser)
{
if (noBrowser.ErrorCode == -2147467259)
MessageBox.Show(noBrowser.Message);
}
catch (Exception other)
{
MessageBox.Show(other.Message);
}
}
/// <summary>
/// Initialize token
/// </summary>
private void SetLocalTokens()
{
TwitterStuff.tokens = new OAuthTokens();
TwitterStuff.tokens.AccessToken = TwitterStuff.tokenResponse2.Token;
TwitterStuff.tokens.AccessTokenSecret = TwitterStuff.tokenResponse2.TokenSecret;
TwitterStuff.tokens.ConsumerKey = TwitterStuff.consumerKey;
TwitterStuff.tokens.ConsumerSecret = TwitterStuff.consumerSecret;
}
// if already logged in, then tokens are loaded from xml file using this method.
private bool SetLocalTokens(string accessToken, string tokenSec)
{
try
{
TwitterStuff.tokens = new OAuthTokens();
TwitterStuff.tokens.AccessToken = accessToken;
TwitterStuff.tokens.AccessTokenSecret = tokenSec;
TwitterStuff.tokens.ConsumerKey = TwitterStuff.consumerKey;
TwitterStuff.tokens.ConsumerSecret = TwitterStuff.consumerSecret;
// MessageBox.Show("Tokens with arguments initialized.");
return true;
}
catch (Exception)
{
return false;
}
}
// this method checks whether xml file exists and reads data,
// if so, it means that user is logged in. and true is returned
private bool AlreadyLoggedIn()
{
try
{
//MessageBox.Show("Trying to get login info");
List<string> LoginInfo = myXML.readFromXml();
TwitterStuff.screenName = LoginInfo[1];
if (!SetLocalTokens(LoginInfo[2], LoginInfo[3]))
return false;
//MessageBox.Show("Already logged in.");
return true;
}
catch (Exception e)
{
statusBarMessage.Text = "Not logged in.";
return false;
}
}
private void browserControl_Navigating(object sender,
System.Windows.Navigation.NavigatingCancelEventArgs e)
{
progressBar.IsIndeterminate = true;
progressBar.Visibility = System.Windows.Visibility.Visible;
}
}
XMLStuff 类只是使用 writeToXML 方法将令牌字符串写入 xml 文件,并使用 readFromXml 读取令牌。
当用户单击注销按钮时,将调用 xml 注销方法,该方法仅删除 XML 文件。
TwitterStuff
此类执行所有与 twitter 相关的功能。
public static string consumerKey = "your consumer key here";
public static string consumerSecret = "your consumer secret here"
通过遵循上述文章,从 twitter 获取您的 consumerKey 和 consumerSecret。
public static string pin = "xxxxxxx";
当用户登录到 twitter 时,twitter 提供一个 pin,该 pin 存储在此变量中。
public static OAuthTokens tokens;
这些令牌作为参数传递给所有主要的 twitter 函数。例如,发送消息函数
TwitterDirectMessage.Send(tokens, receiverScreenName.Trim(), msg);
更新状态的方法:
public bool tweetIt(string status)
{
try
{
TwitterStatus.Update(tokens, status);
MessageBox.Show("Status updated successfuly");
return true;
}
catch (TwitterizerException te)
{
MessageBox.Show(te.Message);
return false;
}
}
此方法采用一个字符串变量并将其作为推文发布到 twitter。
public List<string> getMessages()
{
List<string> temp = new List<string>();
var receivedMessages = TwitterDirectMessage.DirectMessages(tokens);
foreach (var v in receivedMessages.ResponseObject)
{
temp.Add(v.Recipient.ScreenName + " >> " + v.Text);
}
return temp;
}
上述方法获取所有用户的所有已接收消息,然后将其存储到一个字符串列表中。
兴趣点
如果您想将 twitter 集成到您的应用程序中,那么此项目中的 TwitterStuff 和 Browser 类将为您提供帮助。
重要提示
此项目是在 VS2012 中创建的,可能无法在以前的版本中打开。
Twitterizer 库用于连接到 twitter。 可在 https://github.com/Twitterizer/Twitterizer 获取
这是我的第一篇文章,所以请...!