LINEbot で特定のユーザーのメッセージの取得
LINEbotで特定のユーザのメッセージの取得をする
webhook には firebase第一世代を使用
使用しているのは node.js の18
この構成で LINEbot で特定のユーザーのメッセージの取得する python コード
これを行うには
Firebase プロジェクトが設定されており、
Firestore のアクセスに必要なクレデンシャル JSON ファイルがある
google-cloud-firestore パッケージがインストールされている
の条件を満たす必要がある
Firebase プロジェクトで
Firestore のアクセスに必要なクレデンシャル JSON ファイルが設定されているかを確認
まず
Firebase Console にアクセスし、対象のプロジェクトを選択
左側のメニューから 「プロジェクトの設定」 (Project settings) をクリック
「サービスアカウント」 (Service accounts) タブを開く
Admin SDK 構成スニペット
があるので調べる
Admin SDK 構成スニペットにはどれを選べば良い?
webhook には firebase第一世代を使用し 使用しているのは node.js の18の場合は?
で
GPTで調べると
Firebase 第一世代の webhook に Node.js 18 を使用している場合、
Firestore の管理者権限でアクセスするには、Admin SDK 構成スニペットとして Node.js を選択
となるので
Node.js のままで
var admin = require("firebase-admin"); var serviceAccount = require("path/to/serviceAccountKey.json"); admin.initializeApp({ credential: admin.credential.cert(serviceAccount) });
「新しい秘密鍵の生成」をクリックして、サービスアカウントの JSON クレデンシャルをダウンロード
ファイルをプロジェクトにコピーする
とりあえずJSONファイルは取得できたので
次に
pip install google-cloud-firestore
で
firesroreのセットアップ
しかしよく考えてみれば
node.jsは firebaseで動かしているが
m1macbookAir では動かしていない
違いがわからないため再度質問
Admin SDK 構成スニペットにはどれを選べば良い?
webhook には firebase第一世代を使用し 使用しているのは node.js の18の場合は?
の答えは node.js だった。
この場合動かす環境は firebaseを想定しているか?
それともm1macbookAir で node.js を想定しているのか?
答えは
この場合、**動かす環境は Firebase を想定**しています。
具体的には、Node.js 18 を使って Firebase Gen 1 環境上で webhook が動作する構成です。
したがって、Node.js 用の Firebase Admin SDK 構成スニペットを選択することになります。
この Node.js のスニペットは、Firebase サーバー側で
webhook として動作する Node.js 環境向けに設定されており、
M1 MacBook Air 上ではなく、
**Firebase のサーバー上で稼働する Node.js のコードに適用**されるものです。
一方で、**Python は MacBook Air 上で動作し、
Firestore からメッセージを取得するためのコード**として使われます。
そのため、Python の Firebase Admin SDK を MacBook Air 上で利用して
Firestore にアクセスする構成になります。
となった
このため再度Admin SDK 構成スニペットをpythonで取得する
import firebase_admin from firebase_admin import credentials cred = credentials.Certificate("path/to/serviceAccountKey.json") firebase_admin.initialize_app(cred)
ダウンロードできたら
でファイルをコピーする
なおこの構成スニペットで表示されているコードは
Python 用の Firebase Admin SDK を使用して、Firebase プロジェクトに接続するための初期設定を行うもの
このスクリプトによって、Python 環境から Firebase にアクセスできるようになる
serviceAccountKey.json
へファイル名を変更
これで
vim access.python
として
import firebase_admin from firebase_admin import credentials cred = credentials.Certificate("serviceAccountKey.json") firebase_admin.initialize_app(cred)
として保存
実行したら
python access.json Traceback (most recent call last): File "/Users/snowpool/aw10s/linebot/access.json", line 1, in <module> import firebase_admin ModuleNotFoundError: No module named 'firebase_admin'
となった
pip install firebase-admin
でインストール
今度は実行しても何も表示されない
接続が正常に行われているか確認するために、
Firestore のデータベースからデータを取得したり、簡単なメッセージを表示させる
以下のようにして Firestore からデータを取得
import firebase_admin from firebase_admin import credentials, firestore # サービスアカウント JSON ファイルのパスに置き換える cred = credentials.Certificate("path/to/serviceAccountKey.json") firebase_admin.initialize_app(cred) # Firestore クライアントの取得 db = firestore.client() # Firestore の 'messages' コレクションからデータを取得 def get_messages(): messages_ref = db.collection("messages") docs = messages_ref.stream() for doc in docs: print(f"{doc.id} => {doc.to_dict()}") # 動作確認のためにメッセージを取得 get_messages()
これをcheck.py
として実行たがエラー
原因は
Cloud Firestore API がプロジェクト「voicelinebot」で有効になっていないために発生しています。
Firestore API を有効にするがエラー
プロジェクトに Cloud Firestore データベースがまだ存在しないために発生しています。
Firestore データベースを初期化する必要があります
とのこと