var jsforce = require('jsforce')
var madkudu = require("@madkudu/madkudu-node")(process.env.madkudu_api_key)
const sequential = require('promise-sequential');
const _ = require('lodash')
const request = require("request") // You have to run `npm install request` for this script to work
var Airtable = require('airtable');
var base = new Airtable({ apiKey: process.env.airtable_crm_key }).base('appvKsBGHgvejGAe8');
const TITLE_SEARCH = 'marketing%2520operations%2Cdigital%2520marketing%2Cdemand%2520generation'
const main = function () {
var conn = new jsforce.Connection()
conn.login(process.env.salesforce_username, process.env.salesforce_password + process.env.salesforce_security_token)
.then((user_info) => {
return conn.query("SELECT Id, Facebook_Handle__c, last_lead_prospection_date__c, website, Name FROM Account WHERE Account_Source_Details__c = 'Datanyze' ")
.then(res => {
const array_with_domain = res.records
return linkedin_search(array_with_domain)
//return get_scores(res.records)
// .then(scores => {
// return conn.sobject("Account").update(scores)
//})
})
})
.catch(console.log)
}
async function linkedin_search(records) {
for (var i = 12; i < records.length; i++) {
console.log(records[i], i)
const profile = await get_profiles(records[i].Name)
console.log(profile)
const augmented_profiles = await augment_profiles_with_emails(profile, records[i].Website)
console.log(augmented_profiles)
if (augmented_profiles === undefined){
} else {
Promise.all(augmented_profiles.map(obj => {
insert_profile_into_airtable(obj)
}))
}
}
}
const augment_profiles_with_emails = async function (profiles, domain) {
const results = profiles.map(async (obj) => {
return get_email(obj.firstName, obj.lastName, domain)
});
return Promise.all(results)
.then(res => {
const augmented_profiles = []
for (var i = 0; i < res.length; i++) {
if (res[i] === null || res[i] === undefined) {
console.log("error")
} else {
var augmented_profile = profiles[i]
augmented_profile.email = res[i].email
augmented_profile.domain = res[i].domain
augmented_profile.score = res[i].score
augmented_profiles.push(augmented_profile)
}
}
// console.log('augmented_profiles')
// console.log(augmented_profiles)
return augmented_profiles
});
}
const get_email = async function (firstname, lastname, domain) {
if (domain === null || firstname === null || lastname === null){
return new Promise(resolve => {
request.get({ url:`https://api.hunter.io/v2/email-finder?domain=madkudu.com&first_name=kevin&last_name=rabesaotra---&api_key=${process.env.hunter_api_key}`, json: true }, (err, httpResponse, body) => {
console.log(err || body)
const results = body && body.data
// console.log('results: ' + JSON.stringify(results))
resolve(results)
})
})
} else {
return new Promise(resolve => {
request.get({ url:`https://api.hunter.io/v2/email-finder?domain=${domain}&first_name=${firstname}&last_name=${lastname}&api_key=${process.env.hunter_api_key}`, json: true }, (err, httpResponse, body) => {
console.log(err || body)
const results = body && body.data
// console.log('results: ' + JSON.stringify(results))
resolve(results)
})
})
}
}
const get_profiles = async function (company_name) {
return new Promise(resolve => {
const encoded_company_name = encodeURIComponent(company_name)
console.log(encoded_company_name)
const json = {
"output": "first-result-object",
"argument": {
"sessionCookie": process.env.raf_cookie,
"searches": "https://www.linkedin.com/sales/search/people?companyIncluded=" + encoded_company_name +"&companyTimeScope=CURRENT&doFetchHeroCard=false&logHistory=true&logId=2720283516&page=1&searchSessionId=1LlcH3E4SfGyHlFi0ydZew%3D%3D&titleIncluded=" + TITLE_SEARCH + "&titleTimeScope=CURRENT",
"numberOfProfiles": 5,
// "csvName": "api_data",
"extractDefaultUrl": true,
"removeDuplicateProfiles": false
}
}
const options = {
url: "https://phantombuster.com/api/v1/agent/94253/launch",
headers: { "X-Phantombuster-Key-1": process.env.phamtobuster_key },
json
}
console.log(json)
request.post(options, (err, httpResponse, body) => {
console.log(httpResponse)
console.log(err || body.data.resultObject)
const results = body && body.data && body.data.resultObject
resolve(body.data.resultObject)
})
})
}
const insert_profile_into_airtable = async function (profile) {
return new Promise(resolve => {
base('Kevin').create({
"email": profile.email,
"linkedin": profile.companyUrl,
"hunter_confidence": profile.score,
"domain": profile.domain,
"First Name": profile.firstName,
"Last Name": profile.lastName,
"title": profile.title,
"tenure": profile.duration,
"location": profile.location
}, function (err, record) {
if (err) { console.error(err); return; }
console.log(record.getId());
});
})
}
exports.endpoint = function (request, response) {
return main()
.then(() => { response.end("success") })
.catch(() => { response.end("error") })
}
main()