headless_engine/google/
endpoints.rs1use url::Url;
2
3pub struct GoogleEndpoints;
5
6impl GoogleEndpoints {
7 pub fn search(query: &str) -> String {
8 format!("https://www.google.com/search?q={}", urlencoding::encode(query))
9 }
10
11 pub fn web_search(query: &str) -> String {
12 format!("https://www.google.com/search?q={}&udm=14", urlencoding::encode(query))
13 }
14
15 pub fn image_search(query: &str) -> String {
16 format!("https://www.google.com/search?q={}&udm=2", urlencoding::encode(query))
17 }
18
19 pub fn video_search(query: &str) -> String {
20 format!("https://www.google.com/search?q={}&tbm=vid", urlencoding::encode(query))
21 }
22
23 pub fn short_video_search(query: &str) -> String {
24 format!("https://www.google.com/search?q={}+shorts&tbm=vid", urlencoding::encode(query))
25 }
26
27 pub fn news_search(query: &str) -> String {
28 format!("https://www.google.com/search?q={}&tbm=nws", urlencoding::encode(query))
29 }
30
31 pub fn forum_search(query: &str) -> String {
32 format!("https://www.google.com/search?q={}&udm=18", urlencoding::encode(query))
33 }
34
35 pub fn shopping_search(query: &str) -> String {
36 format!("https://www.google.com/search?q={}&tbm=shop", urlencoding::encode(query))
37 }
38
39 pub fn product_search(query: &str) -> String {
40 format!("https://www.google.com/search?q={}&tbm=shop", urlencoding::encode(query))
41 }
42
43 pub fn books_search(query: &str) -> String {
44 format!("https://www.google.com/search?q={}&tbm=bks", urlencoding::encode(query))
45 }
46
47 pub fn autocomplete(query: &str) -> String {
48 format!("https://suggestqueries.google.com/complete/search?client=chrome&q={}", urlencoding::encode(query))
49 }
50
51 pub fn ai_overview(query: &str) -> String {
52 format!("https://www.google.com/search?q={}", urlencoding::encode(query))
53 }
54
55 pub fn ai_mode(query: &str) -> String {
56 format!("https://www.google.com/search?q={}&udm=50", urlencoding::encode(query))
57 }
58
59 pub fn scholar_search(query: &str) -> String {
60 format!("https://scholar.google.com/scholar?q={}", urlencoding::encode(query))
61 }
62
63 pub fn patents_search(query: &str) -> String {
64 format!("https://patents.google.com/?q={}", urlencoding::encode(query))
65 }
66
67 pub fn maps_search(query: &str) -> String {
68 format!("https://www.google.com/maps/search/{}", urlencoding::encode(query))
69 }
70
71 pub fn finance_quote(ticker: &str) -> String {
72 format!("https://www.google.com/finance/quote/{}", urlencoding::encode(ticker))
73 }
74
75 pub fn trends_search(query: &str) -> String {
76 format!("https://trends.google.com/trends/explore?q={}", urlencoding::encode(query))
77 }
78
79 pub fn flights_search(origin: &str, dest: &str) -> String {
80 format!("https://www.google.com/travel/flights?q=Flights+from+{}+to+{}", urlencoding::encode(origin), urlencoding::encode(dest))
81 }
82
83 pub fn hotels_search(location: &str) -> String {
84 format!("https://www.google.com/travel/hotels/{}", urlencoding::encode(location))
85 }
86
87 pub fn travel_explore(destination: &str) -> String {
88 format!("https://www.google.com/travel/explore?q={}", urlencoding::encode(destination))
89 }
90
91 pub fn youtube_search(query: &str) -> String {
92 format!("https://www.youtube.com/results?search_query={}", urlencoding::encode(query))
93 }
94
95 pub fn youtube_shorts_search(query: &str) -> String {
96 format!("https://www.youtube.com/results?search_query={}&sp=mREBAgAL", urlencoding::encode(query))
97 }
98
99 pub fn youtube_video(video_id: &str) -> String {
100 if video_id.starts_with("http") {
101 video_id.to_string()
102 } else {
103 format!("https://www.youtube.com/watch?v={}", urlencoding::encode(video_id))
104 }
105 }
106
107 pub fn youtube_channel(channel: &str) -> String {
108 if channel.starts_with("http") {
109 channel.to_string()
110 } else if channel.starts_with('@') {
111 format!("https://www.youtube.com/{}", channel)
112 } else {
113 format!("https://www.youtube.com/channel/{}", urlencoding::encode(channel))
114 }
115 }
116
117 pub fn youtube_playlist(playlist_id: &str) -> String {
118 if playlist_id.starts_with("http") {
119 playlist_id.to_string()
120 } else {
121 format!("https://www.youtube.com/playlist?list={}", urlencoding::encode(playlist_id))
122 }
123 }
124
125 pub fn lens_visual_matches(image_url: &str) -> String {
126 format!("https://lens.google.com/uploadbyurl?url={}", urlencoding::encode(image_url))
127 }
128
129 pub fn lens_exact_matches(image_url: &str) -> String {
130 format!("https://lens.google.com/uploadbyurl?url={}", urlencoding::encode(image_url))
131 }
132
133 pub fn lens_products(image_url: &str) -> String {
134 format!("https://lens.google.com/uploadbyurl?url={}", urlencoding::encode(image_url))
135 }
136
137 pub fn lens_about_image(image_url: &str) -> String {
138 format!("https://lens.google.com/uploadbyurl?url={}", urlencoding::encode(image_url))
139 }
140}