既読のフラグの追加
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に設定する処理を追加したことです。
これにより、メッセージを取得すると同時にそれらを既読としてマークし、
次回のクエリではそれらが含まれないようにします。
これは、アプリケーションで未読メッセージを効率的に処理するために有効です。