Last active
January 17, 2016 21:17
-
-
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/)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[{ | |
"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" | |
}] | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 + '!'); | |
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"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