@microlink/google 1.0.6 → 1.2.1
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/package.json +3 -3
- package/src/index.d.ts +4 -0
- package/src/index.js +36 -13
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@microlink/google",
|
|
3
3
|
"description": "Structured Google data from 10 verticals through Microlink API",
|
|
4
4
|
"homepage": "https://github.com/microlinkhq/microlink",
|
|
5
|
-
"version": "1.
|
|
5
|
+
"version": "1.2.1",
|
|
6
6
|
"exports": {
|
|
7
7
|
"types": "./src/index.d.ts",
|
|
8
8
|
"require": "./src/index.js",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"serp"
|
|
37
37
|
],
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@microlink/mql": "0.18.
|
|
39
|
+
"@microlink/mql": "0.18.1"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"ava": "latest",
|
|
@@ -66,5 +66,5 @@
|
|
|
66
66
|
"test": "exit 0"
|
|
67
67
|
},
|
|
68
68
|
"license": "MIT",
|
|
69
|
-
"gitHead": "
|
|
69
|
+
"gitHead": "755abe6066dfc709e3c7bff2ddf08377902fd42e"
|
|
70
70
|
}
|
package/src/index.d.ts
CHANGED
|
@@ -56,6 +56,9 @@ interface Options {
|
|
|
56
56
|
limit?: number
|
|
57
57
|
location?: Location
|
|
58
58
|
period?: Period
|
|
59
|
+
page?: number
|
|
60
|
+
html?: boolean
|
|
61
|
+
markdown?: boolean
|
|
59
62
|
}
|
|
60
63
|
|
|
61
64
|
interface Sitelink {
|
|
@@ -315,6 +318,7 @@ export declare function buildUrl(
|
|
|
315
318
|
location?: string
|
|
316
319
|
type?: Type
|
|
317
320
|
period?: Period
|
|
321
|
+
page?: number
|
|
318
322
|
}
|
|
319
323
|
): URL
|
|
320
324
|
|
package/src/index.js
CHANGED
|
@@ -9,10 +9,11 @@ const buildPath = (query, limit, location) =>
|
|
|
9
9
|
.filter(v => v !== undefined)
|
|
10
10
|
.join('/')
|
|
11
11
|
|
|
12
|
-
const buildUrl = (query, { limit, location, type, period } = {}) => {
|
|
12
|
+
const buildUrl = (query, { limit, location, type, period, page } = {}) => {
|
|
13
13
|
const url = new URL(`https://${DOMAIN}/${buildPath(query, limit, location)}`)
|
|
14
14
|
if (type) url.searchParams.set('type', type)
|
|
15
15
|
if (period) url.searchParams.set('period', period)
|
|
16
|
+
if (page > 1) url.searchParams.set('page', String(page))
|
|
16
17
|
return url
|
|
17
18
|
}
|
|
18
19
|
|
|
@@ -26,9 +27,11 @@ const fetchDataField = async (url, mqlOpts, field, attr) => {
|
|
|
26
27
|
return data[field]
|
|
27
28
|
}
|
|
28
29
|
|
|
29
|
-
const fetchPage = async (url, mqlOpts,
|
|
30
|
-
url.searchParams.set('
|
|
31
|
-
|
|
30
|
+
const fetchPage = async (url, mqlOpts, page, query, last) => {
|
|
31
|
+
if (page > 1) url.searchParams.set('page', String(page))
|
|
32
|
+
else url.searchParams.delete('page')
|
|
33
|
+
const { data, response } = await mql(url.toString(), mqlOpts)
|
|
34
|
+
last.response = response
|
|
32
35
|
const { results, ...extra } = data
|
|
33
36
|
|
|
34
37
|
return {
|
|
@@ -58,20 +61,40 @@ const fetchPage = async (url, mqlOpts, offset, query) => {
|
|
|
58
61
|
}
|
|
59
62
|
}),
|
|
60
63
|
next: () =>
|
|
61
|
-
fetchPage(
|
|
62
|
-
new URL(url.toString()),
|
|
63
|
-
mqlOpts,
|
|
64
|
-
offset + results.length,
|
|
65
|
-
query
|
|
66
|
-
)
|
|
64
|
+
fetchPage(new URL(url.toString()), mqlOpts, page + 1, query, last)
|
|
67
65
|
}
|
|
68
66
|
}
|
|
69
67
|
|
|
68
|
+
const resolve = async (item, key) => {
|
|
69
|
+
if (typeof item[key] === 'function') item[key] = await item[key]()
|
|
70
|
+
}
|
|
71
|
+
|
|
70
72
|
const createGoogleClient = ctxOpts => {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
73
|
+
const last = {}
|
|
74
|
+
const client = async (
|
|
75
|
+
query,
|
|
76
|
+
{ limit, location, type, period, html, markdown, page = 1, ...opts } = {}
|
|
77
|
+
) => {
|
|
78
|
+
const url = buildUrl(query, { limit, location, type, period, page })
|
|
79
|
+
const result = await fetchPage(
|
|
80
|
+
url,
|
|
81
|
+
{ ...ctxOpts, ...opts },
|
|
82
|
+
page,
|
|
83
|
+
query,
|
|
84
|
+
last
|
|
85
|
+
)
|
|
86
|
+
if (html) {
|
|
87
|
+
await resolve(result, 'html')
|
|
88
|
+
await Promise.all(result.results.map(item => resolve(item, 'html')))
|
|
89
|
+
}
|
|
90
|
+
if (markdown) {
|
|
91
|
+
await resolve(result, 'markdown')
|
|
92
|
+
await Promise.all(result.results.map(item => resolve(item, 'markdown')))
|
|
93
|
+
}
|
|
94
|
+
return result
|
|
74
95
|
}
|
|
96
|
+
Object.defineProperty(client, 'last', { value: last })
|
|
97
|
+
return client
|
|
75
98
|
}
|
|
76
99
|
|
|
77
100
|
module.exports = createGoogleClient
|