easy-google-places 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/api.d.ts +2 -2
- package/dist/api.d.ts.map +1 -1
- package/dist/core.d.ts +25 -4
- package/dist/core.d.ts.map +1 -1
- package/dist/index.js +38 -14
- package/dist/index.js.map +4 -4
- package/dist/types.d.ts +2 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Easy Google
|
|
1
|
+
# Easy Google Places
|
|
2
2
|
|
|
3
3
|
A TypeScript library to query Google Places API with automatic area subdivision used to bypass result limits.
|
|
4
4
|
|
|
@@ -34,7 +34,7 @@ const location = { latitude: 48.8566, longitude: 2.3522 };
|
|
|
34
34
|
|
|
35
35
|
await getGooglePlaces(location)
|
|
36
36
|
.radius(2000) // Search within 2km radius
|
|
37
|
-
.
|
|
37
|
+
.placesTypes(["restaurant"])
|
|
38
38
|
.fields(["displayName", "rating", "formattedAddress", "id"]) // Specify fields!
|
|
39
39
|
.apiKey("YOUR_GOOGLE_MAPS_API_KEY")
|
|
40
40
|
.showLogs()
|
|
@@ -57,7 +57,7 @@ const location = { latitude: 48.8566, longitude: 2.3522 };
|
|
|
57
57
|
|
|
58
58
|
await getLegacyGooglePlaces(location)
|
|
59
59
|
.radius(2000)
|
|
60
|
-
.
|
|
60
|
+
.placesTypes(["restaurant"])
|
|
61
61
|
.apiKey("YOUR_GOOGLE_MAPS_API_KEY")
|
|
62
62
|
.showLogs()
|
|
63
63
|
.onFinished((places) => {
|
package/dist/api.d.ts
CHANGED
|
@@ -3,10 +3,10 @@ import { Coordinate, MapsPlaceResult, PlaceResult } from "./types";
|
|
|
3
3
|
* Fetches places using the Legacy Google Places API (Nearby Search).
|
|
4
4
|
* Matches the original behavior of this library.
|
|
5
5
|
*/
|
|
6
|
-
export declare function fetchLegacyPlaces(location: Coordinate, radius: number,
|
|
6
|
+
export declare function fetchLegacyPlaces(location: Coordinate, radius: number, types: string[], apiKey: string, onProgress?: (count: number) => void, allowClosedStores?: boolean): Promise<MapsPlaceResult[]>;
|
|
7
7
|
/**
|
|
8
8
|
* Fetches places using the New Google Places API (v1).
|
|
9
9
|
* Allows specifying fields to retrieve.
|
|
10
10
|
*/
|
|
11
|
-
export declare function fetchNewPlaces(location: Coordinate, radius: number,
|
|
11
|
+
export declare function fetchNewPlaces(location: Coordinate, radius: number, types: string[], apiKey: string, fields: string[], onProgress?: (count: number) => void, allowClosedStores?: boolean, excludedPrimaryTypes?: string[]): Promise<PlaceResult[]>;
|
|
12
12
|
//# sourceMappingURL=api.d.ts.map
|
package/dist/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEnE;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,UAAU,EACpB,MAAM,EAAE,MAAM,EACd,
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEnE;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,UAAU,EACpB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EAAE,EACf,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EACpC,iBAAiB,GAAE,OAAe,GACjC,OAAO,CAAC,eAAe,EAAE,CAAC,CAiE5B;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,UAAU,EACpB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EAAE,EACf,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EAAE,EAChB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EACpC,iBAAiB,GAAE,OAAe,EAClC,oBAAoB,GAAE,MAAM,EAAO,GAClC,OAAO,CAAC,WAAW,EAAE,CAAC,CAmExB"}
|
package/dist/core.d.ts
CHANGED
|
@@ -10,14 +10,20 @@ export declare class PlaceQueryBuilder {
|
|
|
10
10
|
private _subRadius;
|
|
11
11
|
private _minRate;
|
|
12
12
|
private _limitCount;
|
|
13
|
-
|
|
13
|
+
/**
|
|
14
|
+
* The types of places to search for.
|
|
15
|
+
* See [the API documentation](https://developers.google.com/maps/documentation/places/web-service/place-types#table-a)
|
|
16
|
+
* @example ["bar", "pub", "restaurant", "cafe"]
|
|
17
|
+
*/
|
|
18
|
+
private _types;
|
|
14
19
|
private _onFinished?;
|
|
15
20
|
private _showLogs;
|
|
16
21
|
private _showProgress;
|
|
17
22
|
private _apiKey;
|
|
18
23
|
private _forceQueryClosedStores;
|
|
24
|
+
private _excludedPrimaryTypes;
|
|
19
25
|
constructor(location: Coordinate);
|
|
20
|
-
|
|
26
|
+
placesTypes(types: string[]): this;
|
|
21
27
|
radius(radius: number): this;
|
|
22
28
|
minRate(rate: number): this;
|
|
23
29
|
limit(max: number): this;
|
|
@@ -26,6 +32,7 @@ export declare class PlaceQueryBuilder {
|
|
|
26
32
|
showLogs(): this;
|
|
27
33
|
showProgress(): this;
|
|
28
34
|
allowClosedStores(): this;
|
|
35
|
+
excludedPrimaryTypes(types: string[]): this;
|
|
29
36
|
run(): Promise<void>;
|
|
30
37
|
private handleOutput;
|
|
31
38
|
}
|
|
@@ -38,15 +45,21 @@ export declare class NewPlaceQueryBuilder {
|
|
|
38
45
|
private _subRadius;
|
|
39
46
|
private _minRate;
|
|
40
47
|
private _limitCount;
|
|
41
|
-
|
|
48
|
+
/**
|
|
49
|
+
* The types of places to search for.
|
|
50
|
+
* See [the API documentation](https://developers.google.com/maps/documentation/places/web-service/place-types#table-a)
|
|
51
|
+
* @example ["bar", "pub", "restaurant", "cafe"]
|
|
52
|
+
*/
|
|
53
|
+
private _types;
|
|
42
54
|
private _fields;
|
|
43
55
|
private _onFinished?;
|
|
44
56
|
private _showLogs;
|
|
45
57
|
private _showProgress;
|
|
46
58
|
private _apiKey;
|
|
47
59
|
private _forceQueryClosedStores;
|
|
60
|
+
private _excludedPrimaryTypes;
|
|
48
61
|
constructor(location: Coordinate);
|
|
49
|
-
|
|
62
|
+
placesTypes(types: string[]): this;
|
|
50
63
|
radius(radius: number): this;
|
|
51
64
|
minRate(rate: number): this;
|
|
52
65
|
limit(max: number): this;
|
|
@@ -60,6 +73,14 @@ export declare class NewPlaceQueryBuilder {
|
|
|
60
73
|
showLogs(): this;
|
|
61
74
|
showProgress(): this;
|
|
62
75
|
allowClosedStores(): this;
|
|
76
|
+
/**
|
|
77
|
+
* Some of the types includes `chinese_restaurant`, `japanese_restaurant`, `italian_restaurant`, etc.
|
|
78
|
+
*
|
|
79
|
+
* You can see the types [here](https://developers.google.com/maps/documentation/places/web-service/place-types#table-a)
|
|
80
|
+
* @param types
|
|
81
|
+
* @returns
|
|
82
|
+
*/
|
|
83
|
+
excludedPrimaryTypes(types: string[]): this;
|
|
63
84
|
run(): Promise<void>;
|
|
64
85
|
private handleOutput;
|
|
65
86
|
}
|
package/dist/core.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3F,KAAK,YAAY,GAAG,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC,CAAC;AAC3E,KAAK,eAAe,GAAG,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC,CAAC;AAE1E;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,UAAU,CAAe;IACjC,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,WAAW,CAAqB;
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -30,13 +30,15 @@ function generateSubCircles(center, radius, subRadius = 500) {
|
|
|
30
30
|
return coordinates;
|
|
31
31
|
}
|
|
32
32
|
// src/api.ts
|
|
33
|
-
async function fetchLegacyPlaces(location, radius,
|
|
33
|
+
async function fetchLegacyPlaces(location, radius, types, apiKey, onProgress, allowClosedStores = false) {
|
|
34
34
|
const allPlaces = [];
|
|
35
35
|
const maxPages = 3;
|
|
36
36
|
const url = new URL("https://maps.googleapis.com/maps/api/place/nearbysearch/json");
|
|
37
37
|
url.searchParams.append("location", `${location.latitude},${location.longitude}`);
|
|
38
38
|
url.searchParams.append("radius", radius.toString());
|
|
39
|
-
|
|
39
|
+
for (const type of types) {
|
|
40
|
+
url.searchParams.append("type", type);
|
|
41
|
+
}
|
|
40
42
|
url.searchParams.append("key", apiKey);
|
|
41
43
|
let nextPageToken = undefined;
|
|
42
44
|
for (let i = 0;i < maxPages; i++) {
|
|
@@ -75,7 +77,7 @@ async function fetchLegacyPlaces(location, radius, type, apiKey, onProgress, all
|
|
|
75
77
|
}
|
|
76
78
|
return allPlaces;
|
|
77
79
|
}
|
|
78
|
-
async function fetchNewPlaces(location, radius,
|
|
80
|
+
async function fetchNewPlaces(location, radius, types, apiKey, fields, onProgress, allowClosedStores = false, excludedPrimaryTypes = []) {
|
|
79
81
|
const allPlaces = [];
|
|
80
82
|
const url = "https://places.googleapis.com/v1/places:searchNearby";
|
|
81
83
|
const formattedFields = fields.map((f) => f.startsWith("places.") ? f : `places.${f}`).join(",");
|
|
@@ -89,9 +91,12 @@ async function fetchNewPlaces(location, radius, type, apiKey, fields, onProgress
|
|
|
89
91
|
radius
|
|
90
92
|
}
|
|
91
93
|
},
|
|
92
|
-
includedTypes:
|
|
94
|
+
includedTypes: types,
|
|
93
95
|
maxResultCount: 20
|
|
94
96
|
};
|
|
97
|
+
if (excludedPrimaryTypes.length > 0) {
|
|
98
|
+
requestBody.excludedPrimaryTypes = excludedPrimaryTypes;
|
|
99
|
+
}
|
|
95
100
|
try {
|
|
96
101
|
const response = await fetch(url, {
|
|
97
102
|
method: "POST",
|
|
@@ -133,18 +138,19 @@ class PlaceQueryBuilder {
|
|
|
133
138
|
_subRadius = 500;
|
|
134
139
|
_minRate = 4.1;
|
|
135
140
|
_limitCount;
|
|
136
|
-
|
|
141
|
+
_types = [];
|
|
137
142
|
_onFinished;
|
|
138
143
|
_showLogs = false;
|
|
139
144
|
_showProgress = false;
|
|
140
145
|
_apiKey;
|
|
141
146
|
_forceQueryClosedStores = false;
|
|
147
|
+
_excludedPrimaryTypes = [];
|
|
142
148
|
constructor(location) {
|
|
143
149
|
this._location = location;
|
|
144
150
|
this._apiKey = process.env.NEXT_PUBLIC_GOOGLE_MAPS_API_KEY;
|
|
145
151
|
}
|
|
146
|
-
|
|
147
|
-
this.
|
|
152
|
+
placesTypes(types) {
|
|
153
|
+
this._types = types;
|
|
148
154
|
return this;
|
|
149
155
|
}
|
|
150
156
|
radius(radius) {
|
|
@@ -179,6 +185,10 @@ class PlaceQueryBuilder {
|
|
|
179
185
|
this._forceQueryClosedStores = true;
|
|
180
186
|
return this;
|
|
181
187
|
}
|
|
188
|
+
excludedPrimaryTypes(types) {
|
|
189
|
+
this._excludedPrimaryTypes = types;
|
|
190
|
+
return this;
|
|
191
|
+
}
|
|
182
192
|
async run() {
|
|
183
193
|
if (!this._apiKey) {
|
|
184
194
|
throw new Error("API Key is required. Set it via .apiKey() or NEXT_PUBLIC_GOOGLE_MAPS_API_KEY env var.");
|
|
@@ -207,7 +217,7 @@ class PlaceQueryBuilder {
|
|
|
207
217
|
for (const circle of subCircles) {
|
|
208
218
|
if (this._showLogs)
|
|
209
219
|
console.log(`Querying batch ${processedBatches + 1}/${totalBatches} at ${circle.latitude}, ${circle.longitude}...`);
|
|
210
|
-
const places = await fetchLegacyPlaces(circle, this._subRadius, this.
|
|
220
|
+
const places = await fetchLegacyPlaces(circle, this._subRadius, this._types, this._apiKey, (count) => {}, this._forceQueryClosedStores);
|
|
211
221
|
for (const place of places) {
|
|
212
222
|
if (place.place_id) {
|
|
213
223
|
allPlacesMap.set(place.place_id, place);
|
|
@@ -225,6 +235,15 @@ class PlaceQueryBuilder {
|
|
|
225
235
|
}
|
|
226
236
|
let uniquePlaces = Array.from(allPlacesMap.values());
|
|
227
237
|
uniquePlaces = uniquePlaces.filter((p) => (p.rating || 0) >= this._minRate);
|
|
238
|
+
if (this._excludedPrimaryTypes.length > 0) {
|
|
239
|
+
uniquePlaces = uniquePlaces.filter((p) => {
|
|
240
|
+
if (!p.types)
|
|
241
|
+
return true;
|
|
242
|
+
return !p.types.some((t) => this._excludedPrimaryTypes.includes(t));
|
|
243
|
+
});
|
|
244
|
+
if (this._showLogs)
|
|
245
|
+
console.log(`Filtered out places based on excluded types: ${this._excludedPrimaryTypes.join(", ")}`);
|
|
246
|
+
}
|
|
228
247
|
if (this._limitCount && uniquePlaces.length > this._limitCount) {
|
|
229
248
|
uniquePlaces = uniquePlaces.slice(0, this._limitCount);
|
|
230
249
|
}
|
|
@@ -270,19 +289,20 @@ class NewPlaceQueryBuilder {
|
|
|
270
289
|
_subRadius = 500;
|
|
271
290
|
_minRate = 4.1;
|
|
272
291
|
_limitCount;
|
|
273
|
-
|
|
274
|
-
_fields = ["name", "displayName", "id", "formattedAddress", "rating", "location"];
|
|
292
|
+
_types = [];
|
|
293
|
+
_fields = ["name", "displayName", "id", "formattedAddress", "rating", "location", "nationalPhoneNumber", "internationalPhoneNumber", "websiteUri", "googleMapsUri", "regularOpeningHours", "reservable", "parkingOptions", "priceLevel", "businessStatus", "utcOffsetMinutes", "userRatingCount", "types", "primaryType", "primaryTypeDisplayName"];
|
|
275
294
|
_onFinished;
|
|
276
295
|
_showLogs = false;
|
|
277
296
|
_showProgress = false;
|
|
278
297
|
_apiKey;
|
|
279
298
|
_forceQueryClosedStores = false;
|
|
299
|
+
_excludedPrimaryTypes = [];
|
|
280
300
|
constructor(location) {
|
|
281
301
|
this._location = location;
|
|
282
302
|
this._apiKey = process.env.NEXT_PUBLIC_GOOGLE_MAPS_API_KEY;
|
|
283
303
|
}
|
|
284
|
-
|
|
285
|
-
this.
|
|
304
|
+
placesTypes(types) {
|
|
305
|
+
this._types = types;
|
|
286
306
|
return this;
|
|
287
307
|
}
|
|
288
308
|
radius(radius) {
|
|
@@ -321,6 +341,10 @@ class NewPlaceQueryBuilder {
|
|
|
321
341
|
this._forceQueryClosedStores = true;
|
|
322
342
|
return this;
|
|
323
343
|
}
|
|
344
|
+
excludedPrimaryTypes(types) {
|
|
345
|
+
this._excludedPrimaryTypes = types;
|
|
346
|
+
return this;
|
|
347
|
+
}
|
|
324
348
|
async run() {
|
|
325
349
|
if (!this._apiKey) {
|
|
326
350
|
throw new Error("API Key is required.");
|
|
@@ -347,7 +371,7 @@ class NewPlaceQueryBuilder {
|
|
|
347
371
|
for (const circle of subCircles) {
|
|
348
372
|
if (this._showLogs)
|
|
349
373
|
console.log(`Querying batch ${processedBatches + 1}/${totalBatches}...`);
|
|
350
|
-
const places = await fetchNewPlaces(circle, this._subRadius, this.
|
|
374
|
+
const places = await fetchNewPlaces(circle, this._subRadius, this._types, this._apiKey, this._fields, (count) => {}, this._forceQueryClosedStores, this._excludedPrimaryTypes);
|
|
351
375
|
for (const place of places) {
|
|
352
376
|
if (place.id) {
|
|
353
377
|
allPlacesMap.set(place.id, place);
|
|
@@ -416,4 +440,4 @@ export {
|
|
|
416
440
|
NewPlaceQueryBuilder
|
|
417
441
|
};
|
|
418
442
|
|
|
419
|
-
//# debugId=
|
|
443
|
+
//# debugId=76E2A899F11EDB4F64756E2164756E21
|
package/dist/index.js.map
CHANGED
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
"sources": ["../src/geometry.ts", "../src/api.ts", "../src/core.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import { Coordinate } from \"./types\";\n\n\n/**\n * Generates a list of coordinates for sub-circles that cover a larger circle.\n * Uses a hexagonal packing strategy to ensure coverage.\n * \n * @param center The center of the main search area.\n * @param radius The radius of the main search area in meters.\n * @param subRadius The radius of each sub-circle in meters (default 500m).\n * @returns Array of coordinates for the centers of the sub-circles.\n */\nexport function generateSubCircles(\n center: Coordinate,\n radius: number,\n subRadius: number = 500\n): Coordinate[] {\n // If the main radius is smaller than the subRadius, just return the center.\n if (radius <= subRadius) {\n return [center];\n }\n\n const coordinates: Coordinate[] = [];\n \n // Earth's radius in meters\n const R = 6371000;\n \n // Convert latitude to radians to calculate longitude offsets correctly\n const latRad = (center.latitude * Math.PI) / 180;\n \n // Distance between centers of hexagonally packed circles to ensure coverage.\n // Ideally, for r=subRadius, the distance should be approx r * sqrt(3) for tight packing without gaps,\n // but to be safe and ensure overlap (so we don't miss spots), we can use a slightly tighter spacing.\n // Using subRadius * 1.5 is a reasonable approximation for coverage with overlap.\n const step = subRadius * 1.5; \n\n // Simple grid or spiral generation could work, but let's do a bounding box scan\n // We scan a square area around the center and keep points within the radius.\n \n // Degrees per meter (approximate)\n const latDegPerMeter = 1 / 111320; \n const lonDegPerMeter = 1 / (111320 * Math.cos(latRad));\n\n const latStep = step * latDegPerMeter;\n const lonStep = step * lonDegPerMeter;\n\n // Calculate bounds\n const numSteps = Math.ceil(radius / step);\n \n for (let i = -numSteps; i <= numSteps; i++) {\n for (let j = -numSteps; j <= numSteps; j++) {\n // Offset based on hexagonal-like grid (shift every other row)\n const xOffset = j * lonStep + (i % 2 === 0 ? 0 : lonStep / 2);\n const yOffset = i * latStep * (Math.sqrt(3) / 2); // Hexagonal height factor\n\n // Calculate distance from center in meters (approx)\n const distX = xOffset / lonDegPerMeter;\n const distY = yOffset / latDegPerMeter;\n const distance = Math.sqrt(distX * distX + distY * distY);\n\n // We include the circle if its center is within (ParentRadius + epsilon) \n // or if it covers any part of the parent circle. \n // Being generous: if distance - subRadius < radius\n if (distance - subRadius < radius) {\n coordinates.push({\n latitude: center.latitude + yOffset,\n longitude: center.longitude + xOffset\n });\n }\n }\n }\n\n return coordinates;\n}\n",
|
|
6
|
-
"import { Coordinate, MapsPlaceResult, PlaceResult } from \"./types\";\n\n/**\n * Fetches places using the Legacy Google Places API (Nearby Search).\n * Matches the original behavior of this library.\n */\nexport async function fetchLegacyPlaces(\n location: Coordinate,\n radius: number,\n
|
|
7
|
-
"import { generateSubCircles } from \"./geometry\";\nimport { fetchLegacyPlaces, fetchNewPlaces } from \"./api\";\nimport { writeFileSync } from \"fs\";\nimport { Coordinate, MapsPlaceResult, NearbySearchAttributes, PlaceResult } from \"./types\";\n\ntype OutputFormat = \"csv\" | \"json\" | ((places: MapsPlaceResult[]) => void);\ntype NewOutputFormat = \"csv\" | \"json\" | ((places: PlaceResult[]) => void);\n\n/**\n * Legacy Query Builder using the original Maps API (Nearby Search).\n */\nexport class PlaceQueryBuilder {\n private _location: Coordinate;\n private _radius: number = 4000; // Default 4km\n private _subRadius: number = 500; // Default 500m\n private _minRate: number = 4.1;\n private _limitCount: number | undefined;\n private _type: string = \"restaurant\";\n private _onFinished?: OutputFormat;\n private _showLogs: boolean = false;\n private _showProgress: boolean = false;\n private _apiKey: string | undefined;\n private _forceQueryClosedStores: boolean = false;\n\n constructor(location: Coordinate) {\n this._location = location;\n // Try to load API Key from env if available (Bun loads .env automatically)\n this._apiKey = process.env.NEXT_PUBLIC_GOOGLE_MAPS_API_KEY;\n }\n\n public placesType(type: string): this {\n this._type = type;\n return this;\n }\n\n public radius(radius: number): this {\n this._radius = radius;\n return this;\n }\n\n public minRate(rate: number): this {\n this._minRate = rate;\n return this;\n }\n\n public limit(max: number): this {\n this._limitCount = max;\n return this;\n }\n\n public apiKey(key: string): this {\n this._apiKey = key;\n return this;\n }\n\n public onFinished(format: OutputFormat): this {\n this._onFinished = format;\n return this;\n }\n\n public showLogs(): this {\n this._showLogs = true;\n return this;\n }\n\n public showProgress(): this {\n this._showProgress = true;\n return this;\n }\n\n public allowClosedStores(): this {\n this._forceQueryClosedStores = true;\n return this;\n }\n\n public async run(): Promise<void> {\n if (!this._apiKey) {\n throw new Error(\"API Key is required. Set it via .apiKey() or NEXT_PUBLIC_GOOGLE_MAPS_API_KEY env var.\");\n }\n if (!this._onFinished) {\n throw new Error(\"onFinished callback or format is required.\");\n }\n\n if (this._showLogs) console.log(\"Starting Google Places (Legacy) query...\");\n\n // 1. Generate sub-circles\n let subCircles = generateSubCircles(this._location, this._radius, this._subRadius);\n \n // Optimization: If limit is set, reduce the number of batches\n if (this._limitCount) {\n const maxBatches = Math.ceil(this._limitCount / 60);\n if (subCircles.length > maxBatches) {\n // Shuffle array to get random circles\n for (let i = subCircles.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [subCircles[i], subCircles[j]] = [subCircles[j], subCircles[i]];\n }\n // Slice to the max needed matches\n subCircles = subCircles.slice(0, maxBatches);\n if (this._showLogs) console.log(`Optimization: Limiting to ${maxBatches} batches based on limit of ${this._limitCount}`);\n }\n }\n\n const totalBatches = subCircles.length;\n const allPlacesMap = new Map<string, MapsPlaceResult>();\n let processedBatches = 0;\n \n for (const circle of subCircles) {\n if (this._showLogs) console.log(`Querying batch ${processedBatches + 1}/${totalBatches} at ${circle.latitude}, ${circle.longitude}...`);\n \n const places = await fetchLegacyPlaces(\n circle, \n this._subRadius, \n this._type, \n this._apiKey,\n (count) => {},\n this._forceQueryClosedStores\n );\n\n for (const place of places) {\n if (place.place_id) {\n allPlacesMap.set(place.place_id, place);\n }\n }\n\n processedBatches++;\n \n if (this._showProgress) {\n const percentage = ((processedBatches / totalBatches) * 100).toFixed(1);\n console.log(`Progress: ${percentage}% (${processedBatches}/${totalBatches} batches)`);\n }\n\n await new Promise(r => setTimeout(r, 200)); \n if(processedBatches % 20 === 0) {\n await new Promise(r => setTimeout(r, 2000));\n }\n }\n\n let uniquePlaces = Array.from(allPlacesMap.values());\n \n // Filter by minRate\n uniquePlaces = uniquePlaces.filter(p => (p.rating || 0) >= this._minRate);\n\n // Apply limit\n if (this._limitCount && uniquePlaces.length > this._limitCount) {\n uniquePlaces = uniquePlaces.slice(0, this._limitCount);\n }\n if (this._showLogs) console.log(`Finished! Found ${uniquePlaces.length} unique places.`);\n\n this.handleOutput(uniquePlaces);\n }\n\n private handleOutput(places: MapsPlaceResult[]) {\n if (typeof this._onFinished === \"function\") {\n this._onFinished(places);\n } else if (this._onFinished === \"json\") {\n const jsonContent = JSON.stringify(places, null, 2);\n writeFileSync(\"maps_places_output.json\", jsonContent);\n if (this._showLogs) console.log(\"Saved results to maps_places_output.json\");\n } else if (this._onFinished === \"csv\") {\n const headers = [\"name\", \"address\", \"rating\", \"user_ratings_total\", \"place_id\", \"lat\", \"lng\"];\n const csvContent = [\n headers.join(\",\"),\n ...places.map(p => {\n return [\n `\"${(p.name || \"\").replace(/\"/g, '\"\"')}\"`,\n `\"${(p.formatted_address || \"\").replace(/\"/g, '\"\"')}\"`,\n p.rating || \"\",\n p.user_ratings_total || \"\",\n p.place_id,\n p.geometry?.location?.lat || \"\",\n p.geometry?.location?.lng || \"\"\n ].join(\",\")\n })\n ].join(\"\\n\");\n writeFileSync(\"maps_places_output.csv\", csvContent);\n if (this._showLogs) console.log(\"Saved results to maps_places_output.csv\");\n }\n }\n}\n\n/**\n * New Places API Query Builder (v1).\n */\nexport class NewPlaceQueryBuilder {\n private _location: Coordinate;\n private _radius: number = 4000;\n private _subRadius: number = 500; \n private _minRate: number = 4.1;\n private _limitCount: number | undefined;\n private _type: string = \"restaurant\";\n private _fields: NearbySearchAttributes[] = [\"name\", \"displayName\", \"id\", \"formattedAddress\", \"rating\", \"location\"]; // Defaults\n private _onFinished?: NewOutputFormat;\n private _showLogs: boolean = false;\n private _showProgress: boolean = false;\n private _apiKey: string | undefined;\n private _forceQueryClosedStores: boolean = false;\n\n constructor(location: Coordinate) {\n this._location = location;\n this._apiKey = process.env.NEXT_PUBLIC_GOOGLE_MAPS_API_KEY;\n }\n\n public placesType(type: string): this {\n this._type = type;\n return this;\n }\n\n public radius(radius: number): this {\n this._radius = radius;\n return this;\n }\n\n public minRate(rate: number): this {\n this._minRate = rate;\n return this;\n }\n\n public limit(max: number): this {\n this._limitCount = max;\n return this;\n }\n\n public apiKey(key: string): this {\n this._apiKey = key;\n return this;\n }\n\n /**\n * Specifies fields to return from the New Places API.\n * e.g. [\"displayName\", \"rating\", \"formattedAddress\"]\n */\n public fields(fields: NearbySearchAttributes[]): this {\n this._fields = [...this._fields, ...fields];\n return this;\n }\n\n public onFinished(format: NewOutputFormat): this {\n this._onFinished = format;\n return this;\n }\n\n public showLogs(): this {\n this._showLogs = true;\n return this;\n }\n\n public showProgress(): this {\n this._showProgress = true;\n return this;\n }\n\n public allowClosedStores(): this {\n this._forceQueryClosedStores = true;\n return this;\n }\n\n public async run(): Promise<void> {\n if (!this._apiKey) {\n throw new Error(\"API Key is required.\");\n }\n if (!this._onFinished) {\n throw new Error(\"onFinished callback or format is required.\");\n }\n\n if (this._showLogs) console.log(\"Starting Google Places (New) query...\");\n\n let subCircles = generateSubCircles(this._location, this._radius, this._subRadius);\n \n // Same optimization logic\n if (this._limitCount) {\n const maxBatches = Math.ceil(this._limitCount / 20); // Note: New API limit is 20 per call\n if (subCircles.length > maxBatches) {\n for (let i = subCircles.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [subCircles[i], subCircles[j]] = [subCircles[j], subCircles[i]];\n }\n subCircles = subCircles.slice(0, maxBatches);\n }\n }\n\n const totalBatches = subCircles.length;\n const allPlacesMap = new Map<string, PlaceResult>();\n let processedBatches = 0;\n \n for (const circle of subCircles) {\n if (this._showLogs) console.log(`Querying batch ${processedBatches + 1}/${totalBatches}...`);\n \n const places = await fetchNewPlaces(\n circle, \n this._subRadius, \n this._type, \n this._apiKey,\n this._fields,\n (count) => {},\n this._forceQueryClosedStores\n );\n\n for (const place of places) {\n if (place.id) {\n allPlacesMap.set(place.id, place);\n }\n }\n\n processedBatches++;\n \n if (this._showProgress) {\n const percentage = ((processedBatches / totalBatches) * 100).toFixed(1);\n console.log(`Progress: ${percentage}%`);\n }\n\n await new Promise(r => setTimeout(r, 200)); \n if(processedBatches % 20 === 0) {\n await new Promise(r => setTimeout(r, 2000));\n }\n }\n\n let uniquePlaces = Array.from(allPlacesMap.values());\n uniquePlaces = uniquePlaces.filter(p => (p.rating || 0) >= this._minRate);\n\n if (this._limitCount && uniquePlaces.length > this._limitCount) {\n uniquePlaces = uniquePlaces.slice(0, this._limitCount);\n }\n if (this._showLogs) console.log(`Finished! Found ${uniquePlaces.length} unique places.`);\n\n this.handleOutput(uniquePlaces);\n }\n\n private handleOutput(places: PlaceResult[]) {\n if (typeof this._onFinished === \"function\") {\n this._onFinished(places);\n } else if (this._onFinished === \"json\") {\n const jsonContent = JSON.stringify(places, null, 2);\n writeFileSync(\"places_output.json\", jsonContent);\n if (this._showLogs) console.log(\"Saved results to places_output.json\");\n } else if (this._onFinished === \"csv\") {\n const headers = [\"id\", \"rating\", \"formattedAddress\", \"displayName\"];\n const csvContent = [\n headers.join(\",\"),\n ...places.map(p => {\n return [\n p.id,\n p.rating || \"\",\n `\"${(p.formattedAddress || \"\").replace(/\"/g, '\"\"')}\"`,\n `\"${(p.displayName?.text || p.name || \"\").replace(/\"/g, '\"\"')}\"`\n ].join(\",\")\n })\n ].join(\"\\n\");\n writeFileSync(\"places_output.csv\", csvContent);\n if (this._showLogs) console.log(\"Saved results to places_output.csv\");\n }\n }\n}\n\nexport function getLegacyGooglePlaces(location: Coordinate) {\n return new PlaceQueryBuilder(location);\n}\n\nexport function getGooglePlaces(location: Coordinate) {\n return new NewPlaceQueryBuilder(location);\n}\n"
|
|
6
|
+
"import { Coordinate, MapsPlaceResult, PlaceResult } from \"./types\";\n\n/**\n * Fetches places using the Legacy Google Places API (Nearby Search).\n * Matches the original behavior of this library.\n */\nexport async function fetchLegacyPlaces(\n location: Coordinate,\n radius: number,\n types: string[],\n apiKey: string,\n onProgress?: (count: number) => void,\n allowClosedStores: boolean = false\n): Promise<MapsPlaceResult[]> {\n const allPlaces: MapsPlaceResult[] = [];\n const maxPages = 3;\n \n const url = new URL(\n \"https://maps.googleapis.com/maps/api/place/nearbysearch/json\"\n );\n url.searchParams.append(\"location\", `${location.latitude},${location.longitude}`);\n url.searchParams.append(\"radius\", radius.toString());\n for (const type of types) {\n url.searchParams.append(\"type\", type);\n }\n // Important: Google Places API does not support explicit pagination by page number,\n // only by next_page_token.\n url.searchParams.append(\"key\", apiKey);\n\n let nextPageToken: string | undefined = undefined;\n\n for (let i = 0; i < maxPages; i++) {\n if (i > 0 && !nextPageToken) {\n break;\n }\n\n const currentUrl = new URL(url.toString());\n if (nextPageToken) {\n currentUrl.searchParams.append(\"pagetoken\", nextPageToken);\n // Determine if we need to wait.\n // Google requires a short delay before the next_page_token becomes valid.\n await new Promise((resolve) => setTimeout(resolve, 2000));\n }\n\n try {\n const response = await fetch(currentUrl.toString());\n const data = await response.json();\n\n if (data.status !== \"OK\" && data.status !== \"ZERO_RESULTS\") {\n console.error(\"Google Places API error:\", data.status, data.error_message);\n break;\n }\n\n if (data.results) {\n let activePlaces: MapsPlaceResult[] = [];\n if (!allowClosedStores) {\n activePlaces = (data.results as MapsPlaceResult[]).filter(\n (place) => place.business_status !== \"CLOSED_TEMPORARILY\"\n );\n } else {\n activePlaces = data.results as MapsPlaceResult[];\n }\n \n allPlaces.push(...activePlaces);\n\n if (onProgress) {\n onProgress(activePlaces.length);\n }\n }\n\n nextPageToken = data.next_page_token;\n } catch (error) {\n console.error(\"Network error fetching places:\", error);\n break;\n }\n }\n\n return allPlaces;\n}\n\n/**\n * Fetches places using the New Google Places API (v1).\n * Allows specifying fields to retrieve.\n */\nexport async function fetchNewPlaces(\n location: Coordinate,\n radius: number,\n types: string[],\n apiKey: string,\n fields: string[],\n onProgress?: (count: number) => void,\n allowClosedStores: boolean = false,\n excludedPrimaryTypes: string[] = []\n): Promise<PlaceResult[]> {\n const allPlaces: PlaceResult[] = [];\n \n const url = \"https://places.googleapis.com/v1/places:searchNearby\";\n\n // Ensure fields are properly formatted (prefixed with 'places.')\n const formattedFields = fields.map(f => f.startsWith(\"places.\") ? f : `places.${f}`).join(\",\");\n \n // Implementation for single call:\n const requestBody: any = {\n locationRestriction: {\n circle: {\n center: {\n latitude: location.latitude,\n longitude: location.longitude,\n },\n radius: radius,\n },\n },\n includedTypes: types,\n maxResultCount: 20\n };\n\n if (excludedPrimaryTypes.length > 0) {\n requestBody.excludedPrimaryTypes = excludedPrimaryTypes;\n }\n\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-Goog-Api-Key\": apiKey,\n \"X-Goog-FieldMask\": formattedFields,\n },\n body: JSON.stringify(requestBody),\n });\n\n const data = await response.json();\n\n if (!response.ok) {\n console.error(\"Google Places API error:\", data.error?.message || data.error || data);\n return [];\n }\n\n if (data.places) {\n let activePlaces: PlaceResult[] = [];\n // Filter closed stores if needed.\n if (!allowClosedStores) {\n activePlaces = (data.places as PlaceResult[]).filter(\n (place) => place.businessStatus !== \"CLOSED_TEMPORARILY\" && place.businessStatus !== \"CLOSED_PERMANENTLY\"\n );\n } else {\n activePlaces = data.places as PlaceResult[];\n }\n\n allPlaces.push(...activePlaces);\n\n if (onProgress) {\n onProgress(activePlaces.length);\n }\n }\n } catch (error) {\n console.error(\"Network error fetching places:\", error);\n }\n \n return allPlaces;\n}\n",
|
|
7
|
+
"import { generateSubCircles } from \"./geometry\";\nimport { fetchLegacyPlaces, fetchNewPlaces } from \"./api\";\nimport { writeFileSync } from \"fs\";\nimport { Coordinate, MapsPlaceResult, NearbySearchAttributes, PlaceResult } from \"./types\";\n\ntype OutputFormat = \"csv\" | \"json\" | ((places: MapsPlaceResult[]) => void);\ntype NewOutputFormat = \"csv\" | \"json\" | ((places: PlaceResult[]) => void);\n\n/**\n * Legacy Query Builder using the original Maps API (Nearby Search).\n */\nexport class PlaceQueryBuilder {\n private _location: Coordinate;\n private _radius: number = 4000; // Default 4km\n private _subRadius: number = 500; // Default 500m\n private _minRate: number = 4.1;\n private _limitCount: number | undefined;\n /**\n * The types of places to search for.\n * See [the API documentation](https://developers.google.com/maps/documentation/places/web-service/place-types#table-a)\n * @example [\"bar\", \"pub\", \"restaurant\", \"cafe\"]\n */\n private _types: string[] = [];\n private _onFinished?: OutputFormat;\n private _showLogs: boolean = false;\n private _showProgress: boolean = false;\n private _apiKey: string | undefined;\n\n private _forceQueryClosedStores: boolean = false;\n private _excludedPrimaryTypes: string[] = [];\n\n constructor(location: Coordinate) {\n this._location = location;\n // Try to load API Key from env if available (Bun loads .env automatically)\n this._apiKey = process.env.NEXT_PUBLIC_GOOGLE_MAPS_API_KEY;\n }\n\n public placesTypes(types: string[]): this {\n this._types = types;\n return this;\n }\n\n public radius(radius: number): this {\n this._radius = radius;\n return this;\n }\n\n public minRate(rate: number): this {\n this._minRate = rate;\n return this;\n }\n\n public limit(max: number): this {\n this._limitCount = max;\n return this;\n }\n\n public apiKey(key: string): this {\n this._apiKey = key;\n return this;\n }\n\n public onFinished(format: OutputFormat): this {\n this._onFinished = format;\n return this;\n }\n\n public showLogs(): this {\n this._showLogs = true;\n return this;\n }\n\n public showProgress(): this {\n this._showProgress = true;\n return this;\n }\n\n public allowClosedStores(): this {\n this._forceQueryClosedStores = true;\n return this;\n }\n\n public excludedPrimaryTypes(types: string[]): this {\n this._excludedPrimaryTypes = types;\n return this;\n }\n\n public async run(): Promise<void> {\n if (!this._apiKey) {\n throw new Error(\"API Key is required. Set it via .apiKey() or NEXT_PUBLIC_GOOGLE_MAPS_API_KEY env var.\");\n }\n if (!this._onFinished) {\n throw new Error(\"onFinished callback or format is required.\");\n }\n\n if (this._showLogs) console.log(\"Starting Google Places (Legacy) query...\");\n\n // 1. Generate sub-circles\n let subCircles = generateSubCircles(this._location, this._radius, this._subRadius);\n \n // Optimization: If limit is set, reduce the number of batches\n if (this._limitCount) {\n const maxBatches = Math.ceil(this._limitCount / 60);\n if (subCircles.length > maxBatches) {\n // Shuffle array to get random circles\n for (let i = subCircles.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [subCircles[i], subCircles[j]] = [subCircles[j], subCircles[i]];\n }\n // Slice to the max needed matches\n subCircles = subCircles.slice(0, maxBatches);\n if (this._showLogs) console.log(`Optimization: Limiting to ${maxBatches} batches based on limit of ${this._limitCount}`);\n }\n }\n\n const totalBatches = subCircles.length;\n const allPlacesMap = new Map<string, MapsPlaceResult>();\n let processedBatches = 0;\n \n for (const circle of subCircles) {\n if (this._showLogs) console.log(`Querying batch ${processedBatches + 1}/${totalBatches} at ${circle.latitude}, ${circle.longitude}...`);\n \n const places = await fetchLegacyPlaces(\n circle, \n this._subRadius, \n this._types, \n this._apiKey,\n (count) => {},\n this._forceQueryClosedStores\n );\n\n for (const place of places) {\n if (place.place_id) {\n allPlacesMap.set(place.place_id, place);\n }\n }\n\n processedBatches++;\n \n if (this._showProgress) {\n const percentage = ((processedBatches / totalBatches) * 100).toFixed(1);\n console.log(`Progress: ${percentage}% (${processedBatches}/${totalBatches} batches)`);\n }\n\n await new Promise(r => setTimeout(r, 200)); \n if(processedBatches % 20 === 0) {\n await new Promise(r => setTimeout(r, 2000));\n }\n }\n\n let uniquePlaces = Array.from(allPlacesMap.values());\n \n // Filter by minRate\n uniquePlaces = uniquePlaces.filter(p => (p.rating || 0) >= this._minRate);\n\n // Filter by excludedPrimaryTypes (Client-side for Legacy API)\n if (this._excludedPrimaryTypes.length > 0) {\n uniquePlaces = uniquePlaces.filter(p => {\n if (!p.types) return true;\n // If any of the place's types are in the excluded list, filter it out.\n // Legacy API types are an array of strings.\n return !p.types.some(t => this._excludedPrimaryTypes.includes(t));\n });\n if (this._showLogs) console.log(`Filtered out places based on excluded types: ${this._excludedPrimaryTypes.join(\", \")}`);\n }\n\n // Apply limit\n if (this._limitCount && uniquePlaces.length > this._limitCount) {\n uniquePlaces = uniquePlaces.slice(0, this._limitCount);\n }\n if (this._showLogs) console.log(`Finished! Found ${uniquePlaces.length} unique places.`);\n\n this.handleOutput(uniquePlaces);\n }\n\n private handleOutput(places: MapsPlaceResult[]) {\n if (typeof this._onFinished === \"function\") {\n this._onFinished(places);\n } else if (this._onFinished === \"json\") {\n const jsonContent = JSON.stringify(places, null, 2);\n writeFileSync(\"maps_places_output.json\", jsonContent);\n if (this._showLogs) console.log(\"Saved results to maps_places_output.json\");\n } else if (this._onFinished === \"csv\") {\n const headers = [\"name\", \"address\", \"rating\", \"user_ratings_total\", \"place_id\", \"lat\", \"lng\"];\n const csvContent = [\n headers.join(\",\"),\n ...places.map(p => {\n return [\n `\"${(p.name || \"\").replace(/\"/g, '\"\"')}\"`,\n `\"${(p.formatted_address || \"\").replace(/\"/g, '\"\"')}\"`,\n p.rating || \"\",\n p.user_ratings_total || \"\",\n p.place_id,\n p.geometry?.location?.lat || \"\",\n p.geometry?.location?.lng || \"\"\n ].join(\",\")\n })\n ].join(\"\\n\");\n writeFileSync(\"maps_places_output.csv\", csvContent);\n if (this._showLogs) console.log(\"Saved results to maps_places_output.csv\");\n }\n }\n}\n\n/**\n * New Places API Query Builder (v1).\n */\nexport class NewPlaceQueryBuilder {\n private _location: Coordinate;\n private _radius: number = 4000;\n private _subRadius: number = 500; \n private _minRate: number = 4.1;\n private _limitCount: number | undefined;\n /**\n * The types of places to search for.\n * See [the API documentation](https://developers.google.com/maps/documentation/places/web-service/place-types#table-a)\n * @example [\"bar\", \"pub\", \"restaurant\", \"cafe\"]\n */\n private _types: string[] = [];\n private _fields: NearbySearchAttributes[] = [\"name\", \"displayName\", \"id\", \"formattedAddress\", \"rating\", \"location\", \"nationalPhoneNumber\", \"internationalPhoneNumber\", \"websiteUri\", \"googleMapsUri\", \"regularOpeningHours\", \"reservable\", \"parkingOptions\", \"priceLevel\", \"businessStatus\", \"utcOffsetMinutes\", \"userRatingCount\", \"types\", \"primaryType\", \"primaryTypeDisplayName\"]; // Defaults\n private _onFinished?: NewOutputFormat;\n private _showLogs: boolean = false;\n private _showProgress: boolean = false;\n private _apiKey: string | undefined;\n\n private _forceQueryClosedStores: boolean = false;\n private _excludedPrimaryTypes: string[] = [];\n\n constructor(location: Coordinate) {\n this._location = location;\n this._apiKey = process.env.NEXT_PUBLIC_GOOGLE_MAPS_API_KEY;\n }\n\n public placesTypes(types: string[]): this {\n this._types = types;\n return this;\n }\n\n public radius(radius: number): this {\n this._radius = radius;\n return this;\n }\n\n public minRate(rate: number): this {\n this._minRate = rate;\n return this;\n }\n\n public limit(max: number): this {\n this._limitCount = max;\n return this;\n }\n\n public apiKey(key: string): this {\n this._apiKey = key;\n return this;\n }\n\n /**\n * Specifies fields to return from the New Places API.\n * e.g. [\"displayName\", \"rating\", \"formattedAddress\"]\n */\n public fields(fields: NearbySearchAttributes[]): this {\n this._fields = [...this._fields, ...fields];\n return this;\n }\n\n public onFinished(format: NewOutputFormat): this {\n this._onFinished = format;\n return this;\n }\n\n public showLogs(): this {\n this._showLogs = true;\n return this;\n }\n\n public showProgress(): this {\n this._showProgress = true;\n return this;\n }\n\n public allowClosedStores(): this {\n this._forceQueryClosedStores = true;\n return this;\n }\n\n /**\n * Some of the types includes `chinese_restaurant`, `japanese_restaurant`, `italian_restaurant`, etc.\n * \n * You can see the types [here](https://developers.google.com/maps/documentation/places/web-service/place-types#table-a)\n * @param types \n * @returns \n */\n public excludedPrimaryTypes(types: string[]): this {\n this._excludedPrimaryTypes = types;\n return this;\n }\n\n public async run(): Promise<void> {\n if (!this._apiKey) {\n throw new Error(\"API Key is required.\");\n }\n if (!this._onFinished) {\n throw new Error(\"onFinished callback or format is required.\");\n }\n\n if (this._showLogs) console.log(\"Starting Google Places (New) query...\");\n\n let subCircles = generateSubCircles(this._location, this._radius, this._subRadius);\n \n // Same optimization logic\n if (this._limitCount) {\n const maxBatches = Math.ceil(this._limitCount / 20); // Note: New API limit is 20 per call\n if (subCircles.length > maxBatches) {\n for (let i = subCircles.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [subCircles[i], subCircles[j]] = [subCircles[j], subCircles[i]];\n }\n subCircles = subCircles.slice(0, maxBatches);\n }\n }\n\n const totalBatches = subCircles.length;\n const allPlacesMap = new Map<string, PlaceResult>();\n let processedBatches = 0;\n \n for (const circle of subCircles) {\n if (this._showLogs) console.log(`Querying batch ${processedBatches + 1}/${totalBatches}...`);\n \n const places = await fetchNewPlaces(\n circle, \n this._subRadius, \n this._types,\n this._apiKey,\n this._fields,\n (count) => {},\n this._forceQueryClosedStores,\n this._excludedPrimaryTypes\n );\n\n for (const place of places) {\n if (place.id) {\n allPlacesMap.set(place.id, place);\n }\n }\n\n processedBatches++;\n \n if (this._showProgress) {\n const percentage = ((processedBatches / totalBatches) * 100).toFixed(1);\n console.log(`Progress: ${percentage}%`);\n }\n\n await new Promise(r => setTimeout(r, 200)); \n if(processedBatches % 20 === 0) {\n await new Promise(r => setTimeout(r, 2000));\n }\n }\n\n let uniquePlaces = Array.from(allPlacesMap.values());\n uniquePlaces = uniquePlaces.filter(p => (p.rating || 0) >= this._minRate);\n\n if (this._limitCount && uniquePlaces.length > this._limitCount) {\n uniquePlaces = uniquePlaces.slice(0, this._limitCount);\n }\n if (this._showLogs) console.log(`Finished! Found ${uniquePlaces.length} unique places.`);\n\n this.handleOutput(uniquePlaces);\n }\n\n private handleOutput(places: PlaceResult[]) {\n if (typeof this._onFinished === \"function\") {\n this._onFinished(places);\n } else if (this._onFinished === \"json\") {\n const jsonContent = JSON.stringify(places, null, 2);\n writeFileSync(\"places_output.json\", jsonContent);\n if (this._showLogs) console.log(\"Saved results to places_output.json\");\n } else if (this._onFinished === \"csv\") {\n const headers = [\"id\", \"rating\", \"formattedAddress\", \"displayName\"];\n const csvContent = [\n headers.join(\",\"),\n ...places.map(p => {\n return [\n p.id,\n p.rating || \"\",\n `\"${(p.formattedAddress || \"\").replace(/\"/g, '\"\"')}\"`,\n `\"${(p.displayName?.text || p.name || \"\").replace(/\"/g, '\"\"')}\"`\n ].join(\",\")\n })\n ].join(\"\\n\");\n writeFileSync(\"places_output.csv\", csvContent);\n if (this._showLogs) console.log(\"Saved results to places_output.csv\");\n }\n }\n}\n\nexport function getLegacyGooglePlaces(location: Coordinate) {\n return new PlaceQueryBuilder(location);\n}\n\nexport function getGooglePlaces(location: Coordinate) {\n return new NewPlaceQueryBuilder(location);\n}\n"
|
|
8
8
|
],
|
|
9
|
-
"mappings": "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",
|
|
10
|
-
"debugId": "
|
|
9
|
+
"mappings": "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",
|
|
10
|
+
"debugId": "76E2A899F11EDB4F64756E2164756E21",
|
|
11
11
|
"names": []
|
|
12
12
|
}
|
package/dist/types.d.ts
CHANGED
|
@@ -81,6 +81,8 @@ export interface PlaceResult {
|
|
|
81
81
|
nationalPhoneNumber?: string;
|
|
82
82
|
internationalPhoneNumber?: string;
|
|
83
83
|
formattedAddress?: string;
|
|
84
|
+
primaryType?: string;
|
|
85
|
+
primaryTypeDisplayName?: string;
|
|
84
86
|
addressComponents?: Array<{
|
|
85
87
|
longText: string;
|
|
86
88
|
shortText: string;
|
|
@@ -140,7 +142,6 @@ export interface PlaceResult {
|
|
|
140
142
|
businessStatus?: string;
|
|
141
143
|
reservable?: boolean;
|
|
142
144
|
parkingOptions?: string[];
|
|
143
|
-
googleMapsLinks?: string[];
|
|
144
145
|
}
|
|
145
146
|
/**
|
|
146
147
|
* The following fields trigger the [Nearby Search Pro SKU](https://developers.google.com/maps/billing-and-pricing/sku-details#nearbysearch-pro-sku):
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAKD,MAAM,WAAW,eAAe;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE;QACT,QAAQ,CAAC,EAAE;YACT,GAAG,EAAE,MAAM,CAAC;YACZ,GAAG,EAAE,MAAM,CAAC;SACb,GAAG;YACF,GAAG,IAAI,MAAM,CAAC;YACd,GAAG,IAAI,MAAM,CAAC;SACf,CAAC;QACF,QAAQ,CAAC,EAAE;YACT,SAAS,EAAE;gBACT,GAAG,EAAE,MAAM,CAAC;gBACZ,GAAG,EAAE,MAAM,CAAC;aACb,CAAC;YACF,SAAS,EAAE;gBACT,GAAG,EAAE,MAAM,CAAC;gBACZ,GAAG,EAAE,MAAM,CAAC;aACb,CAAC;SACH,CAAC;KACH,CAAC;IACF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE;QACd,QAAQ,EAAE,OAAO,CAAC;QAClB,OAAO,CAAC,EAAE,KAAK,CAAC;YACd,KAAK,EAAE;gBACL,IAAI,EAAE,MAAM,CAAC;aACd,CAAC;YACF,IAAI,EAAE;gBACJ,IAAI,EAAE,MAAM,CAAC;aACd,CAAC;SACH,CAAC,CAAC;KACJ,CAAC;IACF,MAAM,CAAC,EAAE,KAAK,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,iBAAiB,EAAE,MAAM,EAAE,CAAC;QAC5B,eAAe,EAAE,MAAM,CAAC;QACxB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE;QACV,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,KAAK,CAAC;QACzB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,EAAE,CAAC;KACjB,CAAC,CAAC;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAID,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,EAAE;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,iBAAiB,CAAC,EAAE,KAAK,CAAC;QACxB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC,CAAC;IACH,QAAQ,CAAC,EAAE;QACT,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,GAAG,EAAE;YACH,QAAQ,EAAE,MAAM,CAAC;YACjB,SAAS,EAAE,MAAM,CAAC;SACnB,CAAC;QACF,IAAI,EAAE;YACJ,QAAQ,EAAE,MAAM,CAAC;YACjB,SAAS,EAAE,MAAM,CAAC;SACnB,CAAC;KACH,CAAC;IACF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE;QACpB,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,KAAK,CAAC;YACb,IAAI,EAAE;gBACJ,GAAG,EAAE,MAAM,CAAC;gBACZ,IAAI,EAAE,MAAM,CAAC;gBACb,MAAM,EAAE,MAAM,CAAC;aAChB,CAAC;YACF,KAAK,EAAE;gBACL,GAAG,EAAE,MAAM,CAAC;gBACZ,IAAI,EAAE,MAAM,CAAC;gBACb,MAAM,EAAE,MAAM,CAAC;aAChB,CAAC;SACH,CAAC,CAAC;QACH,mBAAmB,EAAE,MAAM,EAAE,CAAC;KAC/B,CAAC;IACF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,kBAAkB,EAAE,KAAK,CAAC;YACxB,WAAW,EAAE,MAAM,CAAC;YACpB,GAAG,EAAE,MAAM,CAAC;YACZ,QAAQ,EAAE,MAAM,CAAC;SAClB,CAAC,CAAC;KACJ,CAAC,CAAC;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAGD;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAC/B,sBAAsB,GACtB,mBAAmB,GACnB,mBAAmB,GACnB,kBAAkB,GAClB,cAAc,GACd,gBAAgB,GAChB,kBAAkB,GAClB,aAAa,GACb,kBAAkB,GAClB,iBAAiB,GACjB,eAAe,GACf,qBAAqB,GACrB,iBAAiB,GACjB,IAAI,GACJ,UAAU;AACZ;;GAEG;GACD,MAAM,GACN,YAAY,GACZ,cAAc,GACd,QAAQ,GACR,UAAU,GACV,eAAe,GACf,aAAa,GACb,wBAAwB,GACxB,yBAAyB,GACzB,uBAAuB,GACvB,iBAAiB,GACjB,OAAO,GACP,kBAAkB,GAClB,UAAU,CAAC;AAGf;;GAEG;AACH,MAAM,MAAM,8BAA8B,GACtC,qBAAqB,GACrB,8BAA8B,GAC9B,0BAA0B,GAC1B,qBAAqB,GACrB,YAAY,GACZ,YAAY,GACZ,QAAQ,GACR,qBAAqB,GACrB,8BAA8B,GAC9B,iBAAiB,GACjB,YAAY,CAAC;AAGjB;;GAEG;AACH,MAAM,MAAM,wCAAwC,GAChD,YAAY,GACZ,gBAAgB,GAChB,UAAU,GACV,QAAQ,GACR,kBAAkB,GAClB,wBAAwB,GACxB,iBAAiB,GACjB,aAAa,GACb,mBAAmB,GACnB,iBAAiB,GACjB,eAAe,GACf,uBAAuB,GACvB,WAAW,GACX,iBAAiB,GACjB,qBAAqB,GACrB,gBAAgB,GAChB,gBAAgB,GAChB,gBAAgB,GAChB,YAAY,GACZ,UAAU,GACV,SAAS,GACT,eAAe,GACf,kBAAkB,GAClB,YAAY,GACZ,iBAAiB,GACjB,cAAc,GACd,iBAAiB,GACjB,cAAc,GACd,eAAe,GACf,cAAc,GACd,aAAa,GACb,sBAAsB,GACtB,YAAY,GACZ,SAAS,CAAC;AAEd;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,uBAAuB,GAAG,8BAA8B,GAAG,wCAAwC,CAAC"}
|