naukri-ninja
Version:
Naukri automation tool to fetch, filter , and apply for jobs automatically using gen ai.
158 lines (143 loc) • 9.26 kB
JavaScript
const { getFormattedDate, localStorage } = require("./utils/helper");
const commonHeaders = {
accept: "application/json",
"accept-language": "en-IN,en-GB;q=0.9,en-US;q=0.8,en;q=0.7",
appid: "109",
"cache-control": "no-cache",
clientid: "d3skt0p",
"content-type": "application/json",
gid: "LOCATION,INDUSTRY,EDUCATION,FAREA_ROLE",
pragma: "no-cache",
priority: "u=1, i",
nkparam:
"oFYlsMP9SN/18UTJyWR0J4Far8aGlf/RgiTehgjzAfodyCTha++NVMb+jAOJjH4rULRVnn65HS1K0dD3clyVyQ==",
"sec-ch-ua":
'"Chromium";v="124", "Google Chrome";v="124", "Not-A.Brand";v="99"',
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": '"Windows"',
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-origin",
"x-requested-with": "XMLHttpRequest",
systemid: "Naukri",
"Referer-Policy": "strict-origin-when-cross-origin",
};
const getHeaders = (isAuthenticated, isCookieRequired) => {
const authorization = localStorage.getItem("authorization");
const headers = {
...commonHeaders,
...(isAuthenticated && {
authorization: `Bearer ${authorization}`,
Cookie: `nauk_at=${authorization})}`,
}),
...(isCookieRequired && {
cookie:
'_t_ds=1beede871734549822-111beede87-01beede87; J=0; jd=031224508425; _gcl_au=1.1.1303359034.1734549824; test=naukri.com; PS=055474c5913207df0833da5505f0939499f983faf0fa15fe03810eecac297038719f715d2eb9dbc0ebdf31417b362f0d; MYNAUKRI[UNID]=8cdb4e75d73f4f71b0d8bac441c6b12c; NKWAP=db4fc3d77f3654247ba809e089a4c0fd58822d409817dbb65901a3ad0448c2d9ff003c62a2e1a36431b890266d0ecd01~e57335e68a4c79d57991fe1eeace01ba06af162a82756b4726a28621705d5d90~1~0; _ga=GA1.1.1388380775.1734549825; tStp=1737416650760; g_state={"i_p":1737657921031,"i_l":1}; ninjas_new_marketing_token=55944671e42bfe1914d9ff0ff85958bc; ph_phc_s4aJa5RpiiZlHbbxy4Y1Btjhosozg9ECrSuJNVrvZuP_posthog=%7B%22distinct_id%22%3A636236%7D; _clck=1xl6nx5%7C2%7Cftq%7C0%7C1882; _ga_7TYVEWTVRG=GS1.1.1740493309.1.1.1740493404.0.0.0; _ga_JCSR1LRE3X=GS1.1.1740493309.1.1.1740493404.0.0.0; nauk_rt=06ad020b47564912a1dcf732b3d8d6db; nauk_sid=06ad020b47564912a1dcf732b3d8d6db; nauk_otl=06ad020b47564912a1dcf732b3d8d6db; nauk_ps=default; _ga_T749QGK6MQ=GS1.1.1740805728.17.0.1740805735.0.0.0; _fbp=fb.1.1740806059199.527055654643871937; nauk_at=eyJraWQiOiIyIiwidHlwIjoiSldUIiwiYWxnIjoiUlM1MTIifQ.eyJ1ZF9yZXNJZCI6MTgwNDAzNzg4LCJzdWIiOiIxODYwMDM2OTIiLCJ1ZF91c2VybmFtZSI6ImYxNTg0NTA1MDEuODU5NCIsInVkX2lzRW1haWwiOnRydWUsImlzcyI6IkluZm9FZGdlIEluZGlhIFB2dC4gTHRkLiIsInVzZXJBZ2VudCI6Ik1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMzMuMC4wLjAgU2FmYXJpLzUzNy4zNiBFZGcvMTMzLjAuMC4wIiwiaXBBZHJlc3MiOiIyMDIuMTM2LjcxLjIxIiwidWRfaXNUZWNoT3BzTG9naW4iOmZhbHNlLCJ1c2VySWQiOjE4NjAwMzY5Miwic3ViVXNlclR5cGUiOiIiLCJ1c2VyU3RhdGUiOiJBVVRIRU5USUNBVEVEIiwidWRfaXNQYWlkQ2xpZW50IjpmYWxzZSwidWRfZW1haWxWZXJpZmllZCI6dHJ1ZSwidXNlclR5cGUiOiJqb2JzZWVrZXIiLCJzZXNzaW9uU3RhdFRpbWUiOiIyMDI1LTAzLTAxVDEwOjM4OjU1IiwidWRfZW1haWwiOiJwcmFuZXNobmFuZ2FyZTEwQGdtYWlsLmNvbSIsInVzZXJSb2xlIjoidXNlciIsImV4cCI6MTc0MTE2NTg1OCwidG9rZW5UeXBlIjoiYWNjZXNzVG9rZW4iLCJpYXQiOjE3NDExNjIyNTgsImp0aSI6IjA2YWQwMjBiNDc1NjQ5MTJhMWRjZjczMmIzZDhkNmRiIiwicG9kSWQiOiJwcm9kLWNkNWY5OTU2ZC1yZ2JiMiJ9.bINKV_ioApLrIp4Ds4rs4Hliex7wQvCMRCPNVuf_7OlB22jD4qW5gdyB-04hrSOU3SfbJHkIFqSCzdYefNzAGJYrZ1w2oCphhaFPf47v1Hqq0lKDsU2o_Xh1EmMP4WjnAVawMAirDt73lJ7sM9tPMVW2lg77JeFp4r4_zwXwhBsvVhhtqaTpUGujayXkOTSJHEayi6IrFGvHaMFetlyljrpcLqCrxkj84Jd-5N0KsmlxB0O2atPmq_fEFYj-QHn3fUVpK1a2jKOcgPbPWJdRvXI-XSS6Pc68NNMPSlxNMyOENM0NfWhqNbB_M25xjNKRqeeHO2R4rjEJ4GltzoKirg; is_login=1; failLoginCount=0; bm_mi=25C4DF0C9D23844026BF8545A7493391~YAAQjwFAF6WhwkqVAQAAZd5cZRu5bQVSPvxOehBLDgCH1cmOPWX9ywbvErvCGeCaLm22dkGCKIYGTem+AmT4QNTprdMalY/fzqOL+lg6hKbs35JO0YDgoLdBqnHiUzqLFJXEAiM0Xw9bZBNtSTi+19zxqGuw7klhg/05I6ZmqPNajvOCYCokFMTyqmx2hhlXh/bcyZ977E2NpjWMlsMLjfQ24MM6AlUb5DwtLlraO7V0yUjv/rfAGvWSraND04sqx1G27/16MBGe53NMpDFxYRusUXlOJa7OXoCk3rOhP6pmbPoGAf6tcBiNhuTBcCbIh0JkWousXWWjtrwf~1; bm_sv=72EC5EECED8663E61B5F53296CFAB689~YAAQjwFAF6ahwkqVAQAAZd5cZRuwzC+T97bc7pMME3dGvc4sDUteTrqN1qgT4Jv++F/GMc3Gl4i8bpK0GY1u71fQbOOm7W01RZpapKss/D2GBDqqglk0spGtm+X+kNm66PoPYHJBBKPfb/XfviCjQUstW2NPkTQzhA1lZcyIUhifgpNvDnzbe+Borfyn0YMP+Bx/R1PjLQelyXXL/72A6J0xKSm1iu617QbKaIc0fp9X2pmJr3U/uqbDgbUMExFd~1; ACTIVE=1741162794; PHPSESSID=g26v5nevtamg5t75ncf959n0hm; ak_bmsc=6B919B2227BDDF9899767992AC73D3E5~000000000000000000000000000000~YAAQjwFAF7CFw0qVAQAA089jZRtOgHd6WBOJ6LvWJzUdpX1gsX2TbeKQwZoC7Ld350XAY3ksZNLAVV3cTqb1iFh8rmYzX4oBA/jLCSJOHjqTUvZB6O4eE8T2NmcEmpZ1IMah6SLBWsRKgAlL6MPuEHZUbJGAE8e2wV6g8ZbqcphaxmD9L2osba21SJTpoZLDjbYKi62m/UrWf7dVnO9P52ZsXMyfT5g1CMkbNIN12ebHO68jfFlcU31/u9VeawT3LBgLscdPXVsuYuDd6+l+wiO1HDNk2BWcPn+tt1wJIswBjSzS1t7coWAKwvOoDxPV/cFqyquq3Ywx3FBIKRqh3F9ESRCj2fPCmpKVFeSYaTxAMcqD/yuVmzQxKUzj8AQ8OdjVzI/lma8jsKrJ35Sj8lSa7No2Z74hW85rXMY3MKMHeTHE9UGw8PpPmC9IbcOtQ60LurYFLiykWolkDzSgXPR/ffK68tuKe83IaYyA2jPn/TI3lYiuNMlzgnBlFpk=; HOWTORT=ul=1741163260430&r=https%3A%2F%2Fwww.naukri.com%2Fjob-listings-manager-software-engineering-planview-india-private-limited-bengaluru-5-to-8-years-030325502839%3Fsrc%3Ddrecomm_apply%26sid%3D17411627956384809%26xp%3D2%26px%3D1&hd=1741163260596; _ga_K2YBNZVRLL=GS1.1.1741162260.66.1.1741163260.55.0.0',
}),
};
return headers;
};
const applyJobsAPI = async (bodyStr) =>
fetch(
"https://www.naukri.com/cloudgateway-workflow/workflow-services/apply-workflow/v1/apply",
{
headers: getHeaders(true, false),
body: `${bodyStr},"logstr":"--drecomm_profile-2-F-0-1--17140801091455348-","flowtype":"show","crossdomain":true,"jquery":1,"rdxMsgId":"","chatBotSDK":true,"mandatory_skills":["CSS","HTML","React.Js"],"optional_skills":["Typescript","Angular"],"applyTypeId":"107","closebtn":"y","applySrc":"drecomm_profile","sid":"17140801091455348","mid":""}`,
method: "POST",
}
);
const searchJobsAPI = (pageNo, keywords) =>
fetch(
`https://www.naukri.com/jobapi/v3/search?noOfResults=20&urlType=search_by_key_loc&searchType=adv&location=pune%2C%20mumbai%2C%20bengaluru%2C%20bangalore&keyword=${keywords}&sort=p&pageNo=${pageNo}&experience=3&ctcFilter=6to10&ctcFilter=10to15&ctcFilter=15to25&ctcFilter=25to50&ctcFilter=50to75&ctcFilter=75to100&k=${keywords}&l=pune%2C%20mumbai%2C%20bengaluru%2C%20bangalore&nignbevent_src=jobsearchDeskGNB&experience=3&ctcFilter=6to10&ctcFilter=10to15&ctcFilter=15to25&ctcFilter=25to50&ctcFilter=50to75&ctcFilter=75to100&src=cluster&latLong=18.7506117_73.8764436&sid=17143714288347830_8`,
{
headers: getHeaders(true, false),
body: null,
method: "GET",
}
);
const getJobDetailsAPI = (jobId) =>
fetch(
`https://www.naukri.com/jobapi/v4/job/${jobId}?microsite=y&src=jobsearchDesk&sid=1714278791789807&xp=1&px=1`,
{
headers: getHeaders(true, true),
body: null,
method: "GET",
}
);
const getSimJobsAPI = (jobId) =>
fetch(
`https://www.naukri.com/jobapi/v2/search/simjobs/${jobId}?noOfResults=6&searchType=sim`,
{
headers: getHeaders(true, false),
body: null,
method: "GET",
}
);
const loginAPI = (creds) =>
fetch("https://www.naukri.com/central-login-services/v1/login", {
headers: {
...getHeaders(false, false),
systemid: "jobseeker",
},
body: `{"username": "${creds.username}","password":"${creds.password}"}`,
method: "POST",
});
const getRecommendedJobsAPI = async (clusterId) =>
fetch("https://www.naukri.com/jobapi/v2/search/recom-jobs", {
headers: getHeaders(true, false),
body: `{"clusterId":"${clusterId}","src":"recommClusterApi","clusterSplitDate":{"apply":"${getFormattedDate()}","preference":"${getFormattedDate()}","profile":"${getFormattedDate()}","similar_jobs":"${getFormattedDate()}"}}`,
method: "POST",
});
const getProfileDetailsAPI = async () =>
fetch(
"https://www.naukri.com/cloudgateway-mynaukri/resman-aggregator-services/v2/users/self?expand_level=4",
{
headers: getHeaders(true, false),
body: null,
method: "GET",
}
);
const matchScoreAPI = async (jobId) =>
fetch(`https://www.naukri.com/jobapi/v3/job/${jobId}/matchscore`, {
headers: getHeaders(true, false),
body: null,
method: "GET",
});
const incrementCounterAPI = async (useCase = 'newJobApplied') =>
fetch(`https://us-central1-easyledger-ed2ef.cloudfunctions.net/apiCounter?useCase=${useCase}`, {
headers: {
"Content-Type": "application/json",
},
body: null,
method: "GET",
});
const getResumeAPI = async (profileId) =>
fetch(
`https://www.naukri.com/cloudgateway-mynaukri/resman-aggregator-services/v1/users/self/profiles/${profileId}/resume`, {
headers: {
...getHeaders(true, false),
"content-type": "application/pdf",
},
method: "GET",
});
const getConstantsAPI = async (type) =>
fetch(`https://getdata-856678010611.us-central1.run.app?type=${type}`, {
headers: {
"Content-Type": "application/json",
},
body: null,
method: "GET",
});
module.exports = {
applyJobsAPI,
searchJobsAPI,
getJobDetailsAPI,
getSimJobsAPI,
loginAPI,
getRecommendedJobsAPI,
getProfileDetailsAPI,
incrementCounterAPI,
matchScoreAPI,
getResumeAPI,
getConstantsAPI,
};