こんにちは、吉岡([twitter:@yoshiokatsuneo])です。
プログラミングを始めると、実際に何か作って公開したくなりますね。公開できるサービスやアプリを開発するのは、勉強にもなりますし、モチベーションも上がります。そんな時に最適なものの一つが、Twitterボット(Twitter bot)の作成です!
取り扱うのが文字情報だけであればプログラミングも比較的簡単にできますし、公開すれば今すぐ世界中の人々に見たり使ったりしてもらうことが可能です。
ただ、プログラム自体は簡単なものでも、自分の手元に開発環境を用意したり、サーバを設定したりするのは、初心者には結構大変です。
そこで、今回はPaizaCloudを利用します。
PaizaCloudは、クラウド上で動く開発環境です。面倒なインストールや環境設定をすることなく、Web開発やアプリケーション開発を簡単・手軽に始められます。
PaizaCloudでは、Twitterボット(Twitter bot)の開発に適した環境も用意されているので、ブラウザだけですぐにプログラミングができます。
また、すべてクラウド上で動作していますから、サーバなどを用意しなくても、作ったTwitterボットをすぐに動かすことができます!
ここでは、実際にPaizaCloud上で、RubyでTwitterボット(Twitter bot)を作ってみましょう。
手順に沿っていけば5分程度でTwitterボットが作れて、実際に運用もできます。
PaizaCloud Cloud IDEを使う
それでは、始めていきましょう。まずは、PaizaCloudにログインします。
PaizaCloud Cloud IDEのサイトはこちらです。
メールアドレスなどを入力して登録すると、登録確認メールが送られてきます。GitHubやGoogle(Gmail)ログインを利用すると、ボタン一つで登録することもできます。
サーバを作る
次は、開発環境となるサーバを作ります。
「新規サーバ作成」ボタンを押して、サーバ作成画面を開きます。
特に何も変更せずに、もう一度「新規サーバ作成」ボタンを押せば
3秒程度で、RubyでのTwitterボット(Twitter bot)の開発環境がブラウザ上にできあがります。
Twitter APIキーの取得
TwitterボットなどのプログラムからTwitterを使いたい場合は、Twitter APIを利用する必要があります。Twitter APIを利用するには、APIキーが必要なので作成しましょう。
APIキーを作るには、まずTwitterのアプリケーション管理画面でアプリケーションを作成します。
Twitterにログインした後、"Twitter Apps"ページを開きます。
https://apps.twitter.com/apps.twitter.com
次に、"Create New App"ボタンを押して、Twitterアプリケーションを作成します。
"Name"にプログラムの名前を、"Description"にプログラムの内容を入れます。
"Website"にはWebサイトのURLを入れますが、なければ、とりあえず https://example.com/ などといれておきます。
"Developer Agreement"を確認してチェックしたら、"Create your Twitter application"ボタンでアプリケーションを作成します。
携帯電話の番号を登録していない場合、以下のようなメッセージが表示されます。
この場合、携帯電話番号設定ページ( https://twitter.com/settings/add_phone )で、電話番号を登録し、SMSで送信された認証用コードを入力します。
これでアプリケーションを作成できました。
次に、このアプリケーションのAPIキーを作成します。
作成したアプリケーションを選択して、"Keys and Access Tokens"タブを選択します。
Access LevelがRead-only(読み込み専用)になっている場合は、ツイートを作成できるように、"modify app permissions"リンクをクリックして、"Read and Write"に変更します。
Access Tokenも読み書きできる設定に変更します。
Application Actionsから、"Regenerate Consumer Key and Secret"をクリックして、Your Access TokenのAccess levelが"Read-Write"になっていることを確認します。
これでAPI Keyの設定が完了です。
APIキーは以下の4つを利用しますから、メモしておきましょう。
- Consumer Key (API Key)
- Consumer Secret (API Secret)
- Access Token
- Access Token Secret
プログラムの作成
それでは、Twitterボットのプログラムを作成していきましょう。
まずは、APIキーの設定をするために、"config.rb"というファイルを作成します。
PaizaCloudでは、ブラウザ上でファイルの作成・編集ができます。
PaizaCloudの画面左側の「新規ファイル」アイコンをクリックしてみましょう。
ファイル名を入力する画面がでてくるので、ファイル名を"config.rb"として、「作成」ボタンを押します。
作成できたら、Twitterボットの設定を書いていきます。
ここで、YOUR_CONSUMER_KEY / YOUR_CONSUMER_SECRET / YOUR_ACCESS_TOKEN / YOUR_ACCESS_SECRET には、先ほど取得したAPIキーに置き換えてください。
config.rb:
require 'twitter' config = { consumer_key: "YOUR_CONSUMER_KEY", consumer_secret: "YOUR_CONSUMER_SECRET", access_token: "YOUR_ACCESS_TOKEN", access_token_secret: "YOUR_ACCESS_SECRET", } @restClient = Twitter::REST::Client.new(config) @streamingClient = Twitter::Streaming::Client.new(config)
保存ボタンを押して保存します。
twitter gemを利用してツイートの読み書きをしていきますので、"require 'twitter'"でgemファイルを読み込んでいます。
次に、APIキーを指定してツイートの読み書きをするためのオブジェクトを作成します。
Twitter gemでは、REST API、Streaming APIで別のオブジェクトを使うため、それぞれTwitter::REST::Clientと、Twitter::Streaming::ClientオブジェクトをAPIキーを指定して作成します。
ツイートする
設定ができたので、試しにツイートしてみましょう。
まずは、Rubyを対話的に利用できる"irb"コマンドを使ってみます。
PaizaCloudでは、ブラウザ上で、コマンドを入力するための「ターミナル」を使うことができます。
画面左側の、「ターミナル」のボタンをクリックします。
ターミナルが起動しますので、"irb -r ./config.rb"と、実行するコマンドを入れて改行キー(エンターキー)を押します。
$ irb -r ./config.rb
"irb"が起動しました。それではツイートしてみましょう。ツイートには、updateメソッドを利用します。
@restClient.update("https://paiza.cloud/ を使ってRubyでツイートしてみた!")
ブラウザでTwitterを開いて確認してみましょう。
ツイートできましたね!
RubyでTwitterボットを作る
それでは、今度はメンションに返事をしてくれるTwitterボットを作ってみましょう。ここでは、今の時刻、今日や明日の日付を教えてくれるTwitterボットを作ってみます。
画面左側の「新規ファイル」ボタンをクリックして、"bot.rb"という名前でファイルを作成します。作成できたら、コードを書いていきましょう。
ここで、USERNAMEはツイッターのアカウント("@"を除く)に置き換えてください。
bot.rb:
require 'twitter' require './config' ENV['TZ'] = 'JST-9' username = "USERNAME" @streamingClient.user do |tweet| if tweet.class == Twitter::Tweet && tweet.text.include?("@#{username}") && !tweet.in_reply_to_status_id puts "Found tweet: #{tweet}" if tweet.text.include?("何時") now = Time.now @restClient.update("@#{tweet.user.screen_name} 今は#{now.hour}時#{now.min}分#{now.sec}秒です。", in_reply_to_status_id: tweet.id) end if tweet.text.include?("今日") today = Time.now @restClient.update("@#{tweet.user.screen_name} 今日は#{today.year}年#{today.month}月#{today.day}日です。", in_reply_to_status_id: tweet.id) end if tweet.text.include?("明日") tomorrow = Time.now + (60*60*24) @restClient.update("@#{tweet.user.screen_name} 明日は#{tomorrow.year}年#{tomorrow.month}月#{tomorrow.day}日です。", in_reply_to_status_id: tweet.id) end end end
環境変数TZで、タイムゾーンを設定しておきます。
@streamClientのuserメソッドではツイートを監視します。ツイートが見つかると、ブロックが実行され、tweetオブジェクトにツイートが読み込まれます。
tweet.textがツイートメッセージになるので、@ユーザ名が含まれているか確認します。ループを防ぐために、リプライではないことも確認しておきます。
そして、メッセージに「時間」、「今日」、「明日」などのキーワードが含まれているか確認し、@restClient.updateで、返事をツイートします。
botを動かす
これでプログラムが完成です!
PaizaCloudのターミナルでRubyのTwitterボットを実行してみましょう!
$ ruby bot.rb
ツイッターでメンションを送って確認してみましょう!
ちゃんと返事していますね!RubyのTwitterボットが完成です!
なお、PaizaCloudの無料プランでは、一定時間が経つとサーバは停止します。継続的にこのTwitterボットを動かしたい場合は、ベーシックプランへアップデートしてください。
詳しくはこちら
まとめ
PaizaCloudで、RubyでTwitterボットを作り、動かしてみました。
Twitterボットは少ないコードで簡単に作れますし、改造も簡単です。どんなリプライにどんな返信をするか、考えながら作るのがおもしろいです。PaizaCloudで作ったTwitterボットは、すぐに公開できるので、いろいろな人に使ってもらえるのも楽しいですね。
ぜひTwitterボットを作ってみてください!
(Twitterボットを作ってみたらpaiza(@paiza_official)まで教えてくれるとうれしいです!)
「PaizaCloud」では、環境構築に悩まされることなく、ブラウザだけで簡単にウェブサービスやサーバアプリケーションの開発や公開ができます。
「paizaラーニング」では、未経験者でもブラウザさえあれば、今すぐプログラミングの基礎が動画で学べるレッスンを多数公開しております。
詳しくはこちら
そしてpaizaでは、Webサービス開発企業などで求められるコーディング力や、テストケースを想定する力などが問われるプログラミングスキルチェック問題も提供しています。
スキルチェックに挑戦した人は、その結果によってS・A・B・C・D・Eの6段階のランクを取得できます。必要なスキルランクを取得すれば、書類選考なしで企業の求人に応募することも可能です。「自分のプログラミングスキルを客観的に知りたい」「スキルを使って転職したい」という方は、ぜひチャレンジしてみてください。
詳しくはこちら