mirror of
https://github.com/truewhile/MeBox.git
synced 2026-09-28 03:06:38 +08:00
split douban response parsing helpers
This commit is contained in:
@@ -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/")
|
||||
|
||||
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user