ムーのしょ〜もない様でしょ〜もなくもないブログ

プログラミング未経験だけど、エンジニアになりたい、IT関係の仕事がしたい方向けに情報を発信しています!あっ!けどプログラミング以外にも皆さんに有益になる様な情報も発信しますよー!

Ruby On RailsでherokuとLINE Message APIで名言ボットを作る

学ぶ事がいっぱいでしっかりアウトプットをしながら進めて行きたかったから

ボリュームがあるので小分けにしてアウトプットしてます

この記事の以前の進捗はこの記事を参照

muuuuukun.hatenablog.com

早めにアウトプットしたのでタスク名とか

アクション名とか細かな設定は変更してます。


10分間隔で通知が出来る様になったから次は

DBに名言と名言を発信した方の写真を保存をして

保存したのをランダムで取得して出力をしていくまでのメモ!

データベースを事前に作成する


$ rails db:create

development.sqlite3とtest.sqlite3が作成される

モデルクラスを作成する

$ rails g model Post content:text image:text

マイグレーションの実行

$ rails db:migrate

データベース用コンソールを起動

$ rails dbconsole

テーブルが作成されていることを確認

sqlite> .table

テーブル構造を確認

sqlite> .schema テーブル名

引数を省略するとデータベースにある全てのテーブルを確認できる


db/seeds.rbに初期データを追加する

Post.create(:id => 1, :content => 'しっかりと

準備もしていないのに

目標を語る資格はない。

by イチロー', :image => 'https://trend-comment.com/wp-content/uploads/2013/08/A5A4A5C1A5EDA1BCA3B2.jpg')
Post.create(:id => 2, :content => 'やってみて

「ダメだ」とわかったことと

はじめから

「ダメだ」と言われたことは

違います。

by イチロー', :image => 'https://trend-comment.com/wp-content/uploads/2013/08/A5A4A5C1A5EDA1BCA3B2.jpg')

この時名言を1行で書くとlineで送られてくる時に

文がバラけた感じで送られてくるからこの様に記述した

けどもっと良い方法があるかもしれないからもっと

DBの勉強をしなくては!

そしてシードデータに投入する

$ rake db:seed

これでローカルの(SQLite3)に初期データを保存出来た!


webhookcontrollerを編集

meigendayoアクションでcontentカラムとimageカラムを

取得して、それをランダムに出力出来る様に記述

そしてhashで、DBから取り出したら配列になっているから

LINEドキュメントをのコードを参考にして、contentとimageを振り分ける

class WebhookController < ApplicationController
  require 'line/bot'

  def meigendayo
    number = (1..229).to_a
    number2 = number.sample
    meigen = Post.pluck(:content, :image)
    meigen2 = meigen[number2]
    hash = {"1" => meigen2[0], "2" => meigen2[1]}

    message = {
              "type": "text",
              "text": hash["1"]
            },
            {
            "type": "image",
            "originalContentUrl": hash["2"],
            "previewImageUrl": hash["2"]
    }
    client = Line::Bot::Client.new { |config|
      config.channel_secret = ENV["LINE_CHANNEL_SECRET"]
      config.channel_token = ENV["LINE_CHANNEL_TOKEN"]
    }
    response = client.push_message(ENV["LINE_USER_ID"], message)
  end
end

herokuにDBのテーブルを作る

訳あってローカルでSQLite3で本番でpostgresになっちゃったから

次は本番のpostgresにテーブルを作る

めんどくさい事になったけどDBを二つ使う事により

DBの良い勉強になったし、理解も深められたから

結果二つのDBで作業をして良かったって思う!

まずはマイグレーションの実行

$ heroku run rake db:migrate

そしてseedsファイルに記載されている情報をDBに追加

$ heroku run rake db:seed

そしてDBの確認

$ heroku pg:psql -a herokuのアプリ名

テーブルの確認

DATABASE=> select * from posts;

これでズラーッとDBに保存された内容が出たら成功!!

試しに

$ heroku run rake reminder_task:meigen

をしたらしっかりと名言と写真が送られてきました!

そして

$ git add .
$ git commit -m "~~~"
$ git push heroku master

こんな感じでLINEから名言と写真が送られてきました(☝︎ ՞ਊ ՞)☝︎

f:id:muuuuukun:20181229150200p:plain