Twitter BOT の作成 第2回 — ツイート コンソールアプリの作成
今回でプログラムからツイートできます。
先日から運用している WordPress の RSS から記事を取得してツイートする BOT を作ります。
- Visual Basic コンソールアプリ(LinqToTwitter 利用)
- Microsoft Azure スケジューラによるジョブの実行
というニッチな内容です。無償の Visual Studio Express 2013 for Desktop で作れます。Azure は……。
WordPress のプラグインや Web サービスなどで良いものが見つからなかったので、手短に作ってみました。
目次
- BOT 用 Twitter アプリの作成
- ツイート コンソールアプリの作成(今回)
- WordPress RSS から投稿のツイート
- Azure スケジューラによるジョブの実行
ツイート コンソールアプリの作成
とりあえずツイートするだけのアプリを作ります。
Visual Studio でコンソールアプリのプロジェクトを新規作成します。C# の人は読み替えてください。
LinqToTwitter の参照
オープンソースのライブラリ LinqToTwitter を利用します。
NuGet から LinqToTwitter をインストールします(メニュー[プロジェクト]から[NuGet パッケージの管理]からインストール)。
インストールすると、依存関係の下記ライブラリの参照も追加されます。
- Microsoft.Bcl
- Microsoft.Bcl.Compression
- Microsoft.Net.Http
App.config の編集
自分専用なので API key などをコードに直接書いてもいいんですが、複数の BOT 運用なども考えて、App.config に設定を書くことにします。
https://gist.github.com/jz5/48304fcba0c78d386c5f
ここに Twitter アプリ設定の値を入れます。この情報は配布や公開してはダメです。
Twitter 認証
モジュールファイルを編集します。手動で下記の参照もプロジェクトに追加してください。
- System.Runtime
- System.Configuration
API key などを使い LinwToTwitter の SingleUserAuthorizer オブジェクト返す関数を Module 内に作ります。Twitter の認証に使うオブジェクトです。App.config の設定を読み取って作ります。
' 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 オブジェクトの認証メソッドを呼んで認証を行い、ツイート用のオブジェクトを生成してツイートします。
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 |
できました。
こんにちは
— JZ5 (@jz5) July 2, 2014
第3回 へ。