Skip to main content
Glama

QQ Channel Data Collector

by elleys
directory_manager.py4.97 kB
#!/usr/bin/env python3 """ 目录管理器 - 统一处理新的目录命名规范 """ import os from pathlib import Path from datetime import datetime from typing import Optional, Tuple class DirectoryManager: """目录管理器,统一处理新的目录命名规范""" def __init__(self, base_dir: str = "/home/guocc/GitHub/MCP/QQChannelMCP/data/dayupdate"): self.base_dir = Path(base_dir) self.base_dir.mkdir(parents=True, exist_ok=True) def get_today_directory(self, posts_count: int = None) -> Path: """ 获取今天的目录路径 Args: posts_count: 帖子数量,如果为None则自动查找 Returns: 今天的目录路径 """ today = datetime.now() date_str = today.strftime("%Y-%m-%d") if posts_count is None: # 自动查找今天的目录 for dir_path in self.base_dir.iterdir(): if dir_path.is_dir() and date_str in dir_path.name: return dir_path # 创建新的目录名 if posts_count is None: posts_count = 10 # 默认值 dir_name = f"{posts_count}_posts_{date_str}" today_dir = self.base_dir / dir_name # 创建目录结构 today_dir.mkdir(exist_ok=True) (today_dir / "images").mkdir(exist_ok=True) (today_dir / "videos").mkdir(exist_ok=True) (today_dir / "gifs").mkdir(exist_ok=True) (today_dir / "unknown").mkdir(exist_ok=True) return today_dir def get_media_subdirectory(self, media_type: str, posts_count: int = None) -> Path: """ 获取指定媒体类型的子目录 Args: media_type: 媒体类型 (images, videos, gifs, unknown) posts_count: 帖子数量 Returns: 媒体子目录路径 """ today_dir = self.get_today_directory(posts_count) media_dir = today_dir / media_type media_dir.mkdir(exist_ok=True) return media_dir def find_latest_directory(self) -> Optional[Path]: """查找最新的目录""" if not self.base_dir.exists(): return None dirs = [d for d in self.base_dir.iterdir() if d.is_dir()] if not dirs: return None # 按修改时间排序,返回最新的 return max(dirs, key=lambda x: x.stat().st_mtime) def get_directory_info(self, dir_path: Path) -> dict: """获取目录信息""" if not dir_path.exists(): return {"exists": False} info = { "exists": True, "name": dir_path.name, "path": str(dir_path), "created": datetime.fromtimestamp(dir_path.stat().st_ctime), "modified": datetime.fromtimestamp(dir_path.stat().st_mtime), "media_counts": {} } # 统计各种媒体类型 for media_type in ["images", "videos", "gifs", "unknown"]: media_path = dir_path / media_type if media_path.exists(): info["media_counts"][media_type] = len(list(media_path.glob("*"))) else: info["media_counts"][media_type] = 0 return info def cleanup_old_directories(self, keep_days: int = 7): """清理旧目录,保留指定天数""" today = datetime.now() for dir_path in self.base_dir.iterdir(): if not dir_path.is_dir(): continue try: # 从目录名提取日期 if "_posts_" in dir_path.name: date_part = dir_path.name.split("_posts_")[-1] dir_date = datetime.strptime(date_part, "%Y-%m-%d") # 计算天数差 days_old = (today - dir_date).days if days_old > keep_days: import shutil shutil.rmtree(dir_path) print(f"🗑️ 清理旧目录: {dir_path.name} (已保存 {days_old} 天)") except Exception as e: print(f"⚠️ 处理目录 {dir_path.name} 时出错: {e}") # 全局实例 directory_manager = DirectoryManager() def get_today_directory(posts_count: int = None) -> Path: """便捷函数:获取今天的目录""" return directory_manager.get_today_directory(posts_count) def get_media_subdirectory(media_type: str, posts_count: int = None) -> Path: """便捷函数:获取媒体子目录""" return directory_manager.get_media_subdirectory(media_type, posts_count) def find_latest_directory() -> Optional[Path]: """便捷函数:查找最新目录""" return directory_manager.find_latest_directory()

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/elleys/MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server