155 lines
5 KiB
JavaScript
155 lines
5 KiB
JavaScript
/* eslint-disable import/no-absolute-path */
|
|
import getPrivateFile from '/imports/modules/server/get-private-file';
|
|
import { Meteor } from 'meteor/meteor';
|
|
import tbuffer from '@turf/buffer';
|
|
import emojiFlags from 'emoji-flags';
|
|
import tweet from '/imports/modules/server/twitter';
|
|
import countFiresInRegions from './countFires';
|
|
|
|
const debug = false;
|
|
|
|
const autonomies = tbuffer(JSON.parse(getPrivateFile('data/es-atlas-autonomies.json')), 0);
|
|
const portugal = tbuffer(JSON.parse(getPrivateFile('data/pt-atlas.json')), 0);
|
|
|
|
const europe = tbuffer(JSON.parse(getPrivateFile('data/europe-atlas.json')), 0);
|
|
|
|
const stringsToRemoveIberia = [
|
|
['Ciudad Autónoma de', ''],
|
|
['País Vasco/', ''],
|
|
['Pais Vasco', 'Euskadi'],
|
|
['Comunidad Foral de', ''],
|
|
['Región de', ''],
|
|
['Valencia', 'CValenciana'],
|
|
['Comunidad de Madrid', 'CMadrid'],
|
|
['León', 'CyLeón'],
|
|
['Leon', 'CyLeón'],
|
|
['Castilla-', ''],
|
|
['Cataluña/', ''],
|
|
['Cataluña', 'Catalunya'],
|
|
['La Mancha', 'CLMancha'],
|
|
['Baleares', 'IllesBalears'],
|
|
['Galicia', 'Galiza'],
|
|
['Principado de', ''],
|
|
[' ', '']
|
|
];
|
|
|
|
const emoji = (key, name, fires) => {
|
|
const emo = emojiFlags.countryCode(key.code);
|
|
if (!emo) {
|
|
if (Meteor.isDevelopment) console.log(`Cannot find flag for country ${name}: ${JSON.stringify(key)}`);
|
|
return '';
|
|
}
|
|
return `${emo.emoji} ${fires}`;
|
|
};
|
|
|
|
const composeEuropeTweet = (num, stats, abrev) => {
|
|
if (num <= 0) {
|
|
return '';
|
|
}
|
|
const keys = Object.keys(stats);
|
|
const numZones = keys.length;
|
|
let text = '';
|
|
keys.map((key, index) => { // , index
|
|
const zoneFires = stats[key].count;
|
|
const zoneFiresText = zoneFires > 1 ? index === 0 ? zoneFires : `${zoneFires}` : index === 0 ? 'One' : '1';
|
|
const what = index > 0 ? ' ' : zoneFires > 1 ? ' active #wildfires ' : ' active #wildfire ';
|
|
const subText = abrev ? emoji(stats[key], key, zoneFires) :
|
|
`${zoneFiresText}${what}in #{key}`;
|
|
let delimiter;
|
|
if (!abrev) {
|
|
delimiter = index === numZones - 1 ? ' and' : ',';
|
|
} else {
|
|
delimiter = ',';
|
|
}
|
|
|
|
const subTexts = index === 0 ? subText : `${delimiter} ${subText}`;
|
|
text += subTexts;
|
|
return '';
|
|
});
|
|
return `${text}`;
|
|
};
|
|
|
|
const composeIberiaTweet = (num, stats) => {
|
|
if (num <= 0) {
|
|
return '';
|
|
}
|
|
const keys = Object.keys(stats);
|
|
const numZones = keys.length;
|
|
let text = '';
|
|
keys.map((key, index) => { // , index
|
|
const zoneFires = stats[key].count;
|
|
const zoneFiresText = zoneFires > 1 ? index === 0 ? zoneFires : `otros ${zoneFires}` : index === 0 ? 'Un' : 'otro';
|
|
const what = index > 0 ? ' ' : zoneFires > 1 ? ' #fuegos activos ' : ' #fuego activo ';
|
|
const subText = `${zoneFiresText}${what}en #${key}`;
|
|
const delimiter = index === numZones - 1 ? ' y' : ',';
|
|
const subTexts = index === 0 ? subText : `${delimiter} ${subText}`;
|
|
text += subTexts;
|
|
return '';
|
|
});
|
|
return `${text}`;
|
|
};
|
|
|
|
const tweetHeaders = ['🔥'];
|
|
const tweetFooters = ['Más info en: https://fuegos.comunes.org/fires'];
|
|
|
|
|
|
const correctTweetSize = (tweetText) => {
|
|
const length = tweetText.length;
|
|
if (length > 280) {
|
|
if (Meteor.isDevelopment) console.log(`Tweet is too big (${length}): ${tweetText}`);
|
|
return false;
|
|
}
|
|
return true;
|
|
};
|
|
|
|
const tweetEuropeFires = () => {
|
|
const resultEu = countFiresInRegions(europe, [[' ', '']]);
|
|
|
|
if (resultEu.total > 0) {
|
|
let tweetText = `${tweetHeaders[0].trim()} ${composeEuropeTweet(resultEu.total, resultEu.fires, false)}. More info: https://fires.comunes.org/fires`;
|
|
if (!correctTweetSize(tweetText)) {
|
|
tweetText = `${tweetHeaders[0].trim()}Active #wildfires in #Europe:\n${composeEuropeTweet(resultEu.total, resultEu.fires, true)}. More info: https://fires.comunes.org/fires`;
|
|
}
|
|
if (!correctTweetSize(tweetText)) {
|
|
tweetText = `${tweetHeaders[0].trim()}Active #wildfires in #Europe:\n${composeEuropeTweet(resultEu.total, resultEu.fires, true)}`;
|
|
}
|
|
if (!correctTweetSize(tweetText)) {
|
|
tweetText = `${tweetHeaders[0].trim()} There are ${resultEu.total} active #wildfires in #Europe. More info: https://fires.comunes.org/fires`;
|
|
}
|
|
if (Meteor.isDevelopment) {
|
|
console.log(tweetText);
|
|
} else {
|
|
tweet(tweetText, 'en');
|
|
}
|
|
return tweetText;
|
|
}
|
|
};
|
|
|
|
const tweetIberiaFires = () => {
|
|
const resultEs = countFiresInRegions(autonomies, stringsToRemoveIberia);
|
|
const resultPt = countFiresInRegions(portugal, stringsToRemoveIberia);
|
|
|
|
const fires = Object.assign(resultEs.fires, resultPt.fires);
|
|
const total = resultEs.total + resultPt.total;
|
|
|
|
// console.log(`Total fires ${total}, ${JSON.stringify(fires)}`);
|
|
if (total > 0) {
|
|
const tweetText = `${tweetHeaders[0].trim()} ${composeIberiaTweet(total, fires)}. ${tweetFooters[0]}`;
|
|
if (correctTweetSize(tweetText)) {
|
|
if (Meteor.isDevelopment) {
|
|
console.log(tweetText);
|
|
} else {
|
|
tweet(tweetText, 'es');
|
|
}
|
|
}
|
|
return tweetText;
|
|
}
|
|
return '';
|
|
};
|
|
|
|
if (Meteor.isDevelopment && debug) {
|
|
tweetIberiaFires();
|
|
tweetEuropeFires();
|
|
}
|
|
|
|
export { composeIberiaTweet, tweetHeaders, tweetFooters, tweetIberiaFires, tweetEuropeFires };
|