from pymongo import MongoClient from typing import List, Any from connect_mongo import connect_to_mongo class NewsDatabaseHandler: def __init__(self, uri: str, db_name: str): """ Khởi tạo kết nối MongoDB một lần duy nhất. """ self.client = MongoClient(uri) self.db = self.client[db_name] def get_all(self, collection_name: str) -> List[dict]: """ Lấy tất cả bản ghi từ collection. """ collection = self.db[collection_name] return list(collection.find()) def find_by_category(self, collection_name: str, category: str) -> List[dict]: """ Tìm các bản ghi theo category. """ collection = self.db[collection_name] query = {"category": category} return list(collection.find(query)) def save_to_mongo(self, data: List[dict], collection_name: str): """ Lưu dữ liệu vào MongoDB. """ collection = self.db[collection_name] collection.insert_many(data) def close(self): """ Đóng kết nối MongoDB. """ self.client.close() from datetime import datetime def find_key(): db_name = "news" collection_name = "articles" collection = connect_to_mongo(db_name, collection_name) # Tìm tất cả các bài viết có "name" chứa từ "Campuchia" và thuộc về TuoiTre hoặc VnExpress vnexpress_or_tuoitre_news = collection.find({ "$in": [ {"VnExpress.name": {"$regex": "Campuchia", "$options": "i"}} # Tìm kiếm trong VnExpres # Tìm kiếm trong TuoiTre ] }) # In ra các kết quả tìm được for result in vnexpress_or_tuoitre_news: # Nếu bạn chỉ muốn thấy bài viết chứa từ "Campuchia" trong tên: if "Campuchia" in result.get('VnExpress', [{}])[0].get('name', '') or "Campuchia" in result.get('TuoiTre', [{}])[0].get('name', ''): print(result) # Gọi hàm tìm kiếm # find_key() def get_vnexpress_news(category): db_name = "news" collection_name = "articles" collection = connect_to_mongo(db_name, collection_name) # # Lấy thời gian hiện tại # today = datetime.now().strftime("%Y-%m-%d") # start_time = f"{today} 21:40:00" # print(f"Start time: {start_time}") # # Truy vấn MongoDB # vnexpress_news = collection.find({ # "category": category, # "VnExpress.time": {"$gte": start_time} # Điều kiện so sánh thời gian # }) # filtered_news = [] # # Duyệt qua các bài báo và lọc ra các bài hợp lệ # for result in vnexpress_news: # if "VnExpress" in result: # for news in result["VnExpress"]: # # Lọc bỏ các mục trống hoặc không có dữ liệu # if news and "time" in news: # print(f"Checking time for news: {news['time']}") # if news["time"] >= start_time: # filtered_news.append(news) # return filtered_news # Gọi hàm và in kết quả # news = get_vnexpress_news("VnExpress") # if not news: # print("No news found matching the criteria.") # else: # for article in news: # print(f"Found article: {article}") # Cấu hình kết nối db_name = "test" collection_name = "articles" collection = connect_to_mongo(db_name, collection_name) import datetime # Tính thời gian 1h30 trước từ thời điểm hiện tại time_limit = datetime.datetime.now() - datetime.timedelta(minutes=20) time_limit = time_limit.replace(tzinfo=datetime.timezone.utc) print(time_limit) query = { "category": "VnExpress", "time": {"$gte": time_limit} } results = collection.find(query) for result in results: print("Bản ghi:") print(result) print("\n")