LoginSignup
0
0

More than 3 years have passed since last update.

HerokuのPostgreSQLの使い方【LineBot辺】

Last updated at Posted at 2019-06-19

HerokuのPostgreSQLの使い方

Heroku上でPostgreSQLを使う場合、Pythonの場合はpsycopg2を使えば良いようだ。
なお、HerokuにPostgreSQLを追加した時点で、環境変数にDATABASE_URLという名称でアクセス用のアドレスが追加される。
アドレスは長い周期で変わるからのようだ。

なので、前回わざわざユーザーを作っていたが使用する必要がないようだ。
今回自分が作ろうとしているラインボットなど、SQLの返答の行数がたかが知れている場合、次のように同期やメモリなどを考えずに取ってこさせれば良い。


DATABASE_URL = os.environ['DATABASE_URL']
conn = psycopg2.connect(DATABASE_URL, sslmode='require')
cur = conn.cursor()
cur.execute("なにか適当なSQL文")
data_list = cer.fetchall()

自分の場合は、「3人以上の軽いゲームを教えて」というような日本語とテーブルゲームのテーブルからSQL文を作成し、メッセージを送り返すようなプログラムを作った。
linebotについても初めてだったので、とりあえず一番手軽そうな資料を参考にGitHubからサンプルを回収し、クラスを新しく作って返信用のクラスから回答を取ってくるようにさせた。
具体的には、下記のように「GamebarResponce」という名前のクラスを作って、メッセージを投げ込んだらゲームを探して返信するようにした。

main.py(抜粋)
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    gm = GamebarResponce()
    gm.connect_database()

    retstr = gm.check_text(event.message.text) + "ゲームを探しました。\n"
    retstr += gm.get_game_from_message()

    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text=retstr))

ソフト作成時の注意点

ソフトの作成・アップロード時には注意点がいくつかある。
1. メモリサイズは限られる。1GBを超えたりすると、強制的にアプリが落とされる。日本語解析のライブラリなど、大規模なものは入れることができないため注意だ。
2. GitHubから落としたサンプルは、ライブラリの記述やheroku乗で動かす際のファイルが欠落している。自分の場合、次のようにrequirements.txtを書き換え、Procfileファイルを作成した

requirements.txt
requests >= 2.0
future
psycopg2-binary
Flask
gunicorn
mojimoji
kanjize

なお、本プログラムの作成には漢数字・ローマ数字変更ライブラリ「kanjize」と、全角・半角変換用ライブラリ「mojimoji」を利用させていただきました。
正規表現で文章をチェックする前の下準備に利用させて頂いています。

Procfile
web: gunicorn main:app --log-file -

動作チェック

そして作られたアカウントにメッセージを送ってみた結果が下記の画像。
画面例.jpg
一部間抜けなミスがあるが、現在は修正済。レスポンスも気になるような遅さではないのでこれで一旦完成とした。
あとはデータを追加し次第公開予定。

おわりに

適当な日曜大工レベルのアプリの場合、ツボを押さえれば簡単に公開までこぎつけることができるようだ。
自分の場合は正規表現で間に合うような日本語の解析に、わざわざ文章解析用のライブラリを使ってしまい、リソースを無駄にした上に遠回りしてしまった。
当たり前だけどリソースは予め確認する必要がある。

次は何を作ろうかな。

0
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
0
0