-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathcannibalization-checker.js
93 lines (79 loc) · 2.78 KB
/
cannibalization-checker.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
const fs = require('fs');
const axios = require('axios');
const CredentialsStore = require('./credential-store');
const Serp = require('./serp');
var keyFileContents = fs.readFileSync('./keys.crd','utf8');
var credentialStore = new CredentialsStore(keyFileContents);
var dataForSeoUsername = credentialStore.getCredential('dataForSeoUsername');
var dataforSeoPassword = credentialStore.getCredential('dataForSeoPassword');
var clientSite = process.argv[2];
var keyword = process.argv.slice(3).join(' ');
checkForCannibalizing();
function checkForCannibalizing() {
const rankCheckRequest = constructRankCheckRequest(keyword);
getRank(rankCheckRequest, clientSite).then((rank) => {
console.log(`Rank for ${clientSite}, ${keyword} is ${rank}`);
});
const siteSearchRequest = constructSiteSearchRequest(clientSite, keyword);
getFirstResultOfSiteSearch(siteSearchRequest).then((result) => {
console.log(`Top rank match on site is ${result.url} with title ${result.title}`);
});
}
function getRank(postRequest, clientSite) {
return new Promise((resolve, reject) => {
axios(postRequest).then(function (response) {
var result = response['data']['tasks'];
var serp = new Serp(result);
resolve(serp.getFirstOccurrenceOfSite(clientSite));
}).catch(function (error) {
console.log(error);
});
})
}
function getFirstResultOfSiteSearch(postRequest) {
return new Promise((resolve, reject) => {
axios(postRequest).then(function (response) {
var result = response['data']['tasks'];
var serp = new Serp(result);
resolve(serp.getEntryNumber(1));
}).catch(function (error) {
console.log(error);
});
})
}
function constructSiteSearchRequest(clientSite, keyword) {
return {
method: 'post',
url: 'https://api.dataforseo.com/v3/serp/google/organic/live/regular',
auth: {
username: dataForSeoUsername,
password: dataforSeoPassword
},
data: [{
"keyword": `site:${clientSite} ${encodeURIComponent(keyword)}`,
"language_code": "en",
"location_code": 2840
}],
headers: {
'content-type': 'application/json'
}
};
}
function constructRankCheckRequest(keyword) {
return {
method: 'post',
url: 'https://api.dataforseo.com/v3/serp/google/organic/live/regular',
auth: {
username: dataForSeoUsername,
password: dataforSeoPassword
},
data: [{
"keyword": encodeURIComponent(keyword),
"language_code": "en",
"location_code": 2840
}],
headers: {
'content-type': 'application/json'
}
};
}