Google Alerts API for nodejs. See tests for all features coverage.
- Creating alerts (no support for few parameters)
- Fetching alerts
- Modifing alerts (no support for few parameters)
- Removing alerts
$ npm i -S google-alerts-api
const alerts = require('google-alerts-api');
Fetching alerts forces us to authenticate. Pass your credentials using configure
method:
- using mail/password
alerts.configure({
mail: '[email protected]',
password: '**********'
});
IMPORTANT: Due to the latest changes in Google, authentication with disabled JavaScript is permited. Still, you can generate cookies on your own and reuse it later on (see how to get cookies)
- using cookie, (see how to get cookies)
alerts.configure({
cookies: 'W3sia2V5IjoiR0FQUyIsInZhbHVlIjoiMTpCRXRtZEpjc...saGRasC==',
});
const alerts = require('google-alerts-api');
const { HOW_OFTEN, DELIVER_TO, HOW_MANY, SOURCE_TYPE } = alerts;
alerts.configure({
mail: '[email protected]',
password: '**********'
});
alerts.sync((err) => {
if(err) return console.log(err);
const alertList = alerts.getAlerts();
alertList.forEach(alert => printAlertInfo);
});
function printAlertInfo(alert) {
console.log('name:', alert.name);
//'How Many' property information:
if (alert.howMany === HOW_MANY.BEST) {
console.log('How many: Only the best results');
} else if (alert.howMany === HOW_MANY.ALL) {
console.log('How many: All Results');
}
}
{
name: '"Donald Trump * ISIS"',
id: '4f94515ec736ef62:ade5b03803caa237:com:en:PL:R',
howOften: 2, //use HOW_OFTEN enum to find out proper meaning
sources: '...', // some of SOURCE_TYPE enum property, SOURCE_TYPE.AUTOMATIC by default
lang: 'en',
region: 'PL',
howMany: 3, //use HOW_MANY enum to find out proper meaning
deliverTo: 2, //use DELIVER_TO enum to find out proper meaning
deliverToData: '', //email address, available when deliverTo === DELIVER_TO.MAIL
rss: 'https://google.com/alerts/feeds/00357582442749620569/11537740808718742679' //field available, when deliverTo === DELIVER_TO.RSS
}
Modify alert (see tests for more examples):
const { HOW_OFTEN, DELIVER_TO, HOW_MANY } = alerts;
alerts.sync((err) => {
if(err) return console.log(err);
const alertToModify = alerts.getAlerts()[0];
alerts.modify(alertToModify.id, {
name: '"(Donald OR Melania) Trump"'
}, () => {
alerts.sync(() => {
const syncedAlertsList = alerts.getAlerts();
//search in syncedAlertsList to check updated alert
});
});
});
function printAlertInfo(alert){
console.log('name:', alert.name);
//'How Many' property information:
if (alert.howMany === HOW_MANY.BEST) {
console.log('How many: Only the best results');
} else if (alert.howMany === HOW_MANY.ALL) {
console.log('How many: All Results');
}
}
const SOURCE_TYPE = {
AUTOMATIC,
NEWS,
BLOGS,
WEB,
NEWS_AND_BLOGS,
NEWS_AND_WEB,
BLOGS_AND_WEB,
VIDEO,
BOOKS,
DISCUSSIONS,
FINANCE,
};
alerts.sync(() => {
const alertToCreate = {
howOften: HOW_OFTEN.AT_MOST_ONCE_A_DAY,
sources: SOURCE_TYPE.AUTOMATIC, // default one
lang: 'en',
name: 'NodeJS AND "Chrome V8"',
region: 'PL', // or do not specify it at all, if you want "All Regions"
howMany: HOW_MANY.BEST,
deliverTo: DELIVER_TO.RSS,
deliverToData: ''
};
alerts.create(alertToCreate, (err, alert) => {
console.log(alert);
});
});
alerts.sync((err) => {
const alertToRemove = alerts.getAlerts()[0];
alerts.remove(alertToRemove.id, (err) => {
alerts.sync((err) => {
const syncedAlertsList = alerts.getAlerts(); //alertToRemove does not exists here.
});
});
});
You can authenticate once, and then use your cookies. Unfortunatelly it requires an additional action from you:
- Run "Dev Tools" tools and navigate "Network" tab (If you are in Chrome "Dev tools" make sure you have "Preserve log" option checked)
- Log in to Google
- Filter requests for "/signin/sl/challenge" pattern
- In "Response" section search for "set-cookie: " entries. You will need 3 values: SID (71 characters), HSID, SSID (both 17 characters). Then you can use it to generate cookies, just run the function with your variables:
const fs = require('fs')
const alerts = require('google-alerts-api')
const SID = ''
const HSID = ''
const SSID = ''
fs.writeFileSync('cookies.data', alerts.generateCookiesBySID(SID, HSID, SSID))
Then, put this output to "cookies" configuration:
const fs = require('fs')
const alerts = require('google-alerts-api')
alerts.configure({
cookies: fs.readFileSync('cookies.data').toString()
});
alerts.sync((err) => {
if(err) return console.log(err)
const alertList = alerts.getAlerts()
});
- https://accounts.google.com/b/1/DisplayUnlockCaptcha (make sure you are editing settings for proper user...)
- https://myaccount.google.com/lesssecureapps
- still can't authenticate? Check out how does the HTTP login response looks like:
api.reqHandler.login({
mail: MAIL,
password: PASSWORD
}, (err, debug) => {
console.log(debug.statusCode);
// For success, you should see here '302'.
console.log(debug.headers);
// For success, in 'set-cookie' header content, you should see SID, LSID, HID, SSID (etc.) definitions.
console.log(debug.body);
// For success, this should be short and include "LoginDoneHtml" and "Moved Temporarily" text inside.
});