web_parser/parser/
user.rs

1use rand::Rng;
2
3use crate::prelude::*;
4
5const RAND_USERS_COUNT: usize = 14;
6const RAND_USERS: [User; RAND_USERS_COUNT] = [
7    User::ChromeWindows,
8    User::ChromeMac,
9    User::ChromeLinux,
10
11    User::FirefoxWindows,
12    User::FirefoxMac,
13    User::FirefoxLinux,
14
15    User::EdgeWindows,
16    User::EdgeMac,
17
18    User::SafariMac,
19    
20    User::OperaWindows,
21    User::OperaMac,
22    User::OperaLinux,
23
24    User::YandexWindows,
25    User::YandexLinux,
26];
27
28/// The HTTP request User-Agent
29#[derive(Debug, Display, Clone, Eq, PartialEq)]
30pub enum User {
31    #[display = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) \
32AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"]
33    ChromeWindows,
34
35    #[display = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) \
36AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"]
37    ChromeMac,
38
39    #[display = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 \
40(KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"]
41    ChromeLinux,
42
43    #[display = "Mozilla/5.0 (Linux; Android 13; Pixel 6) AppleWebKit/537.36 \
44(KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36"]
45    ChromeAndroid,
46
47    #[display = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:114.0) Gecko/20100101 Firefox/114.0"]
48    FirefoxWindows,
49
50    #[display = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:114.0) Gecko/20100101 Firefox/114.0"]
51    FirefoxMac,
52
53    #[display = "Mozilla/5.0 (X11; Linux x86_64; rv:114.0) Gecko/20100101 Firefox/114.0"]
54    FirefoxLinux,
55
56    #[display = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) \
57AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.0.0"]
58    EdgeWindows,
59
60    #[display = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) \
61AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.0.0"]
62    EdgeMac,
63
64    #[display = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 \
65(KHTML, like Gecko) Version/16.0 Safari/605.1.15"]
66    SafariMac,
67
68    #[display = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15 \
69(KHTML, like Gecko) Version/16.0 Mobile/15E148 Safari/604.1"]
70    SafariIOS,
71
72    #[display = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \
73(KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 OPR/120.0.0.0"]
74    OperaWindows,
75
76    #[display = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 \
77(KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 OPR/120.0.0.0"]
78    OperaMac,
79
80    #[display = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 \
81(KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 OPR/120.0.0.0"]
82    OperaLinux,
83
84    #[display = "Mozilla/5.0 (Linux; Android 13; Pixel 6) AppleWebKit/537.36 \
85(KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36 OPR/120.0.0.0"]
86    OperaAndroid,
87
88    #[display = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \
89(KHTML, like Gecko) Chrome/114.0.0.0 YaBrowser/24.0.0.0 Safari/537.36"]
90    YandexWindows,
91
92    #[display = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 \
93(KHTML, like Gecko) Chrome/114.0.0.0 YaBrowser/24.0.0.0 Safari/537.36"]
94    YandexLinux,
95
96    #[display = "Mozilla/5.0 (Linux; Android 13; Pixel 6) AppleWebKit/537.36 \
97(KHTML, like Gecko) Chrome/114.0.0.0 YaBrowser/24.0.0.0 Mobile Safari/537.36"]
98    YandexAndroid,
99
100    #[display = "{0}"]
101    Custom(String)
102}
103
104impl User {
105    /// Get random PC User-Agent
106    pub fn random() -> Self {
107        let index = rand::rng().random_range(0..RAND_USERS_COUNT);
108        
109        RAND_USERS[index].clone()
110    }
111}