RubyをつかってTwitterの翻訳Botを作ってみる
はじめに
TwitterのBotに興味があったので調べてみました。それでRailsにも使いたいなという感じでRubyでやりました。
どんなBotを作ろうかというもんでまあ前使った翻訳Botでも使って英語→日本語への翻訳をするBotでもあればおもしろいなってことでやってみました。
Twitter Developersからキーを取得
まず、下記サイトからAPIキーを取得します。apps.twitter.com
Twitterアカウントを持っていない人は作ってからの取得になります。
BotからのTweetはこのアカウントからのTweetになるのでメインでアカウントを持っていてもBot用に作ったほうが良いかと思います。
・Create New Appから新規Appの作成
・各プロパティを埋める(WebsiteとCallbackはなんでもいいけどなんでもいい人は下のローカルでも書いとけばおk)
Website : http://127.0.0.1:3000
Callback URI's : http://127.0.0.1:3000/auth/twitter
・Keys and Access TokensからAccess Tokenを取得しメモっておく
みんなの自動翻訳APIからキーを取得
続いて、翻訳APIです。今回は、みんなの自動翻訳TexTraというものを使用します。商用では使用できませんが、簡単に使用できるのでお手軽です。
みんなの自動翻訳@TexTra®
ここのサイトから英語→日本語のキーを取得します。
Gemをインストールする
必要なGemをインストールします。gem 'twitter' gem 'oauth' gem 'json'
使うGemは3つです。Twitter用にTwitterと翻訳APIの認証用にoauthとレスポンスのパース用にjsonをインストールします。
$ bundle install
ここからコードを書いていきます。
Configを書く
キーとトークンをconfig.rbを作成して書いていきます。config.rb
require 'twitter' require 'oauth' config = { consumer_key: "TwitterのAPIキー", consumer_secret: "Twitterのシークレットキー", access_token: "Twitterのアクセストークン", access_token_secret: "Twitterのシークレットトークン", } @restClient = Twitter::REST::Client.new(config) @streamingClient=Twitter::Streaming::Client.new(config) translate_key="翻訳APIのAPIキー" translate_secret="翻訳APIのシークレットキー" url="https://mt-auto-minhon-mlt.ucri.jgn-x.jp/api/mt/generalN_en_ja/" name="翻訳APIのユーザー名" consumer = OAuth::Consumer.new(translate_key, translate_secret) endpoint = OAuth::AccessToken.new(consumer)
これでそれぞれのキー、トークンを書いて、各APIで使用するインスタンスを作成しました。
本文を書く
さて、本文を書きます。translate.rb
require 'twitter' require 'oauth' require 'json' require './config' #タイムゾーンの指定 ENV['TZ']='JST-9' #今回は説明のためにmtryoさんとする username="送信したいユーザー名(@抜きで書いてます)" #mtryoさんのTweetを見張る @streamingClient.user do |tweet| #もしmtryoさんの「Translate:」を含むTweetを見つけたら if tweet.class==Twitter::Tweet && tweet.text.include?("Translate:") && !tweet.in_reply_to_status_id puts "Found tweet: #{tweet}" #Tweetの本文を翻訳APIにかける response = endpoint.post(url,{key: consumer_key, type: 'json', name: name, text: tweet.text}) #レスポンスをパースする result = JSON.parse(response.body) #username宛にリプライする。 @restClient.update("@#{username} #{result['resultset']['result']['text']}", in_reply_to_status_id: tweet.id) end end
今回は「Translate:」を含むTweetをしたときに翻訳してリプライすることにしました。
include?の部分を変えればキーワードは変更できます。
実行する
最後に実行すれば終わりです。$ ruby translate.rb
お疲れ様でーす!
参考サイト
NICT の自動翻訳 API を Rails で使うTwitterボット(Twitter Bot)の作り方(Ruby編) - サーバ設定不要のPaizaCloud上でTwitterボットをRubyで作る - paiza開発日誌