"""単一URLのスクレイピング→メタデータ生成処理""" from pathlib import Path from typing import Dict, Any, Optional from src.processing.metadata_utils import extract_title, generate_file_name from src.scraping import io from src.scraping import pipeline as scraping_pipeline class DocumentProcessor: """単一URLのスクレイピング→メタデータ生成処理""" async def process_url(self, url: str, index: int, save_dir: Optional[Path] = None) -> Dict[str, Any]: """ URLから直接メタデータを生成 save_dirが指定されている場合はMarkdownファイルも保存 Args: url: 処理対象のURL index: URLのインデックス番号 save_dir: Markdownファイルの保存先ディレクトリ(Noneの場合は保存しない) Returns: LangChain形式のドキュメントメタデータ """ # スクレイピング処理(集中化されたパイプライン関数を利用) md_content = await scraping_pipeline.to_markdown_from_url(url) # save_dirが指定されている場合はファイル保存 if save_dir: saved_path = io.save_markdown(md_content, save_dir, url) file_name = saved_path.name else: file_name = generate_file_name(url, index) # メタデータ生成(LangChain形式) document = { "metadata": { "title": extract_title(md_content), "file_name": file_name, "source_url": url, }, "page_content": md_content } return document