Reputation: 477
I am using JSON to take some weather data and output this data on a CSV file like this.
I would like to know how to display my CSV file in a web browser using Flask (already installed)? Here is my code so far (its working)
#Source : http://www.wunderground.com/weather/api/d/docs?d=resources/code-samples
import urllib2
import json
import time
import csv
from datetime import datetime#set the time
from flask import Flask, send_file
app = Flask(__name__)
app.debug = True
def get_information(url):
try:
wunder_url_obj = urllib2.urlopen(url)
except:
print 'Could not open URL'
return None
else:
now = datetime.now()
current_year = now.year
current_day = now.day
current_month = now.month
current_hour = now.hour
current_minute = now.minute
current_second = now.second
json_string = wunder_url_obj.read()
parsed_json = json.loads(json_string)
temp_f = parsed_json['current_observation']['temp_f']
weather = parsed_json['current_observation']['weather']
date = str(now.month) + "/" + str(now.day) + "/" + str(now.year) + " " + str(now.hour) + ":" + str(now.minute) + ":" + str(now.second)
now = datetime.now()
header = "Datetime,current condition,Temperature,\n"
with open('out.csv', 'a+') as f:
f.seek(0, 2) # os.SEEK_END, on Windows file position set to 0 even in append mode.
if f.tell() == 0:
f.write(header)
f.write(','.join([date, str(temp_f), weather]))
f.write('\n')
f.close()
get_information('http://api.wunderground.com/api/8d3b5d3fa03ddb6f/conditions/weather/q/China/Beijing.json')
@app.route("/weather.csv")
def weather():
url = 'http://api.wunderground.com/api/8d3b5d3fa03ddb6f/conditions/weather/q/China/Beijing.json'
get_information(url)
return send_file("out.csv")
if __name__ == '__main__':
app.run()
Here a screenshot of my Editor :
Upvotes: 3
Views: 2379
Reputation: 535
I think you're looking for send_file(). The flask endpoint would look something like:
from flask import Flask, send_file
app = Flask(__name__)
app.debug = True
# Your get_information method
@app.route("/weather.csv")
def weather():
url = "http://api.wunderground.com/api/8d3b5d3fa03ddb6f/conditions/weather/q/China/Beijing.json"
get_information(url)
return send_file("out.csv")
if __name__ == '__main__':
app.run()
Upvotes: 4