-
-
Notifications
You must be signed in to change notification settings - Fork 329
Open
Description
需求:
实现可以根据订阅源的不同,设置对于该订阅源的额外的内容处理方式,然后把处理结果作为附属内容发送给用户。
比如对于订阅源A,增加一个文本翻译的工作流程;对于订阅源B,增加一个关键词提取的功能;还可以有总结、自定义的prompt等功能。
下面是根据询问 AI 的改进意见,供您参考:
Q:
1)本项目代码的主要的工作流程:
1. 初始化程序,连接数据库和Telegram API
2. 加载用户订阅源,启动定时任务定期检查更新
3. 检查到更新时,获取内容,解析并处理成需要的格式
4. 将内容发送到Telegram上
5. 接收用户交互命令,如修改设置等
6. 持续循环上述流程
2)代码改进:
在流程3与流程4之间(或者通过修改流程3、流程4)增加一项功能:
根据订阅源的不同,设置对于该订阅源的额外内容处理方式,比如对于订阅源A,增加一个文本翻译的工作流程;对于订阅源B,增加一个关键词提取的功能;
3)代码改进要求:
1. 尽可能小的影响源代码、原来的代码框架、代码逻辑
2. 尽可能的使用可插拔、热加载、插件等方式
3. 详尽写出需要修改的代码范围,和具体的代码实现
A:
## 实现方法:
(1) 尽可能小影响原代码
在src/parsing/post.py中,Post类的 send_formatted_post 方法末尾增加判断:
if feed_link in TRANSLATION_FEEDS:
await self.translate(formatted_text)
if feed_link in KEYWORD_FEEDS:
await self.keyword_extract(formatted_text)
TRANSLATION_FEEDS、KEYWORD_FEEDS定义新的常量或配置来表示启用额外处理的订阅源
(2) 额外处理用可插拔方式实现
在src/plugin中新增google_translate.py、keyword_extract.py等文件
内容类似:
from abc import ABC, abstractmethod
class Processor(ABC):
@abstractmethod
async def process(text):
pass
class GoogleTranslator(Processor):
# 实现翻译逻辑
class KeywordExtractor(Processor):
# 实现关键词提取逻辑
src/parsing/post.py中调用:
processor = get_processor(feed_link)
await processor.process(formatted_text)
(3) 使新功能热加载
使用watchdog监听src/plugin目录变化
变化时重新导入processor,实现热加载
以上尽可能在不影响原框架、最小改动的情况下实现可配置、可插拔的订阅源额外处理功能。
主要更改:
导入自定义处理器
定义订阅源到处理器的映射
在发送前判断订阅源是否需要额外处理
如果需要,调用对应的处理器进行处理
处理后再发送
这样,在不影响原有代码和框架的情况下,实现了订阅源的自定义处理。
可以根据实际需要调整处理器的映射,新增其他处理器等来丰富功能。
整体来说,订阅源的自定义处理可以通过类似的可插拔设计模式实现,不需要大规模修改原代码。
Metadata
Metadata
Assignees
Labels
No labels