見出し画像

huggingfaceでStreamlitを立ち上げてLineBotを作る

はじめに

この記事では、Hugging FaceのStreamlitを使用してLINE Botを構築する方法を解説します。
まず、必要なライブラリをインポートし、設定ファイルを作成して、その後にメインのBotプログラムを実行する流れになります。


こちらのサイトもおすすめ


Streamlitのセットアップ

StreamlitはPythonで書かれたWebアプリケーションを簡単に作ることができるフレームワークです。以下のコードではStreamlitを使用して設定ファイルを作成するUIを提供しています。



import streamlit as st
import json
import subprocess

# タイトルの設定
st.title("Settings Configuration")

上記のコードはStreamlitをインポートし、アプリケーションのタイトルを設定しています。

設定ファイルのパスの指定

次に、設定ファイルのパスを指定します。


# 設定ファイルのパス
config_file_path = 'settings.json'

ここでは、設定を保存するJSONファイルの名前を`settings.json`としています。

設定入力用のフォーム作成

ユーザーが設定情報を入力できるようにフォームを作成します。


# 設定入力用のフォームを作成
with st.form("settings_form"):
    st.write("Please enter the configuration settings:")
    # ここで設定項目を入力するためのテキストボックスを設定しています。
    ...

フォーム内で、ngrokのauthtoken、LINE Botのアクセストークン、チャンネルシークレットを入力するためのテキスト入力フィールドを提供しています。

設定の保存

フォームが送信されたら、入力された設定を`settings.json`として保存します。


# フォームが送信された場合、入力された設定をJSONファイルとして保存
    if submitted:
        settings = {
            "NGROK_AUTHTOKEN": ngrok_authtoken,
            "LINE_ACCESS_TOKEN": line_access_token,
            "LINE_CHANNEL_SECRET": line_channel_secret
        }
        with open(config_file_path, 'w') as config_file:
            json.dump(settings, config_file, indent=4)

        st.success("Settings saved successfully!")

メインプログラムの実行

最後に、設定が保存された後に`main.py`をサブプロセスとして起動します。


# `main.py`をサブプロセスとして起動
        subprocess.run(["python", "main.py"])

全体コード



import streamlit as st
import json
import subprocess

# タイトルの設定
st.title("Settings Configuration")

# 設定ファイルのパス
config_file_path = 'settings.json'

# 設定入力用のフォームを作成
with st.form("settings_form"):
    st.write("Please enter the configuration settings:")
    ngrok_authtoken = st.text_input("NGROK_AUTHTOKEN")
    line_access_token = st.text_input("LINE_ACCESS_TOKEN")
    line_channel_secret = st.text_input("LINE_CHANNEL_SECRET")
    submitted = st.form_submit_button("Submit")

    # フォームが送信された場合、入力された設定をJSONファイルとして保存
    if submitted:
        settings = {
            "NGROK_AUTHTOKEN": ngrok_authtoken,
            "LINE_ACCESS_TOKEN": line_access_token,
            "LINE_CHANNEL_SECRET": line_channel_secret
        }
        with open(config_file_path, 'w') as config_file:
            json.dump(settings, config_file, indent=4)

        st.success("Settings saved successfully!")
        # `main.py`をサブプロセスとして起動
        subprocess.run(["python", "main.py"])

main.pyの解説

`main.py`では、Botのメインロジックが記述されています。

`main.py`部分の解説はこちら。



# main.py
# 必要なクラスを他のファイルからインポートします。
from config_loader import ConfigLoader
from ngrok_manager import NgrokManager
from line_bot import LineBot
# from youri_bot import YouriBot

# このスクリプトが直接実行された時だけ、以下のコードが実行されます。
if __name__ == '__main__':
    # 設定ファイル 'settings.json' を読み込むために ConfigLoader クラスを使用します。
    config_loader = ConfigLoader('settings.json')

    # 設定ファイルから読み込んだ設定を取得します。
    settings = config_loader.settings

    # Ngrokを管理するためのクラスをインスタンス化し、ngrokのAuthtokenを渡します。
    ngrok_manager = NgrokManager(settings['NGROK_AUTHTOKEN'])

    # ngrokによって生成されたWebhook URLを出力します。
    print(f"Webhook URL: {ngrok_manager.webhook_url}")

    # LINE Botのインスタンスを作成します。これには、設定から取得したアクセストークンと
    # チャネルシークレットを渡します。
    bot = LineBot(settings['LINE_ACCESS_TOKEN'], settings['LINE_CHANNEL_SECRET'])
    # bot = YouriBot(settings['LINE_ACCESS_TOKEN'], settings['LINE_CHANNEL_SECRET'])

    # Flaskアプリケーションを作成します。
    app = bot.create_app()

    # アプリケーションを起動します。これにより、Webサーバーが起動し、
    # LINEからのリクエストを待機する状態になります。
    app.run()

最終的に、Flaskを使用してWebサーバーを起動し、LINEからのリクエストを待機する状態になります。

デモサイト


リポジトリ


この記事が気に入ったらサポートをしてみませんか?