Files
MeBox/internal/service/douban_parse.go
T
2026-06-27 13:01:22 +08:00

65 lines
1.2 KiB
Go

package service
import (
"fmt"
"strings"
)
func firstStringFromMap(values map[string]any, keys ...string) string {
for _, key := range keys {
switch v := values[key].(type) {
case string:
if strings.TrimSpace(v) != "" {
return strings.TrimSpace(v)
}
case map[string]any:
if s := firstStringFromMap(v, "normal", "large", "small", "url"); s != "" {
return s
}
}
}
return ""
}
func float32FromMap(values map[string]any, keys ...string) float32 {
for _, key := range keys {
switch v := values[key].(type) {
case float64:
return float32(v)
case string:
var out float32
if _, err := fmt.Sscanf(strings.TrimSpace(v), "%f", &out); err == nil {
return out
}
case map[string]any:
if out := float32FromMap(v, "value", "score"); out > 0 {
return out
}
}
}
return 0
}
func doubanEpisodeCountFromValue(value any) int {
switch v := value.(type) {
case float64:
if v > 0 {
return int(v)
}
case int:
if v > 0 {
return v
}
case string:
var n int
if _, err := fmt.Sscanf(strings.TrimSpace(v), "%d", &n); err == nil && n > 0 {
return n
}
case []any:
if len(v) > 0 {
return len(v)
}
}
return 0
}