|
|
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
package headers
import (
_ "embed"
"fmt"
"math/rand"
"strings"
)
//go:generate bash -c "flyscrape run ../../examples/useragents/chrome.js | jq -r '[.[].data] | flatten | .[]' | sort -nr | uniq > versions_chrome.txt"
//go:generate bash -c "flyscrape run ../../examples/useragents/firefox.js | jq -r '[.[].data] | flatten | .[]' | sort -nr | uniq > versions_firefox.txt"
//go:generate bash -c "flyscrape run ../../examples/useragents/edge.js | jq -r '[.[].data] | flatten | .[]' | sort -nr | uniq > versions_edge.txt"
//go:generate bash -c "flyscrape run ../../examples/useragents/opera.js | jq -r '[.[].data] | flatten | .[]' | sort -nr | uniq > versions_opera.txt"
//go:embed versions_chrome.txt
var versionsChromeRaw string
var versionsChrome = strings.Split(strings.TrimSpace(versionsChromeRaw), "\n")
//go:embed versions_firefox.txt
var versionsFirefoxRaw string
var versionsFirefox = strings.Split(strings.TrimSpace(versionsFirefoxRaw), "\n")
//go:embed versions_edge.txt
var versionsEdgeRaw string
var versionsEdge = strings.Split(strings.TrimSpace(versionsEdgeRaw), "\n")
//go:embed versions_opera.txt
var versionsOperaRaw string
var versionsOpera = strings.Split(strings.TrimSpace(versionsOperaRaw), "\n")
//go:embed versions_macos.txt
var versionsMacOSRaw string
var versionsMacOS = strings.Split(strings.TrimSpace(versionsMacOSRaw), "\n")
//go:embed versions_windows.txt
var versionsWindowsRaw string
var versionsWindows = strings.Split(strings.TrimSpace(versionsWindowsRaw), "\n")
//go:embed versions_linux.txt
var versionsLinuxRaw string
var versionsLinux = strings.Split(strings.TrimSpace(versionsLinuxRaw), "\n")
func randomUAChrome() string {
f := "Mozilla/5.0 (%s) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Safari/537.36"
return fmt.Sprintf(f, randomOS(), random(versionsChrome))
}
func randomUAFirefox() string {
f := "Mozilla/5.0 (%s; rv:%s) Gecko/20100101 Firefox/%s"
ver := random(versionsFirefox)
return fmt.Sprintf(f, randomOS(), ver, ver)
}
func randomUAEdge() string {
f := "Mozilla/5.0 (%s) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36 Edg/%s"
return fmt.Sprintf(f, randomOS(), random(versionsEdge))
}
func randomUAOpera() string {
f := "Mozilla/5.0 (%s) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36 OPR/%s"
return fmt.Sprintf(f, randomOS(), random(versionsOpera))
}
func randomUserAgent() string {
switch rand.Intn(4) {
case 0:
return randomUAChrome()
case 1:
return randomUAFirefox()
case 2:
return randomUAEdge()
case 3:
return randomUAOpera()
}
panic("rand.Intn is broken")
}
func randomOS() string {
switch rand.Intn(3) {
case 0:
return random(versionsMacOS)
case 1:
return random(versionsWindows)
case 2:
return random(versionsLinux)
}
panic("rand.Intn is broken")
}
func random(ss []string) string {
return ss[rand.Intn(len(ss))]
}
|