96 lines
3.9 KiB
Python
96 lines
3.9 KiB
Python
from flask import Flask, request, jsonify
|
|
from measurement_data_rdf import measurement_main
|
|
from device_data_rdf import device
|
|
import requests
|
|
|
|
app = Flask(__name__)
|
|
|
|
# Define the base URL and endpoints for the external API
|
|
base_url = 'https://api.reinvent.witmo.eu'
|
|
device_endpoint_database = '/api/v1/sincere/{database}/device/{device_id}'
|
|
meta_data_endpoint = '/api/v1/sincere/{database}/meta_data/{measurement}/{channel_id}'
|
|
device_endpoint_channel = '/api/v1/sincere/{database}/device/{device_id}'
|
|
meta_data_endpoint_channel = '/api/v1/sincere/{database}/meta_data/{measurement}/{channel_id}'
|
|
|
|
@app.route('/meteo-device-channels', methods=['POST'])
|
|
def meteo_device():
|
|
# Get JSON data from the request
|
|
data = request.get_json()
|
|
|
|
if not data or 'database' not in data or 'device_id' not in data:
|
|
return jsonify({"error": "Invalid input, expected JSON with 'database' and 'device_id'"}), 400
|
|
|
|
database = data['database']
|
|
device_id = data['device_id']
|
|
|
|
# Construct the full URL
|
|
url = base_url + device_endpoint_database.format(database=database, device_id=device_id)
|
|
|
|
# Make the GET request to the external API
|
|
response = requests.get(url)
|
|
|
|
# Check if the request was successful
|
|
if response.status_code == 200:
|
|
response_data = response.json()
|
|
channels = response_data.get('data', {}).get('channels', [])
|
|
device_data_json = device(channels, database, device_id)
|
|
device_data_json.parse_device_data()
|
|
return jsonify({"device_id": device_id, "channels": channels})
|
|
else:
|
|
return jsonify(
|
|
{"error": f"Failed to retrieve data: {response.status_code} - {response.text}"}), response.status_code
|
|
|
|
@app.route('/meteo-device-channels', methods=['POST'])
|
|
def meteo_device_channels():
|
|
data = request.get_json()
|
|
if not data or 'database' not in data or 'device_id' not in data:
|
|
return jsonify({"error": "Invalid input, expected JSON with 'database' and 'device_id'"}), 400
|
|
|
|
database = data['database']
|
|
device_id = data['device_id']
|
|
url = base_url + device_endpoint_channel.format(database=database, device_id=device_id)
|
|
response = requests.get(url)
|
|
|
|
if response.status_code == 200:
|
|
response_data = response.json()
|
|
channels = response_data.get('data', {}).get('channels', [])
|
|
return jsonify({"device_id": device_id, "channels": channels})
|
|
else:
|
|
return jsonify({"error": f"Failed to retrieve data: {response.status_code} - {response.text}"}), response.status_code
|
|
|
|
@app.route('/meta-data', methods=['POST'])
|
|
def get_meta_data():
|
|
data = request.get_json()
|
|
if not data or 'database' not in data or 'measurement' not in data or 'channel_id' not in data:
|
|
return jsonify({"error": "Invalid input, expected JSON with 'database', 'measurement', and 'channel_id'"}), 400
|
|
|
|
database = data['database']
|
|
measurement = data['measurement']
|
|
channel_id = data['channel_id']
|
|
datetime_from = data.get('datetime_from')
|
|
datetime_end = data.get('datetime_end')
|
|
limit = data.get('limit', 100)
|
|
page = data.get('page', 0)
|
|
pagination = data.get('pagination', True)
|
|
|
|
url = base_url + meta_data_endpoint_channel.format(database=database, measurement=measurement, channel_id=channel_id)
|
|
params = {
|
|
'datetime_from': datetime_from,
|
|
'datetime_end': datetime_end,
|
|
'limit': limit,
|
|
'page': page,
|
|
'pagination': str(pagination).lower()
|
|
}
|
|
|
|
response = requests.get(url, params=params)
|
|
|
|
if response.status_code == 200:
|
|
measurement_data_json = measurement_main(response.json())
|
|
measurement_data_json.parse_measurement_data()
|
|
return jsonify(response.json())
|
|
else:
|
|
return jsonify({"error": f"Failed to retrieve data: {response.status_code} - {response.text}"}), response.status_code
|
|
|
|
if __name__ == '__main__':
|
|
app.run(host='0.0.0.0', port=5000)
|