mirror of
https://github.com/truewhile/MeBox.git
synced 2026-10-06 05:16: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
|
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) {
|
func (d *DoubanProvider) setHeaders(req *http.Request) {
|
||||||
req.Header.Set("User-Agent", userAgents[secureRandomIntn(len(userAgents))])
|
req.Header.Set("User-Agent", userAgents[secureRandomIntn(len(userAgents))])
|
||||||
req.Header.Set("Referer", "https://movie.douban.com/")
|
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