5
0

More than 1 year has passed since last update.

Google Colaboratoryを使ってFastAPIでLINE Botを動作させる

Posted at

はじめに

学生向けハッカソン/ワークショップの題材にLINEBotをつかってましたが、Heroku無料枠廃止をうけて環境見直す機会に、サンプルをリライトしようということでFastAPI+GoogleColaboratory版を作成します。

  • ハッカソンやちょっとしたプロトタイプ作成向けにクレジットカード登録不要で無料で使える環境を
  • いままであまり触ってないけど今後伸びそうなFastAPIを使う
  • LINEDevelopersの登録方法や使い方、ngrokの使い方については割愛

できあがり

送られたメッセージをそのまま返すエコーbotです。自分のドライブにコピーして、トークンとシークレットを設定して使ってください。

# ngrokのauthtoken
NGROK_AUTHTOKEN = '入力して下さい'

# LINE Bot のチャンネルアクセストークン
LINEBOT_ACCESS_TOKEN = '入力して下さい'

# LINE Bot のチャンネルシークレット
LINEBOT_SECRET = '入力して下さい'

いくつか説明

ngrok

最初に起動したらあとはそのままでOK。
無料の場合は張れるトンネルがひとつだけなので、トンネルを切断したりurlを変更したくなったら、ランタイムをいったん終了してください。
またブラウザから閲覧するとき、初回は確認画面が挟まれるのでVisitSiteで画面へ移動してください。

!pip install pyngrok
!ngrok authtoken $NGROK_AUTHTOKEN

from pyngrok import ngrok
from pyngrok.conf import PyngrokConfig
import os

os.system('kill -9 $(pgrep ngrok)')
ngrok_tunnel = ngrok.connect(addr='127.0.0.1:8000', pyngrok_config=PyngrokConfig(start_new_session=True))
print (ngrok_tunnel)

uvicorn

先にngrokを起動して、後からuvicornの起動でOK。ngrokのトンネルの設定とポート番号をあわせてください(今回の例では8000)。
セルがずっと実行中になるので、終了する場合は選択して実行を停止してください。

!pip install uvicorn nest_asyncio

import uvicorn
import nest_asyncio

# 設定や動作確認で使用するURLをここで表示しておく
print('public_url : ' + ngrok_tunnel.public_url + '/')
print('health_check_url : ' + ngrok_tunnel.public_url + '/health')
print('doc_url : ' + ngrok_tunnel.public_url + '/docs')

# サーバ起動
nest_asyncio.apply()
uvicorn.run(app, port=8000)

ここまでの感想

  • コード量が少ないのはたいへん便利
  • FastAPIのドキュメント自動生成も便利

今後の予定

  • uvicornからgunicornへ変更
  • databaseがわりのgooglespreadsheet連携サンプル
  • 適当な外部apiの利用サンプル

参考記事

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