🔧 chore: 初始化番茄小说 API 项目结构

新增项目基础框架,包含核心 API 实现、算法模块、HTTP 处理器等完整功能模块
This commit is contained in:
chenxin committed 2026-08-28 15:22:22 +08:00
commit 6981148727
107 files changed
+12463

No files matched your search

+159
View File
@@ -0,0 +1,159 @@
package algos
import (
"fmt"
"strings"
"sync"
"time"
)
// AlgorithmInterface 算法接口
type AlgorithmInterface interface {
GetAlgorithmName() string
GenerateHeaders(url string, headers map[string]string) (map[string]string, error)
}
// AlgorithmSwitcher 算法切换器
type AlgorithmSwitcher struct {
mu sync.RWMutex
currentAlgorithm string
algorithms map[string]AlgorithmInterface
}
// NewAlgorithmSwitcher 创建算法切换器
func NewAlgorithmSwitcher() *AlgorithmSwitcher {
switcher := &AlgorithmSwitcher{
algorithms: make(map[string]AlgorithmInterface),
}
// 注册所有算法
switcher.algorithms["gorgon"] = &GorgonAlgorithmAdapter{}
switcher.algorithms["8404"] = &Algo8404Adapter{}
// 设置默认算法为gorgon
switcher.currentAlgorithm = "gorgon"
return switcher
}
// SwitchAlgorithm 切换算法
func (s *AlgorithmSwitcher) SwitchAlgorithm(algorithmType string) error {
s.mu.Lock()
defer s.mu.Unlock()
if _, exists := s.algorithms[algorithmType]; !exists {
return fmt.Errorf("不支持的算法类型: %s", algorithmType)
}
s.currentAlgorithm = algorithmType
return nil
}
// GetCurrentAlgorithm 获取当前算法名称
func (s *AlgorithmSwitcher) GetCurrentAlgorithm() string {
s.mu.RLock()
defer s.mu.RUnlock()
return s.currentAlgorithm
}
// GetAvailableAlgorithms 获取可用算法列表
func (s *AlgorithmSwitcher) GetAvailableAlgorithms() []string {
s.mu.RLock()
defer s.mu.RUnlock()
algorithms := make([]string, 0, len(s.algorithms))
for name := range s.algorithms {
algorithms = append(algorithms, name)
}
return algorithms
}
// GetCurrentAlgorithmInstance 获取当前算法实例
func (s *AlgorithmSwitcher) GetCurrentAlgorithmInstance() AlgorithmInterface {
s.mu.RLock()
defer s.mu.RUnlock()
return s.algorithms[s.currentAlgorithm]
}
// GetAlgorithmInstance 获取指定算法实例
func (s *AlgorithmSwitcher) GetAlgorithmInstance(algorithmType string) (AlgorithmInterface, error) {
s.mu.RLock()
defer s.mu.RUnlock()
algorithm, exists := s.algorithms[algorithmType]
if !exists {
return nil, fmt.Errorf("不支持的算法类型: %s", algorithmType)
}
return algorithm, nil
}
// GorgonAlgorithmAdapter Gorgon算法适配器(兼容旧版)
type GorgonAlgorithmAdapter struct{}
func (g *GorgonAlgorithmAdapter) GetAlgorithmName() string {
return "Gorgon算法"
}
func (g *GorgonAlgorithmAdapter) GenerateHeaders(url string, headers map[string]string) (map[string]string, error) {
// 使用Gorgon算法
parts := strings.Split(url, "?")
if len(parts) < 2 {
return headers, fmt.Errorf("URL格式错误")
}
xSSStub := headers["x-ss-stub"]
cookie := headers["Cookie"]
if cookie == "" {
cookie = headers["cookie"]
}
gorgon := NewGorgon(parts[1], time.Now().Unix(), xSSStub, cookie)
result := gorgon.GetValue()
finalHeaders := make(map[string]string)
for k, v := range headers {
finalHeaders[k] = v
}
for k, v := range result {
finalHeaders[k] = v
}
return finalHeaders, nil
}
// Algo8404Adapter 8404算法适配器
type Algo8404Adapter struct{}
func (a *Algo8404Adapter) GetAlgorithmName() string {
return "8404算法"
}
func (a *Algo8404Adapter) GenerateHeaders(url string, headers map[string]string) (map[string]string, error) {
// 使用8404算法
parts := strings.Split(url, "?")
if len(parts) < 2 {
return headers, fmt.Errorf("URL格式错误")
}
xSSStub := headers["x-ss-stub"]
algo := NewAlgo8404(parts[1], time.Now().Unix(), xSSStub)
result := algo.GetValue()
finalHeaders := make(map[string]string)
for k, v := range headers {
finalHeaders[k] = v
}
for k, v := range result {
finalHeaders[k] = v
}
return finalHeaders, nil
}
// GlobalAlgorithmSwitcher 全局算法切换器实例
var GlobalAlgorithmSwitcher = NewAlgorithmSwitcher()