前回記事: https://qiita.com/takueha/items/621db4c41389bd38322a
前回までで簡単な環境構築までは完了しました。
今回は本格的な開発に入っていこうかと思います。
###本格的な実装を始める前に、実装手順をまとめてみた
今回のBotの仕様をどのようにするか簡単にまとめておこうかと思います。
今回のBotは自分がツイートした内容の中で一定以上のいいねを得たものだけを自動でデータベースに保存し、そのツイートを任意のタイミングで自動ツイートする機能をつける予定です。
必要なことをまとめると‥
- ツイートを保存するデータベースの作成
- ツイートをデータベースに自動保存する機能の実装
- データベースから保存したツイートを自動ツイートする機能の実装
こんな感じで進めて行けばうまくいくのではないかと考えています。
この進め方で正しいのかどうかは不明ですが、大筋はこのように進めていき、間違っていたらその都度修正をしていこうと思います。
では進めていきます。
###config/application.rbの修正
以下のように修正しました。
require_relative 'boot'
require 'rails/all'
# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups)
module TwitterBot1
中略
config.generators do |g|
g.javascripts false
g.stylesheets false
g.helper false
g.test_framework false
g.template_engine false
end
config.api_only =true
end
end
上記のように修正し、JavaScriptなどの余計なファイルを作成しないように変更しました。
###必要なgemの導入
gem "twitter"
gem "active_model_serializer"
上記を導入
###Tweetモデルの作成
$ bundle exec rails g model Tweet body:text
上記のコマンドでbodyカラムを持ったtweetmodelを作成しました。
その後
$ bundle exec rails db:migarate
でmigrationを進めました。
###コントローラーの作成
$ bundle exec rails g contorller Tweets
上記のコマンドでTweetsコントローラーの作成を行いました。
###ルーティングの調整
routes.rbファイルに以下の記述を追加
root to: 'tweets#callback'
###コントローラーの中身の調整
tweets_controller.rbを以下のように修正
class TweetsController < ApplicationController
require 'twitter'
before_action :twitter_client
def callback
#ツイート一覧を取得
@client.home_timeline({ count: 200 }).each do |tweet|
#ツイートのいいねの数が1以上の時
if tweet.favorite_count >= 1
#そのツイートを保存する
Tweet.create(body: tweet.text)
end
end
#このまま放っておくとエラーになってしまうのでjson形式で保存したツイート一覧を取得する
tweets = Tweet.all
render json: tweets, each_serializer: TweetSerializer
end
def twitter_client
@client = Twitter::REST::Client.new do |config|
config.consumer_key = ""
config.consumer_secret = ""
config.access_token = ""
config.access_token_secret = ""
end
end
end
callbackの処理でデータベースにツイートを保存できるような機能を実装しました。
これで実装手順の1〜2は完了です。
あとはデータベースにあるデータから自動でツイートする機能を実装できれば、ひとまず完成です。
実装進んだらまた記事を書くので、よければご覧ください。