I know it's Labor Day and what-nots and I'm supposed to be celebrating the end of Burning man, being at a bar-be-queue, but I'm not. Instead, I'm tweaking things, bringing me to what I just accomplished -- a flask-based REST API to data, in python, naturally:
from backports import lzma
import cStringIO as StringIO
import csv
import datetime
from flask import Flask, request, Response
import json
# TODO force SSL for post -- http://flask.pocoo.org/snippets/111/
DATA_FILE = 'sanguine.csv.xz'
app = Flask(__name__)
@app.route('/', methods = ['GET'])
def index():
with lzma.LZMAFile(DATA_FILE, 'r') as data:
output = StringIO.StringIO()
reader = csv.DictReader(data, fieldnames=['Timestamp','User','Latitude','Longitude'], quoting=csv.QUOTE_MINIMAL, lineterminator='\r\n')
reader.next() # skip header line
return(Response(json.dumps(list(reader)), mimetype='application/json'))
@app.route('/', methods=['POST'])
def newdatapiece():
with lzma.LZMAFile(DATA_FILE, 'a') as data:
writer = csv.DictWriter(data, fieldnames=['Timestamp','User', 'Latitude','Longitude'], quoting = csv.QUOTE_MINIMAL, lineterminator='\r\n')
row = {}
row['Timestamp'] = datetime.datetime.now().strftime('%s')
row['User'] = request.form['user_id']
row['Latitude'] = request.form['lat']
row['Longitude'] = request.form['lon']
writer.writerow(row)
return '', 201
@app.route('/analyze', methods=['GET'])
def analysis():
lines = []
with lzma.LZMAFile(DATA_FILE, 'r') as data:
lines = data.readlines()
return(Response(lines, mimetype='application/csv'))
if __name__ == '__main__':
with lzma.LZMAFile(DATA_FILE, 'w') as data:
writer = csv.DictWriter(data, fieldnames=['Timestamp','User', 'Latitude','Longitude'], quoting = csv.QUOTE_MINIMAL, lineterminator='\r\n')
writer.writeheader()
app.run(host='0.0.0.0', port=8080, debug=True)
September 1, 2014
How to Record Data
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment