Twitter タイムラインの取得、投稿 (C#)

C#アプリからタイムラインの取得、投稿を実施してみた。

面倒なOAuth認証はTwitterizerライブラリを使用した。

取得したタイムラインをもとになんらかの処理をやってみたり、何らかの処理の結果をTwitterに投稿してみたりと、Twitterとの連携に使えそうである。


2014/01/19 追記
なんか認証エラーでTweetが取得できなくなってる(API 1.0終了がらみかな)。
Twitterizerの代わりにTweetsharpっていうライブラリ使ったら取得できたよ。
C#アプリケーションでTwitter認証から投稿までやってみるの記事が参考になったよ!

Twitterizer


素早く簡単に.NETアプリからTwitterを使えるライブラリとのこと。
公式サイト( http://www.twitterizer.net/ )のGET ITからソースを落としてビルドする。
今回は以下からソースを入手した。
https://github.com/Twitterizer/Twitterizer
ビルドするとTwitterizer-develop\Release\Twitterizer2\Full\Twitterizer2.dllというDLLファイルが得られる。
このDLLをVisualStudioプロジェクトの参照に追加する。
(ソリューションエクスプローラの参照設定の部分で右クリックし、参照の追加を選択、(またはプロジェクト->参照の追加 メニューを選択し)、「参照の追加」ダイアログを表示させ、参照タブからTwitterizer2.dllを選ぶ。)
 
 

Consumer keyとAccess tokenの取得


アプリからTwitterにアクセスするのに必要なトークン類を入手する。
https://dev.twitter.com/appsにて新規登録し
Consumer keyとConsumer secretを取得する。
さらに、設定画面からaccess tokenの生成を行い、Access token、Access token secretを取得する。
また、設定画面で Access level に writeを追加しておく。(writeはアプリからTwitterへのデータ書き込み、つまりつぶやきの投稿の許可である。)

 
 

サンプルコード


前述の手順でTwitterizer2.dllをVisualStudioプロジェクトの参照に追加しておく。

using System;
using Twitterizer;
 
namespace ConsoleTwitter
{
    public class Program
    {
        /// <summary>
        /// 以下トークン文字列は
        /// https://dev.twitter.com/apps にて Create a new application から生成します。
        /// つぶやきを行う場合は Application type 設定で write も可能としておきます。
        /// </summary>
        const string CONSUMER_KEY       = "hoge";
        const string CONSUMER_SECRET    = "hoge";
        const string ACCESS_TOKEN       = "hoge";
        const string ACCESS_TOKEN_SECRET = "hoge";
         
        static void Main(string[] args)
        {
            try
            {
                //トークンを設定
                OAuthTokens tokens = new OAuthTokens();
                tokens.AccessToken = ACCESS_TOKEN;
                tokens.AccessTokenSecret = ACCESS_TOKEN_SECRET;
                tokens.ConsumerKey = CONSUMER_KEY;
                tokens.ConsumerSecret = CONSUMER_SECRET;

                //ユーザの情報を取得
                String username = "loftkun";
                GetUserDetails(tokens, username);

                //ユーザのタイムラインを取得
                GetUserTimeline(tokens);

                //つぶやく
                DoUpdate(tokens, "つぶやきテスト");
            }
            catch (Exception exp)
            {
                Console.WriteLine(exp.Message);
            }
        }

        /// <summary>
        /// ユーザ情報を取得
        /// </summary>
        /// <param name="tokens">トークン</param>
        /// <param name="username">ユーザ名</param>
        private static void GetUserDetails(OAuthTokens tokens, String username)
        {
            try
            {
                TwitterResponse<TwitterUser> showUserResponse = TwitterUser.Show(tokens, username);
                if (showUserResponse.Result == RequestResult.Success)
                {
                    Console.WriteLine(showUserResponse.ResponseObject.Name);
                    Console.WriteLine(showUserResponse.ResponseObject.Description);
                }
                else
                {
                    Console.WriteLine(showUserResponse.ErrorMessage);
                }
            }
            catch (Exception exp)
            {
                Console.WriteLine(exp.Message);
            }
        }

        /// <summary>
        /// ユーザのタイムラインを取得
        /// </summary>
        /// <param name="tokens">トークン</param>
        private static void GetUserTimeline(OAuthTokens tokens)
        {
            try
            {
                TwitterResponse<TwitterStatusCollection> res = TwitterTimeline.UserTimeline(tokens);
                foreach (TwitterStatus status in res.ResponseObject)
                {
                    Console.WriteLine(status.Text);
                }
            }
            catch (Exception exp)
            {
                Console.WriteLine(exp.Message);
            }
        }

        /// <summary>
        /// つぶやく
        /// </summary>
        /// <param name="tokens">トークン</param>
        /// <param name="body">本文</param>
        private static void DoUpdate(OAuthTokens tokens, String body)
        {
            try 
            {
                TwitterResponse<TwitterStatus> tweetResponse = TwitterStatus.Update(tokens, body);
                if (tweetResponse.Result == RequestResult.Success)
                {
                    Console.WriteLine("Tweet posted successfully!");
                }
                else
                {
                    Console.WriteLine("Something bad happened");
                }
            }
            catch(Exception exp)
            {
                Console.WriteLine(exp.Message);
            }
        }
    }
}

注 : 回数制限で怒られることがあります( Rate limit exceeded. Clients may not make more than 350 requests per hour. )

7件のコメント

  1. ★RYU-May進学-★

    >公式サイト( http://www.twitterizer.net/ )のGET ITからソースを落としてビルドする。

    公式サイトを確認したのですが どれをインストール(ダウンロード)すればいいのか? 分かりませんでした。
    教えてもらえませんか?。。。

    ツイッター ツイートアプリケーションを作成したいので。。。

  2. ★RYU-May進学ne-★

    ・あの
    >公式サイト( http://www.twitterizer.net/ )のGET ITからソースを落としてビルドする。
    と書いてありますが 公式サイトを見たのですが ファイルがたくさんあって分かりません
    どれをダウンロードし,ビルドすればいいのですか?
    方法等を教えてください。

  3. ロフトくん

    >★RYU-May進学ne-★さん
    こんにちは。
    ブログ冒頭の「2014/01/19 追記」の項目にも記載しておりますように、
    Twitterizerはもう更新されておらず、使えないようです。
    代わりにTweetsharpというライブラリが使えるようです。
    参考)
    http://thr3a.hatenablog.com/entry/20130921/1379728823
    http://c-loft.com/blog/?p=2270

  4. Tweetshapeもサポートが終わりだそうで、(別スレッドで独自ビルド版の話題が出ているのはそのため)Coretweetの紹介をして頂けないでしょうか?
    http://blog.ch3cooh.jp/entry/20140808/1407464147
    まあこのままなんですが、認証エラーに悩まされています。

  5. ロフトくん

    >BURIさん
    こんにちは。
    ご紹介いただいたブログ記事( http://blog.ch3cooh.jp/entry/20140808/1407464147 )の
    コードで動くようです。
    試したコードは以下です(各種tokenは伏せ字してます)。

        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                var tokens = CoreTweet.Tokens.Create(
                  "BjkdnW3XXXXXXXXXXXXXXXX"
                , "ELuaRVOXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
                , "9948530XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
                , "eNs1EMyXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
    
                var text = "なんかつぶやいてみる";
                tokens.Statuses.Update(new { status = text });
            }
        }
    

    Json={“errors”:[{“message”:”Bad Authentication data”,”code”:215}]} が返ってきているということなので
    token文字列の確認(ブログ記事にある{}の記号は不要です。)と、
    ブログ記事にある”アプリケーションの権限の変更”の設定が
    確実にされているかどうかを確認して見て下さい。

  6. あー、{}の記号つけてました。(汗)
    外したら動きました。ありがとうございます。

  7. Xに変わってから認証に失敗するのは私だけ。。。?

BURI へ返信する キャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です