package useragents import ( "context" "encoding/json" "fmt" "io" "gitea.stevedudenhoeffer.com/steve/go-extractor" ) type Config struct{} var DefaultConfig = Config{} func deferClose(cl io.Closer) { if cl != nil { _ = cl.Close() } } func GetMostCommonDesktopUserAgent(ctx context.Context, b extractor.Browser) (string, error) { return DefaultConfig.GetMostCommonDesktopUserAgent(ctx, b) } func (c Config) GetMostCommonDesktopUserAgent(ctx context.Context, b extractor.Browser) (string, error) { doc, err := b.Open(ctx, "https://www.useragents.me/", extractor.OpenPageOptions{}) if err != nil { return "", fmt.Errorf("failed to open useragents.me: %w", err) } defer deferClose(doc) s := doc.Select("#most-common-desktop-useragents-json-csv > div:nth-child(1) > textarea:nth-child(4)") text := "" for _, el := range s { t, err := el.Content() if err != nil { return "", fmt.Errorf("failed to get text: %w", err) } text += t } data := []map[string]any{} fmt.Println("text", text) err = json.Unmarshal([]byte(text), &data) if err != nil { return "", err } highestAgent := "" highestPct := 0.0 for _, agent := range data { pct, ok := agent["pct"].(float64) if !ok { continue } if pct > highestPct { highestPct = pct highestAgent = agent["ua"].(string) } } return highestAgent, nil }