# Python Core ๆžถๆž„่ฎพ่ฎก ## ๐ŸŽฏ ็กฌๆ€ง่ฆๆฑ‚ - โœ… **ๅ‘ฝไปค่กŒ้›†ๆˆ** - ๅฐ†ๆ‰€ๆœ‰ๅŠŸ่ƒฝ้›†ๆˆๅˆฐๅ‘ฝไปค่กŒ่งฆๅ‘ - โœ… **่ฟ›ๅบฆๅ้ฆˆ** - ๆ‰€ๆœ‰ๅ‘ฝไปค่กŒๅŠŸ่ƒฝ้ƒฝๅŸบไบŽ JSON RPC Progress ๅธฆ่ฟ›ๅบฆๆกๅ้ฆˆ - โœ… **API่ฟ็งป** - ๆ‰€ๆœ‰ๅ‘ฝไปค่กŒไพ่ต–็š„ๅŠŸ่ƒฝๅŽๆœŸ่ฆ่ฟ็งปๅˆฐAPI๏ผŒๆ”ฏๆŒๆ— ็—›ๅˆ‡ๆข ## ๐Ÿ’พ ๅญ˜ๅ‚จ่ฎพ่ฎก - โœ… **ๅคšๅญ˜ๅ‚จๆ”ฏๆŒ** - ๆ”ฏๆŒๅคš็งๅญ˜ๅ‚จๆ–นๅผๅˆ‡ๆข - โœ… **ๅฝ“ๅ‰ๅฎž็Žฐ** - ๅญ˜ๅ‚จๅœจJSONๆ–‡ไปถ - โœ… **ๆœชๆฅๆ‰ฉๅฑ•** - ๅฏๆ–นไพฟๅˆ‡ๆขไธบๆ•ฐๆฎๅบ“/MongoDB็ญ‰ --- ## ๐Ÿ—๏ธ ๆ•ดไฝ“ๆžถๆž„ ### **ๅˆ†ๅฑ‚ๆžถๆž„่ฎพ่ฎก** ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ CLI Layer (ๅ‘ฝไปค่กŒๅฑ‚) โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ MediaManager โ”‚ โ”‚ SceneDetection โ”‚ โ”‚ TemplateManager โ”‚ โ”‚ โ”‚ โ”‚ Commander โ”‚ โ”‚ Commander โ”‚ โ”‚ Commander โ”‚ โ”‚ โ”‚ โ”‚ (่ฟ›ๅบฆๆก) โ”‚ โ”‚ (่ฟ›ๅบฆๆก) โ”‚ โ”‚ (่ฟ›ๅบฆๆก) โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ–ผ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Service Layer (ๆœๅŠกๅฑ‚) โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ MediaManager โ”‚ โ”‚ SceneDetection โ”‚ โ”‚ TemplateManager โ”‚ โ”‚ โ”‚ โ”‚ Service โ”‚ โ”‚ Service โ”‚ โ”‚ Service โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ–ผ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Storage Layer (ๅญ˜ๅ‚จๅฑ‚) โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ JSON Storage โ”‚ โ”‚ Database โ”‚ โ”‚ MongoDB โ”‚ โ”‚ โ”‚ โ”‚ (ๅฝ“ๅ‰) โ”‚ โ”‚ Storage โ”‚ โ”‚ Storage โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ (ๆœชๆฅ) โ”‚ โ”‚ (ๆœชๆฅ) โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ–ผ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Utils Layer (ๅทฅๅ…ทๅฑ‚) โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ Progress โ”‚ โ”‚ Logger โ”‚ โ”‚ Config โ”‚ โ”‚ โ”‚ โ”‚ Commander โ”‚ โ”‚ Utils โ”‚ โ”‚ Manager โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ### **ๆ ธๅฟƒ่ฎพ่ฎกๅŽŸๅˆ™** #### **1. ๅ‘ฝไปค่กŒไผ˜ๅ…ˆ (CLI-First)** - ๐ŸŽฏ ๆ‰€ๆœ‰ๅŠŸ่ƒฝ้ƒฝ้€š่ฟ‡ๅ‘ฝไปค่กŒๆšด้œฒ - ๐Ÿ“Š ็ปŸไธ€็š„่ฟ›ๅบฆๅ้ฆˆๆœบๅˆถ - ๐Ÿ”ง ๆ ‡ๅ‡†ๅŒ–็š„ๅ‚ๆ•ฐๅค„็† #### **2. ๆœๅŠกๅˆ†็ฆป (Service Separation)** - ๐Ÿงฉ ไธšๅŠก้€ป่พ‘ไธŽCLIๅˆ†็ฆป - ๐Ÿ”Œ ๆœๅŠกๅฏ็‹ฌ็ซ‹ๆต‹่ฏ•ๅ’Œๅค็”จ - ๐Ÿ“ฆ ๆธ…ๆ™ฐ็š„ๆŽฅๅฃๅฎšไน‰ #### **3. ๅญ˜ๅ‚จๆŠฝ่ฑก (Storage Abstraction)** - ๐Ÿ’พ ๅญ˜ๅ‚จๆŽฅๅฃๆ ‡ๅ‡†ๅŒ– - ๐Ÿ”„ ๅคš็งๅญ˜ๅ‚จๅฎž็Žฐ - ๐Ÿš€ ๆ— ็ผๅˆ‡ๆข่ƒฝๅŠ› #### **4. ่ฟ›ๅบฆ็ปŸไธ€ (Progress Unified)** - ๐Ÿ“ˆ JSON-RPC 2.0 ่ฟ›ๅบฆๅ่ฎฎ - โฑ๏ธ ๅฎžๆ—ถ่ฟ›ๅบฆๅ้ฆˆ - ๐Ÿ“Š ็ปŸไธ€็š„่ฟ›ๅบฆ็ฎก็† --- ## ๐Ÿ“ ็›ฎๅฝ•็ป“ๆž„่ฎพ่ฎก ``` python_core/ โ”œโ”€โ”€ services/ # ๆœๅŠกๅฑ‚ โ”‚ โ”œโ”€โ”€ media_manager/ # ๅช’ไฝ“็ฎก็†ๆœๅŠก โ”‚ โ”‚ โ”œโ”€โ”€ __init__.py โ”‚ โ”‚ โ”œโ”€โ”€ types.py # ๆ•ฐๆฎ็ฑปๅž‹ โ”‚ โ”‚ โ”œโ”€โ”€ storage.py # ๅญ˜ๅ‚จๆŽฅๅฃ โ”‚ โ”‚ โ”œโ”€โ”€ manager.py # ไธšๅŠก้€ป่พ‘ โ”‚ โ”‚ โ””โ”€โ”€ cli.py # ๅ‘ฝไปค่กŒๆŽฅๅฃ โ”‚ โ”œโ”€โ”€ scene_detection/ # ๅœบๆ™ฏๆฃ€ๆต‹ๆœๅŠก โ”‚ โ”‚ โ”œโ”€โ”€ __init__.py โ”‚ โ”‚ โ”œโ”€โ”€ types.py โ”‚ โ”‚ โ”œโ”€โ”€ detector.py โ”‚ โ”‚ โ””โ”€โ”€ cli.py โ”‚ โ””โ”€โ”€ template_manager/ # ๆจกๆฟ็ฎก็†ๆœๅŠก โ”‚ โ”œโ”€โ”€ __init__.py โ”‚ โ”œโ”€โ”€ types.py โ”‚ โ”œโ”€โ”€ manager.py โ”‚ โ””โ”€โ”€ cli.py โ”œโ”€โ”€ storage/ # ๅญ˜ๅ‚จๅฑ‚ โ”‚ โ”œโ”€โ”€ __init__.py โ”‚ โ”œโ”€โ”€ base.py # ๅญ˜ๅ‚จๅŸบ็ฑป โ”‚ โ”œโ”€โ”€ json_storage.py # JSONๅญ˜ๅ‚จๅฎž็Žฐ โ”‚ โ”œโ”€โ”€ database_storage.py # ๆ•ฐๆฎๅบ“ๅญ˜ๅ‚จๅฎž็Žฐ โ”‚ โ””โ”€โ”€ mongo_storage.py # MongoDBๅญ˜ๅ‚จๅฎž็Žฐ โ”œโ”€โ”€ utils/ # ๅทฅๅ…ทๅฑ‚ โ”‚ โ”œโ”€โ”€ __init__.py โ”‚ โ”œโ”€โ”€ commander/ # ๅ‘ฝไปค่กŒๅทฅๅ…ท โ”‚ โ”‚ โ”œโ”€โ”€ __init__.py โ”‚ โ”‚ โ””โ”€โ”€ base.py โ”‚ โ”œโ”€โ”€ progress/ # ่ฟ›ๅบฆ็ฎก็† โ”‚ โ”‚ โ”œโ”€โ”€ __init__.py โ”‚ โ”‚ โ”œโ”€โ”€ commander.py โ”‚ โ”‚ โ””โ”€โ”€ reporter.py โ”‚ โ”œโ”€โ”€ logger.py # ๆ—ฅๅฟ—ๅทฅๅ…ท โ”‚ โ””โ”€โ”€ config.py # ้…็ฝฎ็ฎก็† โ”œโ”€โ”€ config.py # ๅ…จๅฑ€้…็ฝฎ โ””โ”€โ”€ readme.md # ๆžถๆž„ๆ–‡ๆกฃ ``` --- ## ๐Ÿ”ง ๆ ธๅฟƒ็ป„ไปถ่ฎพ่ฎก ### **1. ่ฟ›ๅบฆๅ‘ฝไปคๅŸบ็ฑป** ```python class ProgressJSONRPCCommander(ABC): """ๅธฆ่ฟ›ๅบฆ็š„JSON-RPCๅ‘ฝไปคๅŸบ็ฑป""" def _is_progressive_command(self, command: str) -> bool: """ๅˆคๆ–ญๆ˜ฏๅฆ้œ€่ฆ่ฟ›ๅบฆๆŠฅๅ‘Š""" pass def _execute_with_progress(self, command: str, args: dict) -> Any: """ๆ‰ง่กŒๅธฆ่ฟ›ๅบฆ็š„ๅ‘ฝไปค""" pass def _execute_simple_command(self, command: str, args: dict) -> Any: """ๆ‰ง่กŒ็ฎ€ๅ•ๅ‘ฝไปค""" pass def create_task(self, name: str, total: int): """ๅˆ›ๅปบ่ฟ›ๅบฆไปปๅŠก""" pass ``` ### **2. ๅญ˜ๅ‚จๆŠฝ่ฑกๆŽฅๅฃ** ```python class StorageInterface(ABC): """ๅญ˜ๅ‚จๆŽฅๅฃๅŸบ็ฑป""" @abstractmethod def save(self, key: str, data: Any) -> bool: """ไฟๅญ˜ๆ•ฐๆฎ""" pass @abstractmethod def load(self, key: str) -> Any: """ๅŠ ่ฝฝๆ•ฐๆฎ""" pass @abstractmethod def delete(self, key: str) -> bool: """ๅˆ ้™คๆ•ฐๆฎ""" pass @abstractmethod def exists(self, key: str) -> bool: """ๆฃ€ๆŸฅๆ•ฐๆฎๆ˜ฏๅฆๅญ˜ๅœจ""" pass ``` ### **3. ๆœๅŠกๅŸบ็ฑป** ```python class ServiceBase(ABC): """ๆœๅŠกๅŸบ็ฑป""" def __init__(self, storage: StorageInterface): self.storage = storage @abstractmethod def get_service_name(self) -> str: """่Žทๅ–ๆœๅŠกๅ็งฐ""" pass ``` --- ## ๐Ÿš€ ๅฎž็Žฐ็ญ–็•ฅ ### **้˜ถๆฎต1: ๅฝ“ๅ‰ๅฎž็Žฐ (JSONๅญ˜ๅ‚จ)** - โœ… **JSONๆ–‡ไปถๅญ˜ๅ‚จ** - ็ฎ€ๅ•ใ€ๅฟซ้€Ÿใ€ๆ˜“่ฐƒ่ฏ• - โœ… **่ฟ›ๅบฆๅ‘ฝไปค่กŒ** - ็ปŸไธ€็š„่ฟ›ๅบฆๅ้ฆˆ - โœ… **ๆจกๅ—ๅŒ–ๆœๅŠก** - ๆธ…ๆ™ฐ็š„ๆœๅŠกๅˆ†็ฆป ### **้˜ถๆฎต2: ๅญ˜ๅ‚จๆ‰ฉๅฑ•** - ๐Ÿ”„ **ๆ•ฐๆฎๅบ“ๆ”ฏๆŒ** - SQLite/PostgreSQL/MySQL - ๐Ÿ”„ **NoSQLๆ”ฏๆŒ** - MongoDB/Redis - ๐Ÿ”„ **ไบ‘ๅญ˜ๅ‚จๆ”ฏๆŒ** - AWS S3/้˜ฟ้‡Œไบ‘OSS ### **้˜ถๆฎต3: APIๅŒ–** - ๐ŸŒ **REST API** - ๆ ‡ๅ‡†HTTPๆŽฅๅฃ - ๐Ÿ“ก **WebSocket** - ๅฎžๆ—ถ่ฟ›ๅบฆๆŽจ้€ - ๐Ÿ”Œ **GraphQL** - ็ตๆดป็š„ๆ•ฐๆฎๆŸฅ่ฏข ### **้˜ถๆฎต4: ๅพฎๆœๅŠกๅŒ–** - ๐Ÿณ **ๅฎนๅ™จๅŒ–** - Docker้ƒจ็ฝฒ - โš–๏ธ **่ดŸ่ฝฝๅ‡่กก** - ้ซ˜ๅฏ็”จๆžถๆž„ - ๐Ÿ“Š **็›‘ๆŽงๅ‘Š่ญฆ** - ๅฎŒๆ•ด็š„่ฟ็ปดไฝ“็ณป --- ## ๐Ÿ“Š ่ฟ›ๅบฆๅ่ฎฎ่ฎพ่ฎก ### **JSON-RPC 2.0 ่ฟ›ๅบฆๅ่ฎฎ** ```json { "jsonrpc": "2.0", "method": "progress", "params": { "step": "service_name", "progress": 0.65, "message": "ๅค„็†ไธญ: ๆ–‡ไปถๅ (3/5)", "timestamp": 1752242302.647, "details": { "current": 3, "total": 5, "elapsed_time": 2.5, "estimated_remaining": 1.2, "throughput": "1.2 files/sec" } } } ``` ### **่ฟ›ๅบฆ็Šถๆ€็ฎก็†** ```python class ProgressTask: """่ฟ›ๅบฆไปปๅŠก็ฎก็†""" def __init__(self, name: str, total: int): self.name = name self.total = total self.current = 0 self.start_time = time.time() def update(self, current: int = None, message: str = None): """ๆ›ดๆ–ฐ่ฟ›ๅบฆ""" pass def finish(self, message: str = "ไปปๅŠกๅฎŒๆˆ"): """ๅฎŒๆˆไปปๅŠก""" pass ``` --- ## ๐Ÿ”Œ API่ฟ็งป่ฎพ่ฎก ### **ๆ— ็—›ๅˆ‡ๆข็ญ–็•ฅ** #### **1. ๆŽฅๅฃๆ ‡ๅ‡†ๅŒ–** ```python # ๅ‘ฝไปค่กŒๆŽฅๅฃ def execute_command(command: str, args: dict) -> dict: """ๆ‰ง่กŒๅ‘ฝไปค""" pass # APIๆŽฅๅฃ (ๆœชๆฅ) @app.post("/api/v1/{service}/{command}") async def api_execute_command(service: str, command: str, args: dict) -> dict: """APIๆ‰ง่กŒๅ‘ฝไปค""" # ็›ดๆŽฅ่ฐƒ็”จ็›ธๅŒ็š„ๆœๅŠก้€ป่พ‘ return service_instance.execute_command(command, args) ``` #### **2. ่ฟ›ๅบฆๆŽจ้€** ```python # ๅ‘ฝไปค่กŒ่ฟ›ๅบฆ (ๅฝ“ๅ‰) def progress_callback(progress_data: dict): print(json.dumps(progress_data)) # WebSocket่ฟ›ๅบฆ (ๆœชๆฅ) async def websocket_progress(websocket: WebSocket, progress_data: dict): await websocket.send_json(progress_data) ``` #### **3. ้…็ฝฎ็ปŸไธ€** ```python class Config: """็ปŸไธ€้…็ฝฎ็ฎก็†""" # ๅญ˜ๅ‚จ้…็ฝฎ STORAGE_TYPE = "json" # json/database/mongodb STORAGE_PATH = "data/" # API้…็ฝฎ API_ENABLED = False API_HOST = "0.0.0.0" API_PORT = 8000 # ่ฟ›ๅบฆ้…็ฝฎ PROGRESS_ENABLED = True PROGRESS_WEBSOCKET = False ``` --- ## ๐Ÿ“ˆ ๆ‰ฉๅฑ•ๆ€ง่ฎพ่ฎก ### **1. ๆ’ไปถๅŒ–ๆžถๆž„** ```python class PluginManager: """ๆ’ไปถ็ฎก็†ๅ™จ""" def register_service(self, service_class: Type[ServiceBase]): """ๆณจๅ†ŒๆœๅŠก""" pass def register_storage(self, storage_class: Type[StorageInterface]): """ๆณจๅ†Œๅญ˜ๅ‚จ""" pass def register_commander(self, commander_class: Type[ProgressJSONRPCCommander]): """ๆณจๅ†Œๅ‘ฝไปค่กŒ""" pass ``` ### **2. ้…็ฝฎ้ฉฑๅŠจ** ```yaml # config.yaml services: media_manager: enabled: true storage: json scene_detection: enabled: true storage: json storage: json: path: "./data" database: url: "postgresql://user:pass@localhost/db" mongodb: url: "mongodb://localhost:27017/db" api: enabled: false host: "0.0.0.0" port: 8000 ``` ### **3. ็›‘ๆŽงๅ’Œๆ—ฅๅฟ—** ```python class ServiceMonitor: """ๆœๅŠก็›‘ๆŽง""" def track_command_execution(self, service: str, command: str, duration: float): """่ทŸ่ธชๅ‘ฝไปคๆ‰ง่กŒ""" pass def track_progress(self, service: str, progress: float): """่ทŸ่ธช่ฟ›ๅบฆ""" pass def track_error(self, service: str, error: Exception): """่ทŸ่ธช้”™่ฏฏ""" pass ``` --- ## ๐ŸŽฏ ไฝฟ็”จ็คบไพ‹ ### **ๅฝ“ๅ‰ไฝฟ็”จๆ–นๅผ (ๅ‘ฝไปค่กŒ)** ```bash # ๅช’ไฝ“็ฎก็† python -m python_core.services.media_manager upload video.mp4 # ๅœบๆ™ฏๆฃ€ๆต‹ python -m python_core.services.scene_detection batch_detect /videos # ๆจกๆฟ็ฎก็† python -m python_core.services.template_manager import /templates ``` ### **ๆœชๆฅไฝฟ็”จๆ–นๅผ (API)** ```bash # REST API curl -X POST http://localhost:8000/api/v1/media_manager/upload \ -H "Content-Type: application/json" \ -d '{"video_path": "video.mp4"}' # WebSocket่ฟ›ๅบฆ ws://localhost:8000/ws/progress ``` ### **ๆททๅˆไฝฟ็”จ** ```python # ็จ‹ๅบๅŒ–่ฐƒ็”จ from python_core.services.media_manager import MediaManagerService service = MediaManagerService() result = service.upload_video("video.mp4") ``` --- ## ๐ŸŽ‰ ๆžถๆž„ไผ˜ๅŠฟ ### **1. ็ปŸไธ€ๆ€ง** - ๐ŸŽฏ **ๅ‘ฝไปค่กŒไผ˜ๅ…ˆ** - ๆ‰€ๆœ‰ๅŠŸ่ƒฝ้ƒฝๅฏ้€š่ฟ‡CLI่ฎฟ้—ฎ - ๐Ÿ“Š **่ฟ›ๅบฆ็ปŸไธ€** - ็ปŸไธ€็š„่ฟ›ๅบฆๅ้ฆˆๆœบๅˆถ - ๐Ÿ”ง **ๆŽฅๅฃๆ ‡ๅ‡†** - ๆ ‡ๅ‡†ๅŒ–็š„ๆœๅŠกๆŽฅๅฃ ### **2. ๅฏๆ‰ฉๅฑ•ๆ€ง** - ๐Ÿ”Œ **ๆ’ไปถๅŒ–** - ๆ˜“ไบŽๆทปๅŠ ๆ–ฐๆœๅŠก - ๐Ÿ’พ **ๅญ˜ๅ‚จ็ตๆดป** - ๆ”ฏๆŒๅคš็งๅญ˜ๅ‚จๅŽ็ซฏ - ๐ŸŒ **APIๅฐฑ็ปช** - ๆ— ็—›่ฟ็งปๅˆฐAPI ### **3. ๅฏ็ปดๆŠคๆ€ง** - ๐Ÿงฉ **ๆจกๅ—ๅŒ–** - ๆธ…ๆ™ฐ็š„ๆจกๅ—ๅˆ†็ฆป - ๐Ÿ“ **ๆ–‡ๆกฃๅฎŒๆ•ด** - ่ฏฆ็ป†็š„ๆžถๆž„ๆ–‡ๆกฃ - ๐Ÿงช **ๆต‹่ฏ•ๅ‹ๅฅฝ** - ๆ˜“ไบŽๅ•ๅ…ƒๆต‹่ฏ• ### **4. ็”จๆˆทๅ‹ๅฅฝ** - ๐Ÿ“Š **่ฟ›ๅบฆๅฏ่ง†** - ๅฎžๆ—ถ่ฟ›ๅบฆๅ้ฆˆ - ๐Ÿ”ง **้…็ฝฎ็ตๆดป** - ไธฐๅฏŒ็š„้…็ฝฎ้€‰้กน - ๐Ÿ“„ **่พ“ๅ‡บๅคšๆ ท** - ๅคš็ง่พ“ๅ‡บๆ ผๅผ ่ฟ™ไธชๆžถๆž„่ฎพ่ฎกๅฎŒๅ…จๆปก่ถณๆ‚จ็š„็กฌๆ€ง่ฆๆฑ‚๏ผŒๆไพ›ไบ†ไปŽๅฝ“ๅ‰JSONๅญ˜ๅ‚จๅˆฐๆœชๆฅAPIๅŒ–็š„ๅฎŒๆ•ด่ฟ็งป่ทฏๅพ„๏ผ - ๆ–‡ไปถๅญ˜ๅ‚จ ๅฝ“ๅ‰ๆ˜ฏๅญ˜ๅ‚จๅˆฐๆœฌๅœฐ ๅŽ็ปญไผšๅญ˜ๅ‚จๅˆฐ่ฟœ็จ‹ ้œ€่ฆๆ— ็—›ๅˆ‡ๆข