@seranking/n8n-nodes-seranking 1.3.7 → 1.3.8
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 +5 -3
- package/dist/nodes/SeRanking/dataApi/descriptions/DomainAnalysisDescription.js +239 -100
- package/dist/nodes/SeRanking/dataApi/descriptions/KeywordResearchDescription.js +277 -44
- package/dist/nodes/SeRanking/dataApi/operations/DomainAnalysisOperations.js +115 -60
- package/dist/nodes/SeRanking/dataApi/operations/KeywordResearchOperations.js +113 -18
- package/package.json +1 -1
|
@@ -33,45 +33,36 @@ async function DomainAnalysisOperations(index) {
|
|
|
33
33
|
}
|
|
34
34
|
const response = await apiRequest_1.apiRequest.call(this, method, endpoint, {}, params, index);
|
|
35
35
|
if (Array.isArray(response)) {
|
|
36
|
-
return response.map(item => ({
|
|
37
|
-
...item,
|
|
38
|
-
_domain: (0, validators_1.validateDomain)(domain)
|
|
39
|
-
}));
|
|
36
|
+
return response.map(item => ({ ...item, _domain: (0, validators_1.validateDomain)(domain) }));
|
|
40
37
|
}
|
|
41
38
|
else if (typeof response === 'object' && response !== null) {
|
|
42
|
-
return {
|
|
43
|
-
...response,
|
|
44
|
-
_domain: (0, validators_1.validateDomain)(domain)
|
|
45
|
-
};
|
|
39
|
+
return { ...response, _domain: (0, validators_1.validateDomain)(domain) };
|
|
46
40
|
}
|
|
47
41
|
return response;
|
|
48
42
|
}
|
|
49
43
|
case 'getWorldwideAggregateUrl': {
|
|
50
44
|
const url = this.getNodeParameter('url', index);
|
|
51
|
-
const
|
|
52
|
-
if (!url || url.trim() === '')
|
|
45
|
+
const additionalOptions = this.getNodeParameter('additionalOptions', index, {});
|
|
46
|
+
if (!url || url.trim() === '')
|
|
53
47
|
throw new Error('URL cannot be empty');
|
|
54
|
-
|
|
55
|
-
if (!url.match(/^https?:\/\//i)) {
|
|
48
|
+
if (!url.match(/^https?:\/\//i))
|
|
56
49
|
throw new Error('URL must include http:// or https://');
|
|
57
|
-
}
|
|
58
50
|
endpoint = '/domain/overview/worldwide/url';
|
|
59
51
|
params.url = url.trim();
|
|
60
|
-
if (
|
|
61
|
-
params.fields =
|
|
52
|
+
if (additionalOptions.fields)
|
|
53
|
+
params.fields = additionalOptions.fields.join(',');
|
|
62
54
|
break;
|
|
63
55
|
}
|
|
64
56
|
case 'getDomainPages': {
|
|
65
57
|
const target = this.getNodeParameter('target', index);
|
|
66
58
|
const source = this.getNodeParameter('source', index);
|
|
67
59
|
const type = this.getNodeParameter('type', index);
|
|
68
|
-
const scope = this.getNodeParameter('scope', index, 'base_domain');
|
|
69
60
|
const additionalFields = this.getNodeParameter('additionalFields', index, {});
|
|
70
61
|
endpoint = '/domain/pages';
|
|
71
62
|
params.target = (0, validators_1.validateDomain)(target);
|
|
72
63
|
params.source = (0, validators_1.validateSource)(source);
|
|
73
64
|
params.type = type;
|
|
74
|
-
params.scope = scope;
|
|
65
|
+
params.scope = additionalFields.scope || 'base_domain';
|
|
75
66
|
if (additionalFields.limit)
|
|
76
67
|
params.limit = additionalFields.limit;
|
|
77
68
|
if (additionalFields.offset)
|
|
@@ -80,36 +71,46 @@ async function DomainAnalysisOperations(index) {
|
|
|
80
71
|
params.order_field = additionalFields.orderField;
|
|
81
72
|
if (additionalFields.orderType)
|
|
82
73
|
params.order_type = additionalFields.orderType;
|
|
83
|
-
if (additionalFields.filterDomainUrl)
|
|
74
|
+
if (additionalFields.filterDomainUrl) {
|
|
84
75
|
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
|
-
|
|
76
|
+
}
|
|
77
|
+
if (additionalFields.filterTrafficPercentFrom) {
|
|
78
|
+
params['filter[domain_traffic_percent][from]'] = additionalFields.filterTrafficPercentFrom;
|
|
79
|
+
}
|
|
80
|
+
if (additionalFields.filterTrafficPercentTo) {
|
|
81
|
+
params['filter[domain_traffic_percent][to]'] = additionalFields.filterTrafficPercentTo;
|
|
82
|
+
}
|
|
83
|
+
if (additionalFields.filterKeywordsCountFrom) {
|
|
84
|
+
params['filter[keywords_count][from]'] = additionalFields.filterKeywordsCountFrom;
|
|
85
|
+
}
|
|
86
|
+
if (additionalFields.filterKeywordsCountTo) {
|
|
87
|
+
params['filter[keywords_count][to]'] = additionalFields.filterKeywordsCountTo;
|
|
88
|
+
}
|
|
89
|
+
if (additionalFields.filterTrafficSumFrom) {
|
|
90
|
+
params['filter[traffic_sum][from]'] = additionalFields.filterTrafficSumFrom;
|
|
91
|
+
}
|
|
92
|
+
if (additionalFields.filterTrafficSumTo) {
|
|
93
|
+
params['filter[traffic_sum][to]'] = additionalFields.filterTrafficSumTo;
|
|
94
|
+
}
|
|
95
|
+
if (additionalFields.filterPriceSumFrom) {
|
|
96
|
+
params['filter[price_sum][from]'] = additionalFields.filterPriceSumFrom;
|
|
97
|
+
}
|
|
98
|
+
if (additionalFields.filterPriceSumTo) {
|
|
99
|
+
params['filter[price_sum][to]'] = additionalFields.filterPriceSumTo;
|
|
100
|
+
}
|
|
101
101
|
break;
|
|
102
102
|
}
|
|
103
103
|
case 'getDomainSubdomains': {
|
|
104
104
|
const target = this.getNodeParameter('target', index);
|
|
105
105
|
const source = this.getNodeParameter('source', index);
|
|
106
|
+
const scope = this.getNodeParameter('scope', index);
|
|
106
107
|
const type = this.getNodeParameter('type', index);
|
|
107
108
|
const additionalFields = this.getNodeParameter('additionalFields', index, {});
|
|
108
109
|
endpoint = '/domain/subdomains';
|
|
109
110
|
params.target = (0, validators_1.validateDomain)(target);
|
|
110
111
|
params.source = (0, validators_1.validateSource)(source);
|
|
111
112
|
params.type = type;
|
|
112
|
-
params.scope =
|
|
113
|
+
params.scope = scope;
|
|
113
114
|
if (additionalFields.limit)
|
|
114
115
|
params.limit = additionalFields.limit;
|
|
115
116
|
if (additionalFields.offset)
|
|
@@ -118,24 +119,33 @@ async function DomainAnalysisOperations(index) {
|
|
|
118
119
|
params.order_field = additionalFields.orderField;
|
|
119
120
|
if (additionalFields.orderType)
|
|
120
121
|
params.order_type = additionalFields.orderType;
|
|
121
|
-
if (additionalFields.filterDomainUrl)
|
|
122
|
+
if (additionalFields.filterDomainUrl) {
|
|
122
123
|
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
|
-
|
|
124
|
+
}
|
|
125
|
+
if (additionalFields.filterTrafficPercentFrom) {
|
|
126
|
+
params['filter[domain_traffic_percent][from]'] = additionalFields.filterTrafficPercentFrom;
|
|
127
|
+
}
|
|
128
|
+
if (additionalFields.filterTrafficPercentTo) {
|
|
129
|
+
params['filter[domain_traffic_percent][to]'] = additionalFields.filterTrafficPercentTo;
|
|
130
|
+
}
|
|
131
|
+
if (additionalFields.filterKeywordsCountFrom) {
|
|
132
|
+
params['filter[keywords_count][from]'] = additionalFields.filterKeywordsCountFrom;
|
|
133
|
+
}
|
|
134
|
+
if (additionalFields.filterKeywordsCountTo) {
|
|
135
|
+
params['filter[keywords_count][to]'] = additionalFields.filterKeywordsCountTo;
|
|
136
|
+
}
|
|
137
|
+
if (additionalFields.filterTrafficSumFrom) {
|
|
138
|
+
params['filter[traffic_sum][from]'] = additionalFields.filterTrafficSumFrom;
|
|
139
|
+
}
|
|
140
|
+
if (additionalFields.filterTrafficSumTo) {
|
|
141
|
+
params['filter[traffic_sum][to]'] = additionalFields.filterTrafficSumTo;
|
|
142
|
+
}
|
|
143
|
+
if (additionalFields.filterPriceSumFrom) {
|
|
144
|
+
params['filter[price_sum][from]'] = additionalFields.filterPriceSumFrom;
|
|
145
|
+
}
|
|
146
|
+
if (additionalFields.filterPriceSumTo) {
|
|
147
|
+
params['filter[price_sum][to]'] = additionalFields.filterPriceSumTo;
|
|
148
|
+
}
|
|
139
149
|
break;
|
|
140
150
|
}
|
|
141
151
|
case 'getOverviewHistory': {
|
|
@@ -157,31 +167,77 @@ async function DomainAnalysisOperations(index) {
|
|
|
157
167
|
params.source = (0, validators_1.validateSource)(source);
|
|
158
168
|
params.domain = (0, validators_1.validateDomain)(domain);
|
|
159
169
|
params.type = type;
|
|
170
|
+
if (additionalFields.page)
|
|
171
|
+
params.page = additionalFields.page;
|
|
160
172
|
if (additionalFields.limit)
|
|
161
173
|
params.limit = additionalFields.limit;
|
|
162
|
-
if (additionalFields.offset)
|
|
163
|
-
params.offset = additionalFields.offset;
|
|
164
174
|
if (additionalFields.withSubdomains !== undefined) {
|
|
165
175
|
params.with_subdomains = additionalFields.withSubdomains ? 1 : 0;
|
|
166
176
|
}
|
|
167
177
|
if (additionalFields.cols)
|
|
168
|
-
params.cols = additionalFields.cols
|
|
178
|
+
params.cols = additionalFields.cols;
|
|
169
179
|
if (additionalFields.orderField)
|
|
170
180
|
params.order_field = additionalFields.orderField;
|
|
171
181
|
if (additionalFields.orderType)
|
|
172
182
|
params.order_type = additionalFields.orderType;
|
|
183
|
+
if (additionalFields.posChange)
|
|
184
|
+
params.pos_change = additionalFields.posChange;
|
|
173
185
|
if (additionalFields.volumeFrom)
|
|
174
186
|
params['filter[volume][from]'] = additionalFields.volumeFrom;
|
|
175
187
|
if (additionalFields.volumeTo)
|
|
176
188
|
params['filter[volume][to]'] = additionalFields.volumeTo;
|
|
189
|
+
if (additionalFields.trafficFrom)
|
|
190
|
+
params['filter[traffic][from]'] = additionalFields.trafficFrom;
|
|
191
|
+
if (additionalFields.trafficTo)
|
|
192
|
+
params['filter[traffic][to]'] = additionalFields.trafficTo;
|
|
193
|
+
if (additionalFields.trafficPercentFrom) {
|
|
194
|
+
params['filter[traffic_percent][from]'] = additionalFields.trafficPercentFrom;
|
|
195
|
+
}
|
|
196
|
+
if (additionalFields.trafficPercentTo) {
|
|
197
|
+
params['filter[traffic_percent][to]'] = additionalFields.trafficPercentTo;
|
|
198
|
+
}
|
|
177
199
|
if (additionalFields.positionFrom)
|
|
178
200
|
params['filter[position][from]'] = additionalFields.positionFrom;
|
|
179
201
|
if (additionalFields.positionTo)
|
|
180
202
|
params['filter[position][to]'] = additionalFields.positionTo;
|
|
203
|
+
if (additionalFields.keywordCountFrom) {
|
|
204
|
+
params['filter[keyword_count][from]'] = additionalFields.keywordCountFrom;
|
|
205
|
+
}
|
|
206
|
+
if (additionalFields.keywordCountTo) {
|
|
207
|
+
params['filter[keyword_count][to]'] = additionalFields.keywordCountTo;
|
|
208
|
+
}
|
|
209
|
+
if (additionalFields.charactersCountFrom) {
|
|
210
|
+
params['filter[characters_count][from]'] = additionalFields.charactersCountFrom;
|
|
211
|
+
}
|
|
212
|
+
if (additionalFields.charactersCountTo) {
|
|
213
|
+
params['filter[characters_count][to]'] = additionalFields.charactersCountTo;
|
|
214
|
+
}
|
|
181
215
|
if (additionalFields.cpcFrom)
|
|
182
216
|
params['filter[cpc][from]'] = additionalFields.cpcFrom;
|
|
183
217
|
if (additionalFields.cpcTo)
|
|
184
218
|
params['filter[cpc][to]'] = additionalFields.cpcTo;
|
|
219
|
+
if (additionalFields.priceFrom)
|
|
220
|
+
params['filter[price][from]'] = additionalFields.priceFrom;
|
|
221
|
+
if (additionalFields.priceTo)
|
|
222
|
+
params['filter[price][to]'] = additionalFields.priceTo;
|
|
223
|
+
if (additionalFields.competitionFrom) {
|
|
224
|
+
params['filter[competition][from]'] = additionalFields.competitionFrom;
|
|
225
|
+
}
|
|
226
|
+
if (additionalFields.competitionTo) {
|
|
227
|
+
params['filter[competition][to]'] = additionalFields.competitionTo;
|
|
228
|
+
}
|
|
229
|
+
if (additionalFields.difficultyFrom) {
|
|
230
|
+
params['filter[difficulty][from]'] = additionalFields.difficultyFrom;
|
|
231
|
+
}
|
|
232
|
+
if (additionalFields.difficultyTo) {
|
|
233
|
+
params['filter[difficulty][to]'] = additionalFields.difficultyTo;
|
|
234
|
+
}
|
|
235
|
+
if (additionalFields.serpFeatures) {
|
|
236
|
+
params['filter[serp_features]'] = additionalFields.serpFeatures;
|
|
237
|
+
}
|
|
238
|
+
if (additionalFields.intents && additionalFields.intents.length > 0) {
|
|
239
|
+
params['filter[intents]'] = additionalFields.intents.join(',');
|
|
240
|
+
}
|
|
185
241
|
break;
|
|
186
242
|
}
|
|
187
243
|
case 'getKeywordsComparison': {
|
|
@@ -195,12 +251,12 @@ async function DomainAnalysisOperations(index) {
|
|
|
195
251
|
params.domain = (0, validators_1.validateDomain)(domain);
|
|
196
252
|
params.compare = (0, validators_1.validateDomain)(compareDomain);
|
|
197
253
|
params.type = type;
|
|
254
|
+
if (additionalFields.page)
|
|
255
|
+
params.page = additionalFields.page;
|
|
198
256
|
if (additionalFields.limit)
|
|
199
257
|
params.limit = additionalFields.limit;
|
|
200
|
-
if (additionalFields.offset)
|
|
201
|
-
params.offset = additionalFields.offset;
|
|
202
258
|
if (additionalFields.cols)
|
|
203
|
-
params.cols = additionalFields.cols
|
|
259
|
+
params.cols = additionalFields.cols;
|
|
204
260
|
if (additionalFields.orderField)
|
|
205
261
|
params.order_field = additionalFields.orderField;
|
|
206
262
|
if (additionalFields.orderType)
|
|
@@ -234,9 +290,8 @@ async function DomainAnalysisOperations(index) {
|
|
|
234
290
|
const keyword = this.getNodeParameter('keyword', index);
|
|
235
291
|
const source = this.getNodeParameter('source', index);
|
|
236
292
|
const additionalFields = this.getNodeParameter('additionalFields', index, {});
|
|
237
|
-
if (!keyword || keyword.trim() === '')
|
|
293
|
+
if (!keyword || keyword.trim() === '')
|
|
238
294
|
throw new Error('Keyword cannot be empty');
|
|
239
|
-
}
|
|
240
295
|
endpoint = '/domain/ads';
|
|
241
296
|
params.source = (0, validators_1.validateSource)(source);
|
|
242
297
|
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.8",
|
|
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",
|