Development 更新

Twitter BOT の作成 第2回 — ツイート コンソールアプリの作成

今回でプログラムからツイートできます。

先日から運用している WordPress の RSS から記事を取得してツイートする BOT を作ります。

  • Visual Basic コンソールアプリ(LinqToTwitter 利用)
  • Microsoft Azure スケジューラによるジョブの実行

というニッチな内容です。無償の Visual Studio Express 2013 for Desktop で作れます。Azure は……。

WordPress のプラグインや Web サービスなどで良いものが見つからなかったので、手短に作ってみました。

目次

  1. BOT 用 Twitter アプリの作成
  2. ツイート コンソールアプリの作成(今回)
  3. WordPress RSS から投稿のツイート
  4. Azure スケジューラによるジョブの実行

ツイート コンソールアプリの作成

とりあえずツイートするだけのアプリを作ります。

Visual Studio でコンソールアプリのプロジェクトを新規作成します。C# の人は読み替えてください。

LinqToTwitter の参照

オープンソースのライブラリ LinqToTwitter を利用します。

NuGet から LinqToTwitter をインストールします(メニュー[プロジェクト]から[NuGet パッケージの管理]からインストール)。

NuGet から LinqToTwitter のインストール

インストールすると、依存関係の下記ライブラリの参照も追加されます。

  • Microsoft.Bcl
  • Microsoft.Bcl.Compression
  • Microsoft.Net.Http

App.config の編集

自分専用なので API key などをコードに直接書いてもいいんですが、複数の BOT 運用なども考えて、App.config に設定を書くことにします。

App.config.xml
<configuration>
  .. 省略 ..

  <appSettings>
    <add key="ConsumerKey" value="** API key **"/>
    <add key="ConsumerSecret" value="** API secret **"/>
    <add key="AccessToken" value="** Access token **"/>
    <add key="AccessTokenSecret" value="** Access token secret **"/>
  </appSettings>
</configuration>

ここに Twitter アプリ設定の値を入れます。この情報は配布や公開してはダメです。

Twitter 認証

モジュールファイルを編集します。手動で下記の参照もプロジェクトに追加してください。

  • System.Runtime
  • System.Configuration

API key などを使い LinwToTwitter の SingleUserAuthorizer オブジェクト返す関数を Module 内に作ります。Twitter の認証に使うオブジェクトです。App.config の設定を読み取って作ります。

Module.vb
' Imports LinqToTwitter を追加しておく

' Twitter 認証に使うオブジェクトを返す
Private Function CreateSingleUserAuthorizer() As SingleUserAuthorizer
    Dim s = System.Configuration.ConfigurationManager.AppSettings

    Dim auth = New SingleUserAuthorizer With {
        .CredentialStore = New SingleUserInMemoryCredentialStore With
            {
                .ConsumerKey = s("ConsumerKey"),
                .ConsumerSecret = s("ConsumerSecret"),
                .AccessToken = s("AccessToken"),
                .AccessTokenSecret = s("AccessTokenSecret")
            }
    }
    Return auth

End Function

ツイートする

とりあえずツイートしてみます。ミニマムな感じだとこんな感じです。非同期メソッドのため Sub Main 内で記述するとこうなります。

SingleUserAuthorizer オブジェクトの認証メソッドを呼んで認証を行い、ツイート用のオブジェクトを生成してツイートします。

Module.vb
Sub Main()
    Dim t = Task.Factory.StartNew(
        Async Function()
            Dim auth = CreateSingleUserAuthorizer()
            Await auth.AuthorizeAsync

            Using ctx = New TwitterContext(auth)
                Await ctx.TweetAsync("こんにちは")
            End Using

        End Function).Unwrap

    t.Wait()
End Sub

できました。

第3回 へ。