LINEbot で特定のユーザーのメッセージの取得

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 データベースを初期化する必要があります

とのこと

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です