2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Twitter_bot作成②

Posted at

前回記事: https://qiita.com/takueha/items/621db4c41389bd38322a

前回までで簡単な環境構築までは完了しました。

今回は本格的な開発に入っていこうかと思います。

###本格的な実装を始める前に、実装手順をまとめてみた

今回のBotの仕様をどのようにするか簡単にまとめておこうかと思います。

今回のBotは自分がツイートした内容の中で一定以上のいいねを得たものだけを自動でデータベースに保存し、そのツイートを任意のタイミングで自動ツイートする機能をつける予定です。

必要なことをまとめると‥

  1. ツイートを保存するデータベースの作成
  2. ツイートをデータベースに自動保存する機能の実装
  3. データベースから保存したツイートを自動ツイートする機能の実装

こんな感じで進めて行けばうまくいくのではないかと考えています。

この進め方で正しいのかどうかは不明ですが、大筋はこのように進めていき、間違っていたらその都度修正をしていこうと思います。

では進めていきます。

###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は完了です。

あとはデータベースにあるデータから自動でツイートする機能を実装できれば、ひとまず完成です。

実装進んだらまた記事を書くので、よければご覧ください。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?