15
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Last updated at Posted at 2020-06-12

はじめに

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

image.png

system.png

ローカル環境

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?