Update
This commit is contained in:
parent
f7eaf8e018
commit
20f5cc55ac
3 changed files with 110 additions and 85 deletions
156
app.py
156
app.py
|
|
@ -15,40 +15,6 @@ def log(*args):
|
||||||
|
|
||||||
|
|
||||||
def getApiCity(search):
|
def getApiCity(search):
|
||||||
with closing(urlopen(API_LOCATION_CITIES + API_TOKEN + METEOCONCEPT_TOKEN + API_SEARCH + search)) as f:
|
|
||||||
cities = json.loads(f.read())['cities']
|
|
||||||
return cities
|
|
||||||
|
|
||||||
|
|
||||||
app = Flask(__name__)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@app.route('/config')
|
|
||||||
def config(): # put application's code here
|
|
||||||
return str(INDENT) + str(WEATHER) + str(WINDDIRS)
|
|
||||||
|
|
||||||
|
|
||||||
@app.route('/', methods=['POST', 'GET'])
|
|
||||||
def index():
|
|
||||||
response = False
|
|
||||||
if request.method == 'POST':
|
|
||||||
search = request.form['search']
|
|
||||||
if search is None:
|
|
||||||
response = []
|
|
||||||
else:
|
|
||||||
response = getApiCity(search)
|
|
||||||
return render_template('index.html', response=response)
|
|
||||||
|
|
||||||
|
|
||||||
# Recherche d'une ville
|
|
||||||
@app.route('/searchCity', methods=['POST', 'GET'])
|
|
||||||
def searchCity(): # put application's code here
|
|
||||||
if request.method == 'POST':
|
|
||||||
search = request.form['search']
|
|
||||||
else:
|
|
||||||
search = request.args.get('search')
|
|
||||||
|
|
||||||
if METEOCONCEPT_TOKEN is None:
|
if METEOCONCEPT_TOKEN is None:
|
||||||
log('Env variable METEOCONCEPT_TOKEN not passed')
|
log('Env variable METEOCONCEPT_TOKEN not passed')
|
||||||
return 'Env variable METEOCONCEPT_TOKEN not passed'
|
return 'Env variable METEOCONCEPT_TOKEN not passed'
|
||||||
|
|
@ -57,38 +23,28 @@ def searchCity(): # put application's code here
|
||||||
return 'GET/POST search variable not passed'
|
return 'GET/POST search variable not passed'
|
||||||
else:
|
else:
|
||||||
log('Env variable METEOCONCEPT_TOKEN passed')
|
log('Env variable METEOCONCEPT_TOKEN passed')
|
||||||
return json.dumps(getApiCity(search), indent=INDENT, sort_keys=True)
|
with closing(urlopen(API_LOCATION_CITIES + API_TOKEN + METEOCONCEPT_TOKEN + API_SEARCH + search)) as f:
|
||||||
|
cities = json.loads(f.read())['cities']
|
||||||
|
return [search, cities]
|
||||||
|
|
||||||
|
|
||||||
# Informations sur la Ville
|
def getAround(insee, radius):
|
||||||
@app.route('/city', methods=['POST', 'GET'])
|
|
||||||
def getCity(): # put application's code here
|
|
||||||
if request.method == 'POST':
|
|
||||||
insee = request.form['insee']
|
|
||||||
else:
|
|
||||||
insee = request.args.get('insee')
|
|
||||||
|
|
||||||
if METEOCONCEPT_TOKEN is None:
|
if METEOCONCEPT_TOKEN is None:
|
||||||
log('Env variable METEOCONCEPT_TOKEN not passed')
|
log('Env variable METEOCONCEPT_TOKEN not passed')
|
||||||
return 'Env variable METEOCONCEPT_TOKEN not passed'
|
return 'Env variable METEOCONCEPT_TOKEN not passed'
|
||||||
elif insee is None:
|
elif insee is None or radius is None:
|
||||||
log('GET/POST insee variable not passed')
|
log('GET/POST insee or radius variable not passed')
|
||||||
return 'GET/POST insee variable not passed'
|
return 'GET/POST insee or radiu variable not passed'
|
||||||
else:
|
else:
|
||||||
log('Env variable METEOCONCEPT_TOKEN passed')
|
log('Env variable METEOCONCEPT_TOKEN passed')
|
||||||
with closing(urlopen(API_LOCATION_CITY + API_TOKEN + METEOCONCEPT_TOKEN + API_INSEE + insee)) as f:
|
with closing(
|
||||||
city = json.loads(f.read())['city']
|
urlopen(
|
||||||
return json.dumps(city, indent=INDENT, sort_keys=True)
|
API_OBSERVATIONS_AROUND + API_TOKEN + METEOCONCEPT_TOKEN + API_INSEE + insee + API_RADIUS + radius)) as f:
|
||||||
|
around = json.loads(f.read())
|
||||||
|
return [insee, radius, around]
|
||||||
|
|
||||||
|
|
||||||
# Information sur la ville et Ephéméride
|
def getEphemeride(insee):
|
||||||
@app.route('/ephemeride', methods=['POST', 'GET'])
|
|
||||||
def ephemeride(): # put application's code here
|
|
||||||
if request.method == 'POST':
|
|
||||||
insee = request.form['insee']
|
|
||||||
else:
|
|
||||||
insee = request.args.get('insee')
|
|
||||||
|
|
||||||
if METEOCONCEPT_TOKEN is None:
|
if METEOCONCEPT_TOKEN is None:
|
||||||
log('Env variable METEOCONCEPT_TOKEN not passed')
|
log('Env variable METEOCONCEPT_TOKEN not passed')
|
||||||
return 'Env variable METEOCONCEPT_TOKEN not passed'
|
return 'Env variable METEOCONCEPT_TOKEN not passed'
|
||||||
|
|
@ -99,7 +55,76 @@ def ephemeride(): # put application's code here
|
||||||
log('Env variable METEOCONCEPT_TOKEN passed')
|
log('Env variable METEOCONCEPT_TOKEN passed')
|
||||||
with closing(urlopen(API_EPHEMERIDE + API_TOKEN + METEOCONCEPT_TOKEN + API_INSEE + insee)) as f:
|
with closing(urlopen(API_EPHEMERIDE + API_TOKEN + METEOCONCEPT_TOKEN + API_INSEE + insee)) as f:
|
||||||
cityEph = json.loads(f.read())
|
cityEph = json.loads(f.read())
|
||||||
return json.dumps(cityEph, indent=INDENT, sort_keys=True)
|
return [insee, cityEph]
|
||||||
|
|
||||||
|
|
||||||
|
def getCity(insee):
|
||||||
|
if METEOCONCEPT_TOKEN is None:
|
||||||
|
log('Env variable METEOCONCEPT_TOKEN not passed')
|
||||||
|
return 'Env variable METEOCONCEPT_TOKEN not passed'
|
||||||
|
elif insee is None:
|
||||||
|
log('GET/POST insee variable not passed')
|
||||||
|
return 'GET/POST insee variable not passed'
|
||||||
|
else:
|
||||||
|
log('Env variable METEOCONCEPT_TOKEN passed')
|
||||||
|
with closing(urlopen(API_LOCATION_CITY + API_TOKEN + METEOCONCEPT_TOKEN + API_INSEE + insee)) as f:
|
||||||
|
city = json.loads(f.read())['city']
|
||||||
|
return [insee, city]
|
||||||
|
|
||||||
|
|
||||||
|
app = Flask(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
@app.route('/config')
|
||||||
|
def config(): # put application's code here
|
||||||
|
return str(INDENT) + str(WEATHER) + str(WINDDIRS)
|
||||||
|
|
||||||
|
|
||||||
|
@app.route('/', methods=['POST', 'GET'])
|
||||||
|
def index():
|
||||||
|
response_cities = False
|
||||||
|
response_ephemeride = False
|
||||||
|
response_around = False
|
||||||
|
if request.method == 'POST':
|
||||||
|
search = request.form['search']
|
||||||
|
response_cities = getApiCity(search)
|
||||||
|
|
||||||
|
# TODO Multiple form for insee ? or ajax ?
|
||||||
|
# insee = request.form['insee']
|
||||||
|
# response_ephemeride = getEphemeride(insee)
|
||||||
|
# response_around = getAround(insee, 1)
|
||||||
|
|
||||||
|
return render_template('index.html', cities=response_cities, ephemeride=response_ephemeride, around=response_around)
|
||||||
|
|
||||||
|
|
||||||
|
# Recherche d'une ville
|
||||||
|
@app.route('/searchCity', methods=['POST', 'GET'])
|
||||||
|
def searchCity(): # put application's code here
|
||||||
|
if request.method == 'POST':
|
||||||
|
search = request.form['search']
|
||||||
|
else:
|
||||||
|
search = request.args.get('search')
|
||||||
|
return json.dumps(getApiCity(search), indent=INDENT, sort_keys=True)
|
||||||
|
|
||||||
|
|
||||||
|
# Informations sur la Ville
|
||||||
|
@app.route('/city', methods=['POST', 'GET'])
|
||||||
|
def getCity(): # put application's code here
|
||||||
|
if request.method == 'POST':
|
||||||
|
insee = request.form['insee']
|
||||||
|
else:
|
||||||
|
insee = request.args.get('insee')
|
||||||
|
return json.dumps(getCity(insee), indent=INDENT, sort_keys=True)
|
||||||
|
|
||||||
|
|
||||||
|
# Information sur la ville et Ephéméride
|
||||||
|
@app.route('/ephemeride', methods=['POST', 'GET'])
|
||||||
|
def ephemeride(): # put application's code here
|
||||||
|
if request.method == 'POST':
|
||||||
|
insee = request.form['insee']
|
||||||
|
else:
|
||||||
|
insee = request.args.get('insee')
|
||||||
|
return json.dumps(getEphemeride(insee), indent=INDENT, sort_keys=True)
|
||||||
|
|
||||||
|
|
||||||
# Information sur les alentours d'une ville
|
# Information sur les alentours d'une ville
|
||||||
|
|
@ -111,18 +136,7 @@ def around(): # put application's code here
|
||||||
else:
|
else:
|
||||||
insee = request.args.get('insee')
|
insee = request.args.get('insee')
|
||||||
radius = request.args.get('radius')
|
radius = request.args.get('radius')
|
||||||
|
return json.dumps(getAround(insee, radius), indent=INDENT, sort_keys=True)
|
||||||
if METEOCONCEPT_TOKEN is None:
|
|
||||||
log('Env variable METEOCONCEPT_TOKEN not passed')
|
|
||||||
return 'Env variable METEOCONCEPT_TOKEN not passed'
|
|
||||||
elif insee is None or radius is None:
|
|
||||||
log('GET/POST insee or radius variable not passed')
|
|
||||||
return 'GET/POST insee or radiu variable not passed'
|
|
||||||
else:
|
|
||||||
log('Env variable METEOCONCEPT_TOKEN passed')
|
|
||||||
with closing(urlopen(API_OBSERVATIONS_AROUND + API_TOKEN + METEOCONCEPT_TOKEN + API_INSEE + insee + API_RADIUS + radius)) as f:
|
|
||||||
around = json.loads(f.read())
|
|
||||||
return json.dumps(around, indent=INDENT, sort_keys=True)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
@ -130,4 +144,4 @@ if __name__ == '__main__':
|
||||||
# On Linux or MAC 'export METEOCONCEPT_TOKEN=...' (check shell echo $METEOCONCEPT_TOKEN)
|
# On Linux or MAC 'export METEOCONCEPT_TOKEN=...' (check shell echo $METEOCONCEPT_TOKEN)
|
||||||
# On Windows 'set METEOCONCEPT_TOKEN=...' (check on Powershell echo $Env:METEOCONCEPT_TOKEN)
|
# On Windows 'set METEOCONCEPT_TOKEN=...' (check on Powershell echo $Env:METEOCONCEPT_TOKEN)
|
||||||
METEOCONCEPT_TOKEN = os.environ.get('METEOCONCEPT_TOKEN', None)
|
METEOCONCEPT_TOKEN = os.environ.get('METEOCONCEPT_TOKEN', None)
|
||||||
app.run(host='0.0.0.0', port=PORT, debug=True)
|
app.run(host='0.0.0.0', port=PORT, debug=True)
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,8 @@ li{
|
||||||
}
|
}
|
||||||
|
|
||||||
.response{
|
.response{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.error{
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,23 +7,32 @@
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="meteoAPI">
|
<div class="meteoAPI">
|
||||||
<h1>WebServices : MétéoAPI</h1>
|
<h1>WebServices : MétéoAPI</h1>
|
||||||
<form method="POST">
|
<form method="POST">
|
||||||
<label>Rechercher une ville : </label><input name="search"> <input type="submit" value="Search"></p>
|
<label>Rechercher une ville : </label><input name="search" value="{{cities[0]}}"> <input type="submit" value="Search"></p>
|
||||||
</form>
|
</form>
|
||||||
<div class="response">
|
{% if cities[1]|length == 0 %}
|
||||||
<br><br>
|
<p class="error">No results for {{cities[0]}}</p>
|
||||||
{% if response %}
|
{% endif %}
|
||||||
<h2>Results</h2>
|
{% if cities and cities[1] and cities[1]|length > 0 %}
|
||||||
|
<form method="POST">
|
||||||
|
<h3> Select city ({{cities[1]|length}} found for {{cities[0]}}) :
|
||||||
|
<select name="insee" method="POST">
|
||||||
|
<label>Rechercher une ville : </label>{% if cities[1]|length > 0 %} <option value="{{cities[1][0]['name']}}" selected>{{cities[1][0]['name']}} ({{cities[1][0]['cp']}})</option> {% endif %}
|
||||||
|
{% for city in cities[1][1:] %}
|
||||||
|
<option value="{{city['insee']}}">{{city['name']}} ({{city['cp']}})</option>
|
||||||
|
{% endfor %}
|
||||||
|
</select></h3>
|
||||||
|
</form>
|
||||||
|
{% endif %}
|
||||||
|
{% if ephemeride %}
|
||||||
|
<div class="ephemeride">
|
||||||
|
<br><br>
|
||||||
<ul>
|
<ul>
|
||||||
{% for city in response %}
|
{{ ephemeride[1] }}
|
||||||
<ul>
|
|
||||||
<li>{{city}}</li>
|
|
||||||
</ul>
|
|
||||||
{%endfor%}
|
|
||||||
</ul>
|
</ul>
|
||||||
{% endif %}
|
</div>
|
||||||
</div>
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
Loading…
Add table
Add a link
Reference in a new issue