69 lines
1.7 KiB
Go
69 lines
1.7 KiB
Go
package collect
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"geo/internal/config"
|
|
"log"
|
|
)
|
|
|
|
// CollectManager 收集管理器
|
|
type CollectManager struct {
|
|
ctx context.Context
|
|
config *config.Config
|
|
logger *log.Logger
|
|
}
|
|
|
|
// NewCollectManager 创建收集管理器
|
|
func NewCollectManager(ctx context.Context, cfg *config.Config, logger *log.Logger) *CollectManager {
|
|
return &CollectManager{
|
|
ctx: ctx,
|
|
config: cfg,
|
|
logger: logger,
|
|
}
|
|
}
|
|
|
|
// GetCollector 获取指定平台的收集器
|
|
func (m *CollectManager) GetCollector(platform string, params *CollectParams) (CollectorInterface, error) {
|
|
collectorValue, ok := CollectorMap[platform]
|
|
if !ok {
|
|
return nil, fmt.Errorf("不支持的平台: %s", platform)
|
|
}
|
|
|
|
collector := collectorValue.InitMethod(m.ctx, params, m.config, m.logger)
|
|
if collector == nil {
|
|
return nil, fmt.Errorf("创建收集器失败: %s", platform)
|
|
}
|
|
|
|
return collector, nil
|
|
}
|
|
|
|
// AskQuestion 向指定AI平台提问
|
|
func (m *CollectManager) AskQuestion(platform string, params *CollectParams, question string) (string, error) {
|
|
collector, err := m.GetCollector(platform, params)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return collector.AskQuestion(question)
|
|
}
|
|
|
|
// WaitLogin 等待指定平台登录
|
|
func (m *CollectManager) WaitLogin(platform string, params *CollectParams) (bool, string) {
|
|
collector, err := m.GetCollector(platform, params)
|
|
if err != nil {
|
|
return false, err.Error()
|
|
}
|
|
|
|
return collector.WaitLogin()
|
|
}
|
|
|
|
// ListPlatforms 列出所有支持的平台
|
|
func (m *CollectManager) ListPlatforms() []string {
|
|
platforms := make([]string, 0, len(CollectorMap))
|
|
for platform := range CollectorMap {
|
|
platforms = append(platforms, platform)
|
|
}
|
|
return platforms
|
|
}
|