split douban response parsing helpers

This commit is contained in:
ShukeBta
2026-06-27 13:01:22 +08:00
parent e47304f96d
commit 53f659e113
2 changed files with 64 additions and 58 deletions
-58
View File
@@ -234,64 +234,6 @@ func (d *DoubanProvider) GetEpisodeCountByID(ctx context.Context, doubanID strin
return 0, nil
}
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
}
func (d *DoubanProvider) setHeaders(req *http.Request) {
req.Header.Set("User-Agent", userAgents[secureRandomIntn(len(userAgents))])
req.Header.Set("Referer", "https://movie.douban.com/")
+64
View File
@@ -0,0 +1,64 @@
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
}