@seranking/n8n-nodes-seranking 1.3.7 → 1.3.9
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 +6 -4
- package/dist/nodes/SeRanking/dataApi/descriptions/DomainAnalysisDescription.js +274 -100
- package/dist/nodes/SeRanking/dataApi/descriptions/KeywordResearchDescription.js +277 -44
- package/dist/nodes/SeRanking/dataApi/operations/DomainAnalysisOperations.js +138 -60
- package/dist/nodes/SeRanking/dataApi/operations/KeywordResearchOperations.js +113 -18
- package/package.json +1 -1
|
@@ -3,6 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.DomainAnalysisOperations = DomainAnalysisOperations;
|
|
4
4
|
const apiRequest_1 = require("../../utils/apiRequest");
|
|
5
5
|
const validators_1 = require("../../utils/validators");
|
|
6
|
+
function buildMultiKeywordFilter(csv) {
|
|
7
|
+
return csv
|
|
8
|
+
.split(',')
|
|
9
|
+
.map((w) => w.trim())
|
|
10
|
+
.filter(Boolean)
|
|
11
|
+
.map((word) => [{ type: 'contains', value: word }]);
|
|
12
|
+
}
|
|
6
13
|
async function DomainAnalysisOperations(index) {
|
|
7
14
|
const operation = this.getNodeParameter('operation', index);
|
|
8
15
|
let endpoint = '';
|
|
@@ -33,45 +40,36 @@ async function DomainAnalysisOperations(index) {
|
|
|
33
40
|
}
|
|
34
41
|
const response = await apiRequest_1.apiRequest.call(this, method, endpoint, {}, params, index);
|
|
35
42
|
if (Array.isArray(response)) {
|
|
36
|
-
return response.map(item => ({
|
|
37
|
-
...item,
|
|
38
|
-
_domain: (0, validators_1.validateDomain)(domain)
|
|
39
|
-
}));
|
|
43
|
+
return response.map(item => ({ ...item, _domain: (0, validators_1.validateDomain)(domain) }));
|
|
40
44
|
}
|
|
41
45
|
else if (typeof response === 'object' && response !== null) {
|
|
42
|
-
return {
|
|
43
|
-
...response,
|
|
44
|
-
_domain: (0, validators_1.validateDomain)(domain)
|
|
45
|
-
};
|
|
46
|
+
return { ...response, _domain: (0, validators_1.validateDomain)(domain) };
|
|
46
47
|
}
|
|
47
48
|
return response;
|
|
48
49
|
}
|
|
49
50
|
case 'getWorldwideAggregateUrl': {
|
|
50
51
|
const url = this.getNodeParameter('url', index);
|
|
51
|
-
const
|
|
52
|
-
if (!url || url.trim() === '')
|
|
52
|
+
const additionalOptions = this.getNodeParameter('additionalOptions', index, {});
|
|
53
|
+
if (!url || url.trim() === '')
|
|
53
54
|
throw new Error('URL cannot be empty');
|
|
54
|
-
|
|
55
|
-
if (!url.match(/^https?:\/\//i)) {
|
|
55
|
+
if (!url.match(/^https?:\/\//i))
|
|
56
56
|
throw new Error('URL must include http:// or https://');
|
|
57
|
-
}
|
|
58
57
|
endpoint = '/domain/overview/worldwide/url';
|
|
59
58
|
params.url = url.trim();
|
|
60
|
-
if (
|
|
61
|
-
params.fields =
|
|
59
|
+
if (additionalOptions.fields)
|
|
60
|
+
params.fields = additionalOptions.fields.join(',');
|
|
62
61
|
break;
|
|
63
62
|
}
|
|
64
63
|
case 'getDomainPages': {
|
|
65
64
|
const target = this.getNodeParameter('target', index);
|
|
66
65
|
const source = this.getNodeParameter('source', index);
|
|
67
66
|
const type = this.getNodeParameter('type', index);
|
|
68
|
-
const scope = this.getNodeParameter('scope', index, 'base_domain');
|
|
69
67
|
const additionalFields = this.getNodeParameter('additionalFields', index, {});
|
|
70
68
|
endpoint = '/domain/pages';
|
|
71
69
|
params.target = (0, validators_1.validateDomain)(target);
|
|
72
70
|
params.source = (0, validators_1.validateSource)(source);
|
|
73
71
|
params.type = type;
|
|
74
|
-
params.scope = scope;
|
|
72
|
+
params.scope = additionalFields.scope || 'base_domain';
|
|
75
73
|
if (additionalFields.limit)
|
|
76
74
|
params.limit = additionalFields.limit;
|
|
77
75
|
if (additionalFields.offset)
|
|
@@ -80,36 +78,46 @@ async function DomainAnalysisOperations(index) {
|
|
|
80
78
|
params.order_field = additionalFields.orderField;
|
|
81
79
|
if (additionalFields.orderType)
|
|
82
80
|
params.order_type = additionalFields.orderType;
|
|
83
|
-
if (additionalFields.filterDomainUrl)
|
|
81
|
+
if (additionalFields.filterDomainUrl) {
|
|
84
82
|
params['filter[domain_url]'] = additionalFields.filterDomainUrl;
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
if (additionalFields.
|
|
90
|
-
params['filter[
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
if (additionalFields.
|
|
96
|
-
params['filter[
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
83
|
+
}
|
|
84
|
+
if (additionalFields.filterTrafficPercentFrom) {
|
|
85
|
+
params['filter[domain_traffic_percent][from]'] = additionalFields.filterTrafficPercentFrom;
|
|
86
|
+
}
|
|
87
|
+
if (additionalFields.filterTrafficPercentTo) {
|
|
88
|
+
params['filter[domain_traffic_percent][to]'] = additionalFields.filterTrafficPercentTo;
|
|
89
|
+
}
|
|
90
|
+
if (additionalFields.filterKeywordsCountFrom) {
|
|
91
|
+
params['filter[keywords_count][from]'] = additionalFields.filterKeywordsCountFrom;
|
|
92
|
+
}
|
|
93
|
+
if (additionalFields.filterKeywordsCountTo) {
|
|
94
|
+
params['filter[keywords_count][to]'] = additionalFields.filterKeywordsCountTo;
|
|
95
|
+
}
|
|
96
|
+
if (additionalFields.filterTrafficSumFrom) {
|
|
97
|
+
params['filter[traffic_sum][from]'] = additionalFields.filterTrafficSumFrom;
|
|
98
|
+
}
|
|
99
|
+
if (additionalFields.filterTrafficSumTo) {
|
|
100
|
+
params['filter[traffic_sum][to]'] = additionalFields.filterTrafficSumTo;
|
|
101
|
+
}
|
|
102
|
+
if (additionalFields.filterPriceSumFrom) {
|
|
103
|
+
params['filter[price_sum][from]'] = additionalFields.filterPriceSumFrom;
|
|
104
|
+
}
|
|
105
|
+
if (additionalFields.filterPriceSumTo) {
|
|
106
|
+
params['filter[price_sum][to]'] = additionalFields.filterPriceSumTo;
|
|
107
|
+
}
|
|
101
108
|
break;
|
|
102
109
|
}
|
|
103
110
|
case 'getDomainSubdomains': {
|
|
104
111
|
const target = this.getNodeParameter('target', index);
|
|
105
112
|
const source = this.getNodeParameter('source', index);
|
|
113
|
+
const scope = this.getNodeParameter('scope', index);
|
|
106
114
|
const type = this.getNodeParameter('type', index);
|
|
107
115
|
const additionalFields = this.getNodeParameter('additionalFields', index, {});
|
|
108
116
|
endpoint = '/domain/subdomains';
|
|
109
117
|
params.target = (0, validators_1.validateDomain)(target);
|
|
110
118
|
params.source = (0, validators_1.validateSource)(source);
|
|
111
119
|
params.type = type;
|
|
112
|
-
params.scope =
|
|
120
|
+
params.scope = scope;
|
|
113
121
|
if (additionalFields.limit)
|
|
114
122
|
params.limit = additionalFields.limit;
|
|
115
123
|
if (additionalFields.offset)
|
|
@@ -118,24 +126,33 @@ async function DomainAnalysisOperations(index) {
|
|
|
118
126
|
params.order_field = additionalFields.orderField;
|
|
119
127
|
if (additionalFields.orderType)
|
|
120
128
|
params.order_type = additionalFields.orderType;
|
|
121
|
-
if (additionalFields.filterDomainUrl)
|
|
129
|
+
if (additionalFields.filterDomainUrl) {
|
|
122
130
|
params['filter[domain_url]'] = additionalFields.filterDomainUrl;
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
if (additionalFields.
|
|
128
|
-
params['filter[
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
if (additionalFields.
|
|
134
|
-
params['filter[
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
131
|
+
}
|
|
132
|
+
if (additionalFields.filterTrafficPercentFrom) {
|
|
133
|
+
params['filter[domain_traffic_percent][from]'] = additionalFields.filterTrafficPercentFrom;
|
|
134
|
+
}
|
|
135
|
+
if (additionalFields.filterTrafficPercentTo) {
|
|
136
|
+
params['filter[domain_traffic_percent][to]'] = additionalFields.filterTrafficPercentTo;
|
|
137
|
+
}
|
|
138
|
+
if (additionalFields.filterKeywordsCountFrom) {
|
|
139
|
+
params['filter[keywords_count][from]'] = additionalFields.filterKeywordsCountFrom;
|
|
140
|
+
}
|
|
141
|
+
if (additionalFields.filterKeywordsCountTo) {
|
|
142
|
+
params['filter[keywords_count][to]'] = additionalFields.filterKeywordsCountTo;
|
|
143
|
+
}
|
|
144
|
+
if (additionalFields.filterTrafficSumFrom) {
|
|
145
|
+
params['filter[traffic_sum][from]'] = additionalFields.filterTrafficSumFrom;
|
|
146
|
+
}
|
|
147
|
+
if (additionalFields.filterTrafficSumTo) {
|
|
148
|
+
params['filter[traffic_sum][to]'] = additionalFields.filterTrafficSumTo;
|
|
149
|
+
}
|
|
150
|
+
if (additionalFields.filterPriceSumFrom) {
|
|
151
|
+
params['filter[price_sum][from]'] = additionalFields.filterPriceSumFrom;
|
|
152
|
+
}
|
|
153
|
+
if (additionalFields.filterPriceSumTo) {
|
|
154
|
+
params['filter[price_sum][to]'] = additionalFields.filterPriceSumTo;
|
|
155
|
+
}
|
|
139
156
|
break;
|
|
140
157
|
}
|
|
141
158
|
case 'getOverviewHistory': {
|
|
@@ -157,31 +174,93 @@ async function DomainAnalysisOperations(index) {
|
|
|
157
174
|
params.source = (0, validators_1.validateSource)(source);
|
|
158
175
|
params.domain = (0, validators_1.validateDomain)(domain);
|
|
159
176
|
params.type = type;
|
|
177
|
+
if (additionalFields.page)
|
|
178
|
+
params.page = additionalFields.page;
|
|
160
179
|
if (additionalFields.limit)
|
|
161
180
|
params.limit = additionalFields.limit;
|
|
162
|
-
if (additionalFields.offset)
|
|
163
|
-
params.offset = additionalFields.offset;
|
|
164
181
|
if (additionalFields.withSubdomains !== undefined) {
|
|
165
182
|
params.with_subdomains = additionalFields.withSubdomains ? 1 : 0;
|
|
166
183
|
}
|
|
167
184
|
if (additionalFields.cols)
|
|
168
|
-
params.cols = additionalFields.cols
|
|
185
|
+
params.cols = additionalFields.cols;
|
|
169
186
|
if (additionalFields.orderField)
|
|
170
187
|
params.order_field = additionalFields.orderField;
|
|
171
188
|
if (additionalFields.orderType)
|
|
172
189
|
params.order_type = additionalFields.orderType;
|
|
190
|
+
if (additionalFields.posChange)
|
|
191
|
+
params.pos_change = additionalFields.posChange;
|
|
173
192
|
if (additionalFields.volumeFrom)
|
|
174
193
|
params['filter[volume][from]'] = additionalFields.volumeFrom;
|
|
175
194
|
if (additionalFields.volumeTo)
|
|
176
195
|
params['filter[volume][to]'] = additionalFields.volumeTo;
|
|
196
|
+
if (additionalFields.trafficFrom)
|
|
197
|
+
params['filter[traffic][from]'] = additionalFields.trafficFrom;
|
|
198
|
+
if (additionalFields.trafficTo)
|
|
199
|
+
params['filter[traffic][to]'] = additionalFields.trafficTo;
|
|
200
|
+
if (additionalFields.trafficPercentFrom) {
|
|
201
|
+
params['filter[traffic_percent][from]'] = additionalFields.trafficPercentFrom;
|
|
202
|
+
}
|
|
203
|
+
if (additionalFields.trafficPercentTo) {
|
|
204
|
+
params['filter[traffic_percent][to]'] = additionalFields.trafficPercentTo;
|
|
205
|
+
}
|
|
177
206
|
if (additionalFields.positionFrom)
|
|
178
207
|
params['filter[position][from]'] = additionalFields.positionFrom;
|
|
179
208
|
if (additionalFields.positionTo)
|
|
180
209
|
params['filter[position][to]'] = additionalFields.positionTo;
|
|
210
|
+
if (additionalFields.keywordCountFrom) {
|
|
211
|
+
params['filter[keyword_count][from]'] = additionalFields.keywordCountFrom;
|
|
212
|
+
}
|
|
213
|
+
if (additionalFields.keywordCountTo) {
|
|
214
|
+
params['filter[keyword_count][to]'] = additionalFields.keywordCountTo;
|
|
215
|
+
}
|
|
216
|
+
if (additionalFields.charactersCountFrom) {
|
|
217
|
+
params['filter[characters_count][from]'] = additionalFields.charactersCountFrom;
|
|
218
|
+
}
|
|
219
|
+
if (additionalFields.charactersCountTo) {
|
|
220
|
+
params['filter[characters_count][to]'] = additionalFields.charactersCountTo;
|
|
221
|
+
}
|
|
181
222
|
if (additionalFields.cpcFrom)
|
|
182
223
|
params['filter[cpc][from]'] = additionalFields.cpcFrom;
|
|
183
224
|
if (additionalFields.cpcTo)
|
|
184
225
|
params['filter[cpc][to]'] = additionalFields.cpcTo;
|
|
226
|
+
if (additionalFields.priceFrom)
|
|
227
|
+
params['filter[price][from]'] = additionalFields.priceFrom;
|
|
228
|
+
if (additionalFields.priceTo)
|
|
229
|
+
params['filter[price][to]'] = additionalFields.priceTo;
|
|
230
|
+
if (additionalFields.competitionFrom) {
|
|
231
|
+
params['filter[competition][from]'] = additionalFields.competitionFrom;
|
|
232
|
+
}
|
|
233
|
+
if (additionalFields.competitionTo) {
|
|
234
|
+
params['filter[competition][to]'] = additionalFields.competitionTo;
|
|
235
|
+
}
|
|
236
|
+
if (additionalFields.difficultyFrom) {
|
|
237
|
+
params['filter[difficulty][from]'] = additionalFields.difficultyFrom;
|
|
238
|
+
}
|
|
239
|
+
if (additionalFields.difficultyTo) {
|
|
240
|
+
params['filter[difficulty][to]'] = additionalFields.difficultyTo;
|
|
241
|
+
}
|
|
242
|
+
if (additionalFields.serpFeatures) {
|
|
243
|
+
params['filter[serp_features]'] = additionalFields.serpFeatures;
|
|
244
|
+
}
|
|
245
|
+
if (additionalFields.intents && additionalFields.intents.length > 0) {
|
|
246
|
+
params['filter[intents]'] = additionalFields.intents.join(',');
|
|
247
|
+
}
|
|
248
|
+
if (additionalFields.multiKeywordIncluded) {
|
|
249
|
+
params['filter[multi_keyword_included]'] = JSON.stringify(buildMultiKeywordFilter(additionalFields.multiKeywordIncluded));
|
|
250
|
+
}
|
|
251
|
+
if (additionalFields.multiKeywordExcluded) {
|
|
252
|
+
params['filter[multi_keyword_excluded]'] = JSON.stringify(buildMultiKeywordFilter(additionalFields.multiKeywordExcluded));
|
|
253
|
+
}
|
|
254
|
+
if (additionalFields.serpFeatures2Mode && additionalFields.serpFeatures2Value) {
|
|
255
|
+
params['filter[serp_features_2][mode]'] = additionalFields.serpFeatures2Mode;
|
|
256
|
+
additionalFields.serpFeatures2Value
|
|
257
|
+
.split(',')
|
|
258
|
+
.map((v) => v.trim())
|
|
259
|
+
.filter(Boolean)
|
|
260
|
+
.forEach((val, i) => {
|
|
261
|
+
params[`filter[serp_features_2][value][${i}]`] = val;
|
|
262
|
+
});
|
|
263
|
+
}
|
|
185
264
|
break;
|
|
186
265
|
}
|
|
187
266
|
case 'getKeywordsComparison': {
|
|
@@ -195,12 +274,12 @@ async function DomainAnalysisOperations(index) {
|
|
|
195
274
|
params.domain = (0, validators_1.validateDomain)(domain);
|
|
196
275
|
params.compare = (0, validators_1.validateDomain)(compareDomain);
|
|
197
276
|
params.type = type;
|
|
277
|
+
if (additionalFields.page)
|
|
278
|
+
params.page = additionalFields.page;
|
|
198
279
|
if (additionalFields.limit)
|
|
199
280
|
params.limit = additionalFields.limit;
|
|
200
|
-
if (additionalFields.offset)
|
|
201
|
-
params.offset = additionalFields.offset;
|
|
202
281
|
if (additionalFields.cols)
|
|
203
|
-
params.cols = additionalFields.cols
|
|
282
|
+
params.cols = additionalFields.cols;
|
|
204
283
|
if (additionalFields.orderField)
|
|
205
284
|
params.order_field = additionalFields.orderField;
|
|
206
285
|
if (additionalFields.orderType)
|
|
@@ -234,9 +313,8 @@ async function DomainAnalysisOperations(index) {
|
|
|
234
313
|
const keyword = this.getNodeParameter('keyword', index);
|
|
235
314
|
const source = this.getNodeParameter('source', index);
|
|
236
315
|
const additionalFields = this.getNodeParameter('additionalFields', index, {});
|
|
237
|
-
if (!keyword || keyword.trim() === '')
|
|
316
|
+
if (!keyword || keyword.trim() === '')
|
|
238
317
|
throw new Error('Keyword cannot be empty');
|
|
239
|
-
}
|
|
240
318
|
endpoint = '/domain/ads';
|
|
241
319
|
params.source = (0, validators_1.validateSource)(source);
|
|
242
320
|
params.keyword = keyword.trim();
|
|
@@ -3,6 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.KeywordResearchOperations = KeywordResearchOperations;
|
|
4
4
|
const apiRequest_1 = require("../../utils/apiRequest");
|
|
5
5
|
const validators_1 = require("../../utils/validators");
|
|
6
|
+
function buildMultiKeywordFilter(csv) {
|
|
7
|
+
return csv
|
|
8
|
+
.split(',')
|
|
9
|
+
.map((w) => w.trim())
|
|
10
|
+
.filter(Boolean)
|
|
11
|
+
.map((word) => [{ type: 'contains', value: word }]);
|
|
12
|
+
}
|
|
6
13
|
async function KeywordResearchOperations(index) {
|
|
7
14
|
const operation = this.getNodeParameter('operation', index);
|
|
8
15
|
let endpoint = '';
|
|
@@ -34,9 +41,8 @@ async function KeywordResearchOperations(index) {
|
|
|
34
41
|
const source = this.getNodeParameter('source', index);
|
|
35
42
|
const keyword = this.getNodeParameter('keyword', index);
|
|
36
43
|
const additionalFields = this.getNodeParameter('additionalFields', index, {});
|
|
37
|
-
if (!keyword || keyword.trim() === '')
|
|
44
|
+
if (!keyword || keyword.trim() === '')
|
|
38
45
|
throw new Error('Keyword cannot be empty');
|
|
39
|
-
}
|
|
40
46
|
endpoint = '/keywords/similar';
|
|
41
47
|
params.source = (0, validators_1.validateSource)(source);
|
|
42
48
|
params.keyword = keyword.trim();
|
|
@@ -55,27 +61,54 @@ async function KeywordResearchOperations(index) {
|
|
|
55
61
|
params['filter[volume][from]'] = additionalFields.volumeFrom;
|
|
56
62
|
if (additionalFields.volumeTo)
|
|
57
63
|
params['filter[volume][to]'] = additionalFields.volumeTo;
|
|
58
|
-
if (additionalFields.difficultyFrom)
|
|
64
|
+
if (additionalFields.difficultyFrom) {
|
|
59
65
|
params['filter[difficulty][from]'] = additionalFields.difficultyFrom;
|
|
60
|
-
|
|
66
|
+
}
|
|
67
|
+
if (additionalFields.difficultyTo) {
|
|
61
68
|
params['filter[difficulty][to]'] = additionalFields.difficultyTo;
|
|
69
|
+
}
|
|
62
70
|
if (additionalFields.cpcFrom)
|
|
63
71
|
params['filter[cpc][from]'] = additionalFields.cpcFrom;
|
|
64
72
|
if (additionalFields.cpcTo)
|
|
65
73
|
params['filter[cpc][to]'] = additionalFields.cpcTo;
|
|
66
|
-
if (additionalFields.competitionFrom)
|
|
74
|
+
if (additionalFields.competitionFrom) {
|
|
67
75
|
params['filter[competition][from]'] = additionalFields.competitionFrom;
|
|
68
|
-
|
|
76
|
+
}
|
|
77
|
+
if (additionalFields.competitionTo) {
|
|
69
78
|
params['filter[competition][to]'] = additionalFields.competitionTo;
|
|
79
|
+
}
|
|
80
|
+
if (additionalFields.keywordCountFrom) {
|
|
81
|
+
params['filter[keyword_count][from]'] = additionalFields.keywordCountFrom;
|
|
82
|
+
}
|
|
83
|
+
if (additionalFields.keywordCountTo) {
|
|
84
|
+
params['filter[keyword_count][to]'] = additionalFields.keywordCountTo;
|
|
85
|
+
}
|
|
86
|
+
if (additionalFields.charactersCountFrom) {
|
|
87
|
+
params['filter[characters_count][from]'] = additionalFields.charactersCountFrom;
|
|
88
|
+
}
|
|
89
|
+
if (additionalFields.charactersCountTo) {
|
|
90
|
+
params['filter[characters_count][to]'] = additionalFields.charactersCountTo;
|
|
91
|
+
}
|
|
92
|
+
if (additionalFields.serpFeatures) {
|
|
93
|
+
params['filter[serp_features]'] = additionalFields.serpFeatures;
|
|
94
|
+
}
|
|
95
|
+
if (additionalFields.intents && additionalFields.intents.length > 0) {
|
|
96
|
+
params['filter[intents]'] = additionalFields.intents.join(',');
|
|
97
|
+
}
|
|
98
|
+
if (additionalFields.multiKeywordIncluded) {
|
|
99
|
+
params['filter[multi_keyword_included]'] = JSON.stringify(buildMultiKeywordFilter(additionalFields.multiKeywordIncluded));
|
|
100
|
+
}
|
|
101
|
+
if (additionalFields.multiKeywordExcluded) {
|
|
102
|
+
params['filter[multi_keyword_excluded]'] = JSON.stringify(buildMultiKeywordFilter(additionalFields.multiKeywordExcluded));
|
|
103
|
+
}
|
|
70
104
|
break;
|
|
71
105
|
}
|
|
72
106
|
case 'getRelated': {
|
|
73
107
|
const source = this.getNodeParameter('source', index);
|
|
74
108
|
const keyword = this.getNodeParameter('keyword', index);
|
|
75
109
|
const additionalFields = this.getNodeParameter('additionalFields', index, {});
|
|
76
|
-
if (!keyword || keyword.trim() === '')
|
|
110
|
+
if (!keyword || keyword.trim() === '')
|
|
77
111
|
throw new Error('Keyword cannot be empty');
|
|
78
|
-
}
|
|
79
112
|
endpoint = '/keywords/related';
|
|
80
113
|
params.source = (0, validators_1.validateSource)(source);
|
|
81
114
|
params.keyword = keyword.trim();
|
|
@@ -94,27 +127,54 @@ async function KeywordResearchOperations(index) {
|
|
|
94
127
|
params['filter[volume][from]'] = additionalFields.volumeFrom;
|
|
95
128
|
if (additionalFields.volumeTo)
|
|
96
129
|
params['filter[volume][to]'] = additionalFields.volumeTo;
|
|
97
|
-
if (additionalFields.difficultyFrom)
|
|
130
|
+
if (additionalFields.difficultyFrom) {
|
|
98
131
|
params['filter[difficulty][from]'] = additionalFields.difficultyFrom;
|
|
99
|
-
|
|
132
|
+
}
|
|
133
|
+
if (additionalFields.difficultyTo) {
|
|
100
134
|
params['filter[difficulty][to]'] = additionalFields.difficultyTo;
|
|
135
|
+
}
|
|
101
136
|
if (additionalFields.cpcFrom)
|
|
102
137
|
params['filter[cpc][from]'] = additionalFields.cpcFrom;
|
|
103
138
|
if (additionalFields.cpcTo)
|
|
104
139
|
params['filter[cpc][to]'] = additionalFields.cpcTo;
|
|
105
|
-
if (additionalFields.competitionFrom)
|
|
140
|
+
if (additionalFields.competitionFrom) {
|
|
106
141
|
params['filter[competition][from]'] = additionalFields.competitionFrom;
|
|
107
|
-
|
|
142
|
+
}
|
|
143
|
+
if (additionalFields.competitionTo) {
|
|
108
144
|
params['filter[competition][to]'] = additionalFields.competitionTo;
|
|
145
|
+
}
|
|
146
|
+
if (additionalFields.keywordCountFrom) {
|
|
147
|
+
params['filter[keyword_count][from]'] = additionalFields.keywordCountFrom;
|
|
148
|
+
}
|
|
149
|
+
if (additionalFields.keywordCountTo) {
|
|
150
|
+
params['filter[keyword_count][to]'] = additionalFields.keywordCountTo;
|
|
151
|
+
}
|
|
152
|
+
if (additionalFields.charactersCountFrom) {
|
|
153
|
+
params['filter[characters_count][from]'] = additionalFields.charactersCountFrom;
|
|
154
|
+
}
|
|
155
|
+
if (additionalFields.charactersCountTo) {
|
|
156
|
+
params['filter[characters_count][to]'] = additionalFields.charactersCountTo;
|
|
157
|
+
}
|
|
158
|
+
if (additionalFields.serpFeatures) {
|
|
159
|
+
params['filter[serp_features]'] = additionalFields.serpFeatures;
|
|
160
|
+
}
|
|
161
|
+
if (additionalFields.intents && additionalFields.intents.length > 0) {
|
|
162
|
+
params['filter[intents]'] = additionalFields.intents.join(',');
|
|
163
|
+
}
|
|
164
|
+
if (additionalFields.multiKeywordIncluded) {
|
|
165
|
+
params['filter[multi_keyword_included]'] = JSON.stringify(buildMultiKeywordFilter(additionalFields.multiKeywordIncluded));
|
|
166
|
+
}
|
|
167
|
+
if (additionalFields.multiKeywordExcluded) {
|
|
168
|
+
params['filter[multi_keyword_excluded]'] = JSON.stringify(buildMultiKeywordFilter(additionalFields.multiKeywordExcluded));
|
|
169
|
+
}
|
|
109
170
|
break;
|
|
110
171
|
}
|
|
111
172
|
case 'getQuestions': {
|
|
112
173
|
const source = this.getNodeParameter('source', index);
|
|
113
174
|
const keyword = this.getNodeParameter('keyword', index);
|
|
114
175
|
const additionalFields = this.getNodeParameter('additionalFields', index, {});
|
|
115
|
-
if (!keyword || keyword.trim() === '')
|
|
176
|
+
if (!keyword || keyword.trim() === '')
|
|
116
177
|
throw new Error('Keyword cannot be empty');
|
|
117
|
-
}
|
|
118
178
|
endpoint = '/keywords/questions';
|
|
119
179
|
params.source = (0, validators_1.validateSource)(source);
|
|
120
180
|
params.keyword = keyword.trim();
|
|
@@ -133,19 +193,54 @@ async function KeywordResearchOperations(index) {
|
|
|
133
193
|
params['filter[volume][from]'] = additionalFields.volumeFrom;
|
|
134
194
|
if (additionalFields.volumeTo)
|
|
135
195
|
params['filter[volume][to]'] = additionalFields.volumeTo;
|
|
136
|
-
if (additionalFields.difficultyFrom)
|
|
196
|
+
if (additionalFields.difficultyFrom) {
|
|
137
197
|
params['filter[difficulty][from]'] = additionalFields.difficultyFrom;
|
|
138
|
-
|
|
198
|
+
}
|
|
199
|
+
if (additionalFields.difficultyTo) {
|
|
139
200
|
params['filter[difficulty][to]'] = additionalFields.difficultyTo;
|
|
201
|
+
}
|
|
202
|
+
if (additionalFields.cpcFrom)
|
|
203
|
+
params['filter[cpc][from]'] = additionalFields.cpcFrom;
|
|
204
|
+
if (additionalFields.cpcTo)
|
|
205
|
+
params['filter[cpc][to]'] = additionalFields.cpcTo;
|
|
206
|
+
if (additionalFields.competitionFrom) {
|
|
207
|
+
params['filter[competition][from]'] = additionalFields.competitionFrom;
|
|
208
|
+
}
|
|
209
|
+
if (additionalFields.competitionTo) {
|
|
210
|
+
params['filter[competition][to]'] = additionalFields.competitionTo;
|
|
211
|
+
}
|
|
212
|
+
if (additionalFields.keywordCountFrom) {
|
|
213
|
+
params['filter[keyword_count][from]'] = additionalFields.keywordCountFrom;
|
|
214
|
+
}
|
|
215
|
+
if (additionalFields.keywordCountTo) {
|
|
216
|
+
params['filter[keyword_count][to]'] = additionalFields.keywordCountTo;
|
|
217
|
+
}
|
|
218
|
+
if (additionalFields.charactersCountFrom) {
|
|
219
|
+
params['filter[characters_count][from]'] = additionalFields.charactersCountFrom;
|
|
220
|
+
}
|
|
221
|
+
if (additionalFields.charactersCountTo) {
|
|
222
|
+
params['filter[characters_count][to]'] = additionalFields.charactersCountTo;
|
|
223
|
+
}
|
|
224
|
+
if (additionalFields.serpFeatures) {
|
|
225
|
+
params['filter[serp_features]'] = additionalFields.serpFeatures;
|
|
226
|
+
}
|
|
227
|
+
if (additionalFields.intents && additionalFields.intents.length > 0) {
|
|
228
|
+
params['filter[intents]'] = additionalFields.intents.join(',');
|
|
229
|
+
}
|
|
230
|
+
if (additionalFields.multiKeywordIncluded) {
|
|
231
|
+
params['filter[multi_keyword_included]'] = JSON.stringify(buildMultiKeywordFilter(additionalFields.multiKeywordIncluded));
|
|
232
|
+
}
|
|
233
|
+
if (additionalFields.multiKeywordExcluded) {
|
|
234
|
+
params['filter[multi_keyword_excluded]'] = JSON.stringify(buildMultiKeywordFilter(additionalFields.multiKeywordExcluded));
|
|
235
|
+
}
|
|
140
236
|
break;
|
|
141
237
|
}
|
|
142
238
|
case 'getLongtail': {
|
|
143
239
|
const source = this.getNodeParameter('source', index);
|
|
144
240
|
const keyword = this.getNodeParameter('keyword', index);
|
|
145
241
|
const additionalFields = this.getNodeParameter('additionalFields', index, {});
|
|
146
|
-
if (!keyword || keyword.trim() === '')
|
|
242
|
+
if (!keyword || keyword.trim() === '')
|
|
147
243
|
throw new Error('Keyword cannot be empty');
|
|
148
|
-
}
|
|
149
244
|
endpoint = '/keywords/longtail';
|
|
150
245
|
params.source = (0, validators_1.validateSource)(source);
|
|
151
246
|
params.keyword = keyword.trim();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seranking/n8n-nodes-seranking",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.9",
|
|
4
4
|
"description": "n8n connector for SE Ranking API - AI Search, Backlinks, Domain Analysis, Keyword Research, and Website Audit",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://github.com/seranking/n8n-nodes-seranking",
|