事業開発ほどクリエイティブな行為は他に無いと思いこんでいる人間の日常

Linq to Twitter を試してみた。

»

Botを開発する際、Twitter API の利用で少々苦労したのですが、その終盤において、Linq to Twitter なるものがあるのを知り、ショックを受けたのですが、便利そうなのでメモ。

まず、Twitter API を利用するためには、認証のためのTokenなどを取得する必要があります。以前はBasic認証が使えたのですが、今はOAuthのみのようですね。

OAuthをC#でやるのはいろいろ大変だったのですが、そのあたりも、全部Linq to Twitter がやってくるので、それだけでも利用価値があります。

が、そもそも、AccessTokenやらを取得するのが大変で、まずは、そのためのクライアント(GetTwitterAuthInfo)を作ってみました。

GetTwitterAuthInfo.zipをダウンロード

なお、ツールの実装においては、nojima氏がパブリックドメインとして公開されているコードを利用させていただきました。ありがとうございます。

Twitter での認証(Linq to Twitter利用)のためには制御対象となるTwitterアカウントのID、パスワードの他に、下記の、4つの情報が必要です。

  1. CONSUMER_KEY
  2. CONSUMER_SECRET
  3. ACCESSTOKEN
  4. ACCESSTOKENSECRET

このうち、1と2については、取得用のWebサイトにて、取得します。

取得方法については、iPentecさんのサイトに詳しい解説があります。

その2つを取得したら、カスタムでコードを書くか、さっき紹介したツールで、残りの2つを取得します。

GetTwitterAuthInfoを利用する方法を簡単に説明しおきます。

1)PINコードを取得するためのURLを取得する。

CONSUMER_KEYとCONSUMER_SECRETを取得し、テキストボックスに入力しします。そして、「1) GET PIN URL」をクリックします。しばらく経つと、PIN URLの欄に、PINコードを取得するためのURLが取得されます。

002

2)PINコードを取得する。

取得されたURLをブラウザに直接コピーするか、「2) Open URL」をクリックすると、PINコード取得用のURLにアクセスしします。

アクセスするTwitterアカウントを聞かれるので、入力します。

003

PINが表示されますので、コピーします。

004

3)ACCESSTOKENおよびACCESSTOKENSECRETを取得しる。

表示されたPINコードを「PIN COE」に入力し、「3) GET TOKEN」をクリックします。しばらく経つと、AccessTokenとAccessTokenSecretが表示されますのでメモするか、「Save as .\authinfo.txt」をクリックしください。Save sa ~をっクリックした場合は、GetTwitterAuthInfo.exeと同じディレクトリにauthinfo.txtとして保存されます(エラーが起きた場合はパーミッションを確認してみてください)。

005

ここまでの手順で、上記4つの情報が入手できているものとします。

Linq to Twitter を入手し、参照を追加します。

これで準備完了。

なお、最初に書いておきますが、ダウンロードされたDLLは、TargetのFrameworkを3.5にしておかないとエラーがでます(4.0ではダメでした)。

では、コーディング。

まず、タイムラインを取得してみます。こんな感じ。

下記例では、Windows Application にボタンとテキストボックス(マルチTrue)に取得したタイムラインを表示しています。

        private void button1_Click(object sender, EventArgs e)
        {


            OAuthTwitter auth = new OAuthTwitter();

            //取得した認証情報を入力します。
            auth.OAuthConsumerKey = "
your_consumerkey";
            auth.OAuthConsumerSecret = "
your_consumersecret";
            auth.OAuthToken = "
your_accesstoken";
            auth.OAuthTokenSecret = "
your_accesstokensecret";
            

            PinAuthorizer pinauth = new PinAuthorizer();
            pinauth.OAuthTwitter = auth;

            TwitterContext context = new TwitterContext(pinauth);

            var query = from p in context.Status
                        where p.Type == LinqToTwitter.StatusType.User
                        select p;

            foreach (var q in query)
            {
                textBox1.Text +=  q.Text + "\r\n";
            }

            context.Dispose();
        }

次に更新。

            var tweet = context.UpdateStatus("投稿:" + DateTime.Now.ToString());

上記ソースの青い部分をこのようにするだけ。APIは同じ内容の投稿をはじくので、時刻を表示させて内容を変化させています。

次に検索。

            var query = from p in context.Search
                        where p.Type == SearchType.Search &&
                        p.Query == "みかん" &&
                        p.Page == 1 &&
                        p.PageSize == 3
                        select p;

            foreach (var q in query)
            {
                textBox1.Text += "Query:" + q.Query + "\r\n";
                foreach (var e in q.Entries)
                {
                    textBox1.Text += "内容:" + e.Content + "\r\n";
                }
            }

という感じ。

0から実装することを考えれば、えらい楽です。

Comment(0)