├── README.md └── server.py /README.md: -------------------------------------------------------------------------------- 1 | # minuku_androidServer -------------------------------------------------------------------------------- /server.py: -------------------------------------------------------------------------------- 1 | from flask import Flask, request, jsonify, json 2 | from bson.objectid import ObjectId 3 | from flask_pymongo import PyMongo 4 | import datetime 5 | from datetime import datetime 6 | import dateutil.parser 7 | from bson import json_util 8 | import codecs 9 | import ast 10 | import logging 11 | 12 | app = Flask(__name__) 13 | 14 | app.config['MONGO_DBNAME'] = 'LabelingStudy' 15 | app.config['MONGO_URI'] = 'mongodb://localhost/LabelingStudy' 16 | 17 | mongo = PyMongo(app) 18 | 19 | TripDataKey = ["_id", "device_id", "condition", "createdTime", "startTime", "endTime", "startTimeString", "endTimeString", "sessionid", "annotations"] 20 | 21 | 22 | @app.route('/') 23 | def test(): 24 | return 'OK' 25 | 26 | 27 | @app.route('/find_latest_and_insert', methods=['POST']) 28 | def find_latest_and_insert(): 29 | if request.method == 'POST': 30 | collection = str(request.args['collection']) 31 | action = str(request.args['action']) 32 | user_id = request.args['id'] 33 | 34 | if collection == 'dump': 35 | user = mongo.db.dump 36 | elif collection == 'trip': 37 | user = mongo.db.trip 38 | elif collection == 'isAlive': 39 | user = mongo.db.isAlive 40 | if action == 'search': 41 | data = user.find({'device_id': user_id}) 42 | res = data.sort('startTime', -1).limit(1) 43 | 44 | returnStartTime = 0 45 | for item in res: 46 | returnStartTime = item['startTime'] 47 | message = json.dumps({'startTime':returnStartTime}) 48 | return message 49 | 50 | json_request = request.get_json(force=True, silent=True) 51 | if action == 'insert' and collection == 'trip': 52 | print (json_request) 53 | 54 | missing_key = False 55 | try: 56 | if '_id' in json_request and 'createdTime' in json_request: 57 | data = dict() 58 | for key in TripDataKey: 59 | if key in json_request and key != '_id': 60 | data[key] = json_request[key] 61 | elif key not in json_request: 62 | missing_key = True 63 | if missing_key: 64 | file = open('MissingKeyData.txt', 'a') 65 | file.write(str(json_request)+'\n') 66 | 67 | user.update({'_id': json_request['_id']}, {'$set': data}, upsert=True, multi=True) 68 | except Exception as e: 69 | print (e) 70 | else: # if try successfully, then execute else 71 | # unique data 72 | user_data = user.find({'_id': json_request['_id']}) 73 | returnCreatedTime = 0 74 | for item in user_data: 75 | returnCreatedTime = item['createdTime'] 76 | message = json.dumps({'createdTime': returnCreatedTime}) 77 | return message 78 | elif action=='insert' and collection=='dump': 79 | try: 80 | user.insert(json_request) 81 | user_data = user.find({'device_id': user_id}) 82 | res = user_data.sort('endTime', -1).limit(1) 83 | returnEndTime = 0 84 | for item in res: 85 | returnEndTime = item['endTime'] 86 | message = json.dumps({'endTime': returnEndTime}) 87 | return message 88 | except Exception as e: 89 | print (e) 90 | else: 91 | user.insert(json_request) 92 | return 'insert OK!' 93 | 94 | 95 | @app.route('/time_interval', methods=['POST']) 96 | def time_interval(): 97 | jsonquery = request.get_json(force=True, silent=True) # type: unico$ 98 | query = json.loads(jsonquery) 99 | d_id = query['device_id'] 100 | collection = query['collection'] 101 | start = query['query_start_time'] 102 | end = query['query_end_time'] 103 | 104 | if collection == 'dump': 105 | col = mongo.db.dump 106 | elif collection == 'trip': 107 | col = mongo.db.trip 108 | elif collection == 'isAlive': 109 | col = mongo.db.isAlive 110 | 111 | json_docs = [] 112 | number = col.find({'device_id': d_id, 'startTime': {'$gte': str(start["$date"])}, 'endTime': {'$lt': str(end["$date"])}}).count() 113 | in_time_range = col.find({'device_id': d_id, 'startTime': {'$gte': str(start["$date"])}, 'endTime': {'$lt': str(end["$date"])}}) 114 | for doc in in_time_range: 115 | json_docs.append(doc) 116 | print (json_docs) 117 | return json.dumps({'device_id': d_id, "number": number}) 118 | 119 | if __name__ == '__main__': 120 | app.run(host="172.31.3.66", threaded=True) 121 | --------------------------------------------------------------------------------