LoginSignup
15
14

Heroku+Flask+PostgreSQL(Heroku Postgres)でガラル地方のポケモンのタイプや強さを教えてくれるLINE bot作った

Last updated at Posted at 2020-06-12

はじめに

 タイトル通りですが、ガラル地方(ソード・シールド)に登場するポケモンの情報を教えてくれるLINE bot作ったので簡単にまとめたいと思います。以下、画面イメージです。

image.png

system.png

GitHub Repo

ローカル環境

 pipenvを使って以下のPipfileから必要なライブラリをインストール。なぜかpsycopg2が正常にインストールできないため、psycopg2-binaryを入れています。(この辺りの原因分かっていません。)

[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]

[packages]
flask = "==1.1.2"
line-bot-sdk = "==1.16.0"
sqlalchemy = "==1.3.17"
psycopg2-binary = "==2.8.5"

[requires]
python_version = "3.8"

LINE API側の設定

  • (大体の人は持ってると思いますが)前提としてLINEアカウントが必要になります。アカウントを既に持ってる方は[LINE Developers]からAPI利用の登録をしてください。
  • 登録後に新規チャネルを作成します。
  • チャンネルを追加したら、[チャネル基本設定]->[LINE Official Account Manager]->[応答設定タブ]から、応答メッセージ OFF(ONでも良いけど一々デフォルトのメッセージが挟まれるとちょっと微妙)、Webhook ONと設定します。
  • チャネル基本設定にあるチャネルシークレット、及びMessaging API設定にあるチャネルアクセストークンを確認します。これは後々、Heroku側で環境変数の設定をする際に必要となります。

(こちらはHerokuでの作業後に必要)

  • Messaging API設定からWebhook設定にいき、Webhook URLに、https://{アプリ名}.herokuapp.com/callbackを入力。

Heroku側の設定

  • [Heroku]に登録してください。
  • 必要なコマンドをbrewでインストールします。
  • 下記コマンドにてログイン。
  • 下記コマンドにて環境変数を設定。
$ brew install heroku
$ brew install postgresql
$ heroku login
$ heroku config:set LINE_CHANNEL_ACCESS_TOKEN="***********" --app {アプリ名}
$ heroku config:set LINE_CHANNEL_SECRET="***********" --app {アプリ名}

PostgreSQLの用意

  • herokuにログインした状況で空のDBを作成します。
  • ターミナルからDBに接続します。
  • DBのタイムゾーンを変更
  • 良い感じのCSVデータをKaggleからダウンロードしてきます。
    • Kaggleですが、結構ポケモンのデータが充実してます。(さすが世界的コンテンツ)
  • tableを作成します。(下記SQL文は一例です。)
  • CSVデータをDBにコピーします。下記のwith csv headerはCSVのヘッダーを無視して取り込むためです。必要に応じて変えていってください。
$ heroku addons:create heroku-postgresql:hobby-dev -a {アプリ名}
$ heroku pg:psql -a {アプリ名}

# 接続開始、テーブルcreate
app-name::DATABASE=> alter database {データベース名} set timezone = 'Asia/Tokyo';
app-name::DATABASE=> create table pokemon_status(
app-name::DATABASE=> id integer not null,
...
...
app-name::DATABASE=> type2 text,
app-name::DATABASE=> primary key (id));

# ローカルのCSVをDBへコピー
\copy pokemon_status from '{ファイル名}' with csv header;

こんな感じで登録されてるかと思います。
スクリーンショット 2020-06-13 12.44.55.png

各種ファイル

runtime.txt

Pythonのバージョンを記載します。

python-3.8.1

requirements.txt

 サーバー側で必要になるライブラリを記載します。

Flask==1.1.2
line-bot-sdk==1.16.0
psycopg2==2.8.5

Procfile

 Herokuで必要になるファイルで、プログラムの実行方法を記載します。

web: python main.py

おわりに

 PS5楽しみ!!

15
14
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
15
14