Spaces:
Sleeping
Sleeping
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") |