Skip to content

Instantly share code, notes, and snippets.

@yadomi
Last active January 17, 2016 21:17
Show Gist options
  • Save yadomi/0e0196a3bd1d4432260e to your computer and use it in GitHub Desktop.
Save yadomi/0e0196a3bd1d4432260e to your computer and use it in GitHub Desktop.
JSON Endpoint for Meteo France Vigilance map (running live at https://meteo-vigilance.herokuapp.com/)
[{
"name": "Aisne",
"number": "02"
}, {
"name": "Marne",
"number": "51"
}, {
"name": "Pas-de-Calais",
"number": "62"
}, {
"name": "Moselle",
"number": "57"
}, {
"name": "Finistère",
"number": "29"
}, {
"name": "Côtes-d'Armor",
"number": "22"
}, {
"name": "Morbihan",
"number": "56"
}, {
"name": "Charente-Maritime",
"number": "17"
}, {
"name": "Eure",
"number": "27"
}, {
"name": "Val-d'Oise",
"number": "95"
}, {
"name": "Seine-et-Marne",
"number": "77"
}, {
"name": "Essonne",
"number": "91"
}, {
"name": "Yonne",
"number": "89"
}, {
"name": "Mayenne",
"number": "53"
}, {
"name": "Oise",
"number": "60"
}, {
"name": "Calvados",
"number": "14"
}, {
"name": "Ain",
"number": "01"
}, {
"name": "Corse-du-Sud",
"number": "2A"
}, {
"name": "Haute-Savoie",
"number": "74"
}, {
"name": "Doubs",
"number": "25"
}, {
"name": "Ardennes",
"number": "08"
}, {
"name": "Rhône",
"number": "69"
}, {
"name": "Territoire",
"number": "90"
}, {
"name": "Var",
"number": "83"
}, {
"name": "Yvelines",
"number": "78"
}, {
"name": "Creuse",
"number": "23"
}, {
"name": "Vosges",
"number": "88"
}, {
"name": "Jura",
"number": "39"
}, {
"name": "Sarthe",
"number": "72"
}, {
"name": "Haute-Saône",
"number": "70"
}, {
"name": "Deux-Sèvres",
"number": "79"
}, {
"name": "Nord",
"number": "59"
}, {
"name": "Somme",
"number": "80"
}, {
"name": "Cher",
"number": "18"
}, {
"name": "Allier",
"number": "03"
}, {
"name": "Côte-d'Or",
"number": "21"
}, {
"name": "Saône-et-Loire",
"number": "71"
}, {
"name": "Maine-et-Loire",
"number": "49"
}, {
"name": "Charente",
"number": "16"
}, {
"name": "Meurthe-et-Moselle",
"number": "54"
}, {
"name": "Seine-Maritime",
"number": "76"
}, {
"name": "Aube",
"number": "10"
}, {
"name": "Ille-et-Vilaine",
"number": "35"
}, {
"name": "Indre",
"number": "36"
}, {
"name": "Meuse",
"number": "55"
}, {
"name": "Dordogne",
"number": "24"
}, {
"name": "Drôme",
"number": "26"
}, {
"name": "Hautes-Alpes",
"number": "05"
}, {
"name": "Manche",
"number": "50"
}, {
"name": "Gironde",
"number": "33"
}, {
"name": "Ardèche",
"number": "07"
}, {
"name": "Savoie",
"number": "73"
}, {
"name": "Haute-Corse",
"number": "2B"
}, {
"name": "Loir-et-Cher",
"number": "41"
}, {
"name": "Haute-Marne",
"number": "52"
}, {
"name": "Seine-Saint-Denis",
"number": "93"
}, {
"name": "Loiret",
"number": "45"
}, {
"name": "Eure-et-Loir",
"number": "28"
}, {
"name": "Loire",
"number": "42"
}, {
"name": "Indre-et-Loire",
"number": "37"
}, {
"name": "Bouches-du-Rhône",
"number": "13"
}, {
"name": "Puy-de-Dôme",
"number": "63"
}, {
"name": "Corrèze",
"number": "19"
}, {
"name": "Pyrénées-Orientales",
"number": "66"
}, {
"name": "Orne",
"number": "61"
}, {
"name": "Isère",
"number": "38"
}, {
"name": "Alpes-Maritimes",
"number": "06"
}, {
"name": "Bas-Rhin",
"number": "67"
}, {
"name": "Haut-Rhin",
"number": "68"
}, {
"name": "Landes",
"number": "40"
}, {
"name": "Vienne",
"number": "86"
}, {
"name": "Cantal",
"number": "15"
}, {
"name": "Haute-Loire",
"number": "43"
}, {
"name": "Nouvelle-Calédonie",
"number": "988"
}, {
"name": "Vendée",
"number": "85"
}, {
"name": "Lot-et-Garonne",
"number": "47"
}, {
"name": "Gard",
"number": "30"
}, {
"name": "Aveyron",
"number": "12"
}, {
"name": "Aude",
"number": "11"
}, {
"name": "Hérault",
"number": "34"
}, {
"name": "Tarn",
"number": "81"
}, {
"name": "Ariège",
"number": "09"
}, {
"name": "Loire-Atlantique",
"number": "44"
}, {
"name": "Alpes-de-Haute-Provence",
"number": "04"
}, {
"name": "Hautes-Pyrénées",
"number": "65"
}, {
"name": "Pyrénées-Atlantiques",
"number": "64"
}, {
"name": "Val-de-Marne",
"number": "94"
}, {
"name": "Nièvre",
"number": "58"
}, {
"name": "Vaucluse",
"number": "84"
}, {
"name": "Lot",
"number": "46"
}, {
"name": "Gers",
"number": "32"
}, {
"name": "Haute-Garonne",
"number": "31"
}, {
"name": "Hauts-de-Seine",
"number": "92"
}, {
"name": "Tarn-et-Garonne",
"number": "82"
}, {
"name": "Lozère",
"number": "48"
}, {
"name": "Haute-Vienne",
"number": "87"
}, {
"name": "Guadeloupe",
"number": "971"
}, {
"name": "Wallis-et-Futuna",
"number": "986"
}, {
"name": "Polynésie française",
"number": "987"
}, {
"name": "Guyane",
"number": "973"
}, {
"name": "Martinique",
"number": "972"
}, {
"name": "La Réunion",
"number": "974"
}, {
"name": "Saint-Pierre-et-Miquelon",
"number": "975"
}, {
"name": "Paris",
"number": "75"
}]
var request = require('request')
var cheerio = require('cheerio')
var express = require('express')
var cache = require('apicache').options({ debug: true }).middleware
var departements = require('./departements.json')
var _ = require('underscore');
var port = process.env.PORT || 8080
var URI = 'http://vigilance.meteofrance.com/data/NXFR33_LFPW_.xml'
var alertIndex = {
1: 'vert',
2: 'jaune',
3: 'orange',
4: 'rouge'
}
var parseMeteoFranceXML = () => {
return new Promise((resolve, reject) => {
request(URI, (err, res, xml) => {
if (err) reject(err)
var $ = cheerio.load(xml)
var items = [].slice.call($('cv dv')).map((item) => {
return $(item)
})
var zones = items.reduce((sum, area) => {
if (area.attr('dep').length > 2) return sum;
var dep = _.find(departements, (elem) => {
return elem.number === area.attr('dep')
}) || {};
sum.push({
departement: area.attr('dep'),
color: alertIndex[area.attr('coul')],
level: area.attr('coul'),
name: dep.name
})
return sum;
}, []);
resolve(zones)
})
});
}
var app = express();
app.get('/', cache('1 hour'), (req, res) => {
parseMeteoFranceXML()
.then((data) => {
res.json(data)
})
});
app.listen(port, () => {
console.log('MeteoFrance App listening on port ' + port + '!');
});
{
"name": "meteofrance",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"author": "",
"license": "ISC",
"dependencies": {
"apicache": "0.0.12",
"cheerio": "^0.19.0",
"express": "^4.13.3",
"request": "^2.67.0",
"underscore": "^1.8.3"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment