既読のフラグの追加
Firestoreで取得したメッセージを既読に設定するために、取得した後に各メッセージのread属性をTrueに更新する処理を追加
import warnings from google.cloud import firestore import datetime import absl.logging # 警告を無視する設定 warnings.filterwarnings("ignore", category=UserWarning, module="google.cloud.firestore_v1.base_collection") # Firestore クライアントの初期化 db = firestore.Client.from_service_account_json("serviceAccountKey.json") # gRPCの警告を抑制 absl.logging.set_verbosity("info") def get_user_messages(user_id): messages_ref = db.collection("messages") now = datetime.datetime.now() # 24時間以内のメッセージを取得するクエリ query = messages_ref.where("user_id", "==", user_id).where("timestamp", ">=", now - datetime.timedelta(days=1)) # 24時間以上前のメッセージを削除するクエリ old_messages_query = messages_ref.where("user_id", "==", user_id).where("timestamp", "<", now - datetime.timedelta(days=1)) # メッセージを取得してリストに格納 user_messages = [] for doc in query.stream(): user_messages.append(doc.to_dict()) # メッセージを既読に設定 doc.reference.update({"read": True}) # 古いメッセージを削除 for doc in old_messages_query.stream(): doc.reference.delete() return user_messages # 特定のユーザーIDを指定してメッセージを取得 user_id = "" messages = get_user_messages(user_id) for message in messages: print(f"メッセージ: {message['text']}, タイムスタンプ: {message['timestamp']}")
以下GPTの解説
メッセージの取得時にそのメッセージをread属性をTrueに設定する処理を追加したことです。
これにより、メッセージを取得すると同時にそれらを既読としてマークし、
次回のクエリではそれらが含まれないようにします。
これは、アプリケーションで未読メッセージを効率的に処理するために有効です。