paiza開発日誌

IT/Webエンジニア向け総合求人・学習サービス「paiza」(https://paiza.jp ギノ株式会社)の開発者が開発の事、プログラミングネタ、ITエンジニアの転職などについて書いています。

Twitterボット(Twitter Bot)の作り方(Ruby編) - サーバ設定不要のPaizaCloud上でTwitterボットをRubyで作る

f:id:paiza:20180110115336p:plain
(English article is here)

f:id:paiza:20151217152725j:plainこんにちは、吉岡(@)です。

プログラミングを始めると、実際に何か作って公開したくなりますね。公開できるサービスやアプリを開発するのは、勉強にもなりますし、モチベーションも上がります。そんな時に最適なものの一つが、Twitterボット(Twitter bot)の作成です!

取り扱うのが文字情報だけであればプログラミングも比較的簡単にできますし、公開すれば今すぐ世界中の人々に見たり使ったりしてもらうことが可能です。

ただ、プログラム自体は簡単なものでも、自分の手元に開発環境を用意したり、サーバを設定したりするのは、初心者には結構大変です。

そこで、今回はPaizaCloudを利用します。

PaizaCloudは、クラウド上で動く開発環境です。面倒なインストールや環境設定をすることなく、Web開発やアプリケーション開発を簡単・手軽に始められます。

PaizaCloudでは、Twitterボット(Twitter bot)の開発に適した環境も用意されているので、ブラウザだけですぐにプログラミングができます。

また、すべてクラウド上で動作していますから、サーバなどを用意しなくても、作ったTwitterボットをすぐに動かすことができます!

ここでは、実際にPaizaCloud上で、RubyTwitterボット(Twitter bot)を作ってみましょう。

手順に沿っていけば5分程度でTwitterボットが作れて、実際に運用もできます。

PaizaCloud Cloud IDEを使う

それでは、始めていきましょう。まずは、PaizaCloudにログインします。

PaizaCloud Cloud IDEのサイトはこちらです。

https://paiza.cloud/

メールアドレスなどを入力して登録すると、登録確認メールが送られてきます。GitHubGoogle(Gmail)ログインを利用すると、ボタン一つで登録することもできます。

サーバを作る

次は、開発環境となるサーバを作ります。

f:id:paiza:20171213234155p:plain

「新規サーバ作成」ボタンを押して、サーバ作成画面を開きます。

特に何も変更せずに、もう一度「新規サーバ作成」ボタンを押せば

f:id:paiza:20171218232242p:plain

3秒程度で、RubyでのTwitterボット(Twitter bot)の開発環境がブラウザ上にできあがります。

Twitter APIキーの取得

TwitterボットなどのプログラムからTwitterを使いたい場合は、Twitter APIを利用する必要があります。Twitter APIを利用するには、APIキーが必要なので作成しましょう。

APIキーを作るには、まずTwitterのアプリケーション管理画面でアプリケーションを作成します。

Twitterにログインした後、"Twitter Apps"ページを開きます。

apps.twitter.com

f:id:paiza:20180110102619p:plain

次に、"Create New App"ボタンを押して、Twitterアプリケーションを作成します。

f:id:paiza:20180110102655p:plain f:id:paiza:20180110102712p:plain

"Name"にプログラムの名前を、"Description"にプログラムの内容を入れます。

"Website"にはWebサイトのURLを入れますが、なければ、とりあえず https://example.com/ などといれておきます。

"Developer Agreement"を確認してチェックしたら、"Create your Twitter application"ボタンでアプリケーションを作成します。

携帯電話の番号を登録していない場合、以下のようなメッセージが表示されます。

f:id:paiza:20180110102738p:plain

この場合、携帯電話番号設定ページ( https://twitter.com/settings/add_phone )で、電話番号を登録し、SMSで送信された認証用コードを入力します。

f:id:paiza:20180110102757p:plain

これでアプリケーションを作成できました。

次に、このアプリケーションのAPIキーを作成します。

作成したアプリケーションを選択して、"Keys and Access Tokens"タブを選択します。

f:id:paiza:20180110104343p:plain f:id:paiza:20180110104354p:plain

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つを利用しますから、メモしておきましょう。

プログラムの作成

それでは、Twitterボットのプログラムを作成していきましょう。

まずは、APIキーの設定をするために、"config.rb"というファイルを作成します。

PaizaCloudでは、ブラウザ上でファイルの作成・編集ができます。

PaizaCloudの画面左側の「新規ファイル」アイコンをクリックしてみましょう。

f:id:paiza:20171218232330p:plain

ファイル名を入力する画面がでてくるので、ファイル名を"config.rb"として、「作成」ボタンを押します。

f:id:paiza:20171218232345p:plain

作成できたら、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)

f:id:paiza:20180110110629p:plain

保存ボタンを押して保存します。

twitter gemを利用してツイートの読み書きをしていきますので、"require 'twitter'"でgemファイルを読み込んでいます。

次に、APIキーを指定してツイートの読み書きをするためのオブジェクトを作成します。

Twitter gemでは、REST API、Streaming APIで別のオブジェクトを使うため、それぞれTwitter::REST::Clientと、Twitter::Streaming::ClientオブジェクトをAPIキーを指定して作成します。

ツイートする

設定ができたので、試しにツイートしてみましょう。

まずは、Rubyを対話的に利用できる"irb"コマンドを使ってみます。

PaizaCloudでは、ブラウザ上で、コマンドを入力するための「ターミナル」を使うことができます。

画面左側の、「ターミナル」のボタンをクリックします。

f:id:paiza:20171213234317p:plain

ターミナルが起動しますので、"irb -r ./config.rb"と、実行するコマンドを入れて改行キー(エンターキー)を押します。

$ irb -r ./config.rb

f:id:paiza:20180110105842p:plain

"irb"が起動しました。それではツイートしてみましょう。ツイートには、updateメソッドを利用します。

@restClient.update("https://paiza.cloud/ を使ってRubyでツイートしてみた!")

f:id:paiza:20180110110242p:plain

ブラウザでTwitterを開いて確認してみましょう。

ツイートできましたね!

f:id:paiza:20180110110420p:plain

RubyTwitterボットを作る

それでは、今度はメンションに返事をしてくれる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のターミナルでRubyTwitterボットを実行してみましょう!

$ ruby bot.rb

f:id:paiza:20180110114713p:plain

ツイッターでメンションを送って確認してみましょう!

f:id:paiza:20180110114822p:plain

ちゃんと返事していますね!RubyTwitterボットが完成です!

なお、PaizaCloudの無料プランでは、一定時間が経つとサーバは停止します。継続的にこのTwitterボットを動かしたい場合は、ベーシックプランへアップデートしてください。

詳しくはこちら https://paiza.cloud

まとめ

PaizaCloudで、RubyTwitterボットを作り、動かしてみました。

Twitterボットは少ないコードで簡単に作れますし、改造も簡単です。どんなリプライにどんな返信をするか、考えながら作るのがおもしろいです。PaizaCloudで作ったTwitterボットは、すぐに公開できるので、いろいろな人に使ってもらえるのも楽しいですね。

ぜひTwitterボットを作ってみてください!

(Twitterボットを作ってみたらpaiza(@paiza_official)まで教えてくれるとうれしいです!)


PaizaCloud」では、環境構築に悩まされることなく、ブラウザだけで簡単にウェブサービスやサーバアプリケーションの開発や公開ができます。 https://paiza.cloud


paizaラーニング」では、未経験者でもブラウザさえあれば、今すぐプログラミングの基礎が動画で学べるレッスンを多数公開しております。

詳しくはこちら

paizaラーニング

そしてpaizaでは、Webサービス開発企業などで求められるコーディング力や、テストケースを想定する力などが問われるプログラミングスキルチェック問題も提供しています。

スキルチェックに挑戦した人は、その結果によってS・A・B・C・D・Eの6段階のランクを取得できます。必要なスキルランクを取得すれば、書類選考なしで企業の求人に応募することも可能です。「自分のプログラミングスキルを客観的に知りたい」「スキルを使って転職したい」という方は、ぜひチャレンジしてみてください。

詳しくはこちら

paizaのスキルチェック

ITプログラマ・エンジニア向け転職・就活・学習サービスのpaiza