動かざることバグの如し

近づきたいよ 君の理想に

C#アプリケーションでTwitter認証から投稿までやってみる

PHPではTwitterOAuthという素晴らしいTwitterライブラリがあるが、C#だとTweetSharpというのがあるらしい。
とりあえずGUIで認証を実装してみる。

ライブラリのインストール

Visual Studio 2012ではコマンドを叩かずともNuGetを使えば一発インストールできた。
とりあえず新規のプロジェクトを作成した時点で
メニューの「プロジェクト」→「NuGetパッケージの管理」を開き、オンラインタブをクリック。
右上の検索に「TweetSharp」と入力するとパッケージが出てくるのでクリック。あとは全部自動でやってくれる。

認証の実装

PHPと違って一般的にCallbackできないのでTwitterで認証→ユーザーにコードを控えてもらう→アプリケーションでコードを入力→認証完了、といった流れになる。
まずは以下の一文を追加

using TweetSharp;

内部でブラウザ実装させたほうが楽かな・・・とか思ってたけど外部ブラウザのほうが楽でした。
認証部分は以下の様な感じ

service = new TwitterService("Consumer key", "Consumer secret");
requestToken = service.GetRequestToken();
Uri uri = service.GetAuthorizationUri(requestToken);
Process.Start(uri.ToString());

実行すると自動的にブラウザが起動し認証すれば認証コードが表示される。
その認証コードをユーザーに入力してもらう必要がある。

String code = textBox1.Text;
OAuthAccessToken access = service.GetAccessToken(requestToken, code);
service.AuthenticateWith(access.Token, access.TokenSecret);

以上で認証完了。すべての動作が可能になった。

試しにツイート

せっかくなのでツイートしてみた。
ただ単にツイートしたければ以下の一文でおk。

service.SendTweet(new SendTweetOptions { Status = "ついーとないよう" });

とりあえず載せとく

    public partial class Form1 : Form
    {
        public TwitterService service;
        public OAuthRequestToken requestToken;

        public Form1()
        {
            InitializeComponent();
            service = new TwitterService("Consumer key", "Consumer secret");
            requestToken = service.GetRequestToken();
            Uri uri = service.GetAuthorizationUri(requestToken);
            Process.Start(uri.ToString());
        }

        private void button1_Click(object sender, EventArgs e)
        {
            String code = textBox1.Text;
            OAuthAccessToken access = service.GetAccessToken(requestToken, code);
            service.AuthenticateWith(access.Token, access.TokenSecret);
            MessageBox.Show("認証実行完了");
        }

        private void button2_Click(object sender, EventArgs e)
        {
            String str = textBox2.Text;
            service.SendTweet(new SendTweetOptions { Status = str });
            MessageBox.Show("実行完了");
        }
    }

これってどーすんの

GUIのデザインは最終としておいて、認証結果の保存とか実行の成功結果ってどうやって拾ってくるのか謎。

参考リンク:
tweetsharp/README.md at master · danielcrenna/tweetsharp · GitHub
C#でTweetSharpを使ってTwitter投稿のテストをしてみた. - ゆうたんの日常