Skip to content

Instantly share code, notes, and snippets.

@jubo
Last active October 2, 2015 21:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jubo/fcbd74fdffd127f04b68 to your computer and use it in GitHub Desktop.
Save jubo/fcbd74fdffd127f04b68 to your computer and use it in GitHub Desktop.
Service OpenData Auvergne THD
# -*- coding:utf-8
# Ce code est mis à disposition dans le domaine public
# Auteur : Julien BOUCHER
# Le 2/10/2015
import os
from flask import Flask
from flask import make_response
import xml.etree.ElementTree as xml
PREFIX_DATES = u"FttH - Travaux de déploiement de "
app = Flask(__name__)
class AuvergneTHDParser:
"""
Cette classe parse et construit une liste de dictionnaires contenant
les informations du deploiement THD en Auvergne
Les fichiers kml ont été extraits des url suivantes
wget -O ftth-phase1.kml http://www.auvergnetreshautdebit.fr/wp-content/themes/athd/kml/phase2/ftth-phase2.kml?20151002100409 >
wget -O ftth-phase2.kml http://www.auvergnetreshautdebit.fr/wp-content/themes/athd/kml/ftth.kml?20151002100409
"""
def __init__(self):
self.deploiements = self.make_data_from_kml(['ftth-phase1.kml', 'ftth-phase2.kml'])
def make_data_from_kml(self, filename_list):
"""
Construit une liste d'objets deploiement a partir du kml du site
auvergne haut debit
"""
ret = []
for filename in filename_list:
root = xml.parse(filename).getroot()
for node in root.findall('Document/Folder/Placemark'):
deploiement = dict()
for subnode in node.findall('ExtendedData/SchemaData/SimpleData'):
deploiement[subnode.attrib['name']] = subnode.text
deploiement["DATES"] = node.findall("name")[0].text.replace(PREFIX_DATES, "")
ret.append(deploiement)
return ret
parser = AuvergneTHDParser()
@app.route('/info')
def info():
return 'Ce site a pour but de compiler les informations disponibles sur le site auvergne haut débit sous un format exploitable.'
@app.route('/phase1/all')
def get_phase1_all():
d = [item.values() for item in parser.deploiements if item['ZONE'] == 'Phase 1']
return getcsvfromdict('phase1.csv', d)
@app.route('/phase2/all')
def get_phase2_all():
d = [item.values() for item in parser.deploiements if item['ZONE'] == 'Phase 2']
return getcsvfromdict('phase2.csv', d)
def getcsvfromdict(filename, d):
csv = '\r\n'.join(','.join(row) for row in d)
output = make_response(csv)
output.headers["Content-Disposition"] = "attachment;filename=%s"%filename
output.headers["Content-type"] = "text/csv"
return output
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment