mirror of
https://github.com/truewhile/MeBox.git
synced 2026-09-28 11:16:37 +08:00
65 lines
1.2 KiB
Go
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
|
|
}
|