Info | ||
---|---|---|
| ||
This page is originally from a git repository where its content can be managed and presented in a more dynamical way. This is a snapshot as of today ( ). There will be no frequent updates or alike. New content comes with a new documentation platform – some day! |
input:
Per API: Search for all items of contact x, i) by (system) email address, ii) by contact names.
/sensors/device/getItemsOfContact/{contactEmail}
OR/sensors/contacts/getContactsByName/{firstName}/{lastName}
--> email address will be output, then go on with step 1input:
/sensors/device/getItemsOfContact/{contactEmail}
OR/sensors/contacts/getContactsByName/{firstName}/{lastName}
--> email address as output then go to step 1/sensors/contacts/getAllContactRoles
--> pick out which ID is related to which role type (e.g. Data scientist="id": 29]input:
get /sensors/item/getItemByUrn/{urn}
--> filter for "id"
create a usable token post [input] /sensors/contacts/login
(input is a json holding username and password) --> response --> save token
get /sensors/events/getAllEventTypes
--> filter for event type id for input in #5.5
create json for other input for #5
put /sensors/events/putEvent/{deviceID}
+ INPUT {
}
Precondition: only valid for current configuration. If the item was object to modifications (mounts) the results may differ.
input:
https://sensor.awi.de/rest/sensors/item/getChildrenOfItem/{itemID}
https://sensor.awi.de/rest/sensors/sensorOutputs/getAllSensorOutputTypes
-> filter by i.e. regex "temp" (water temperature, technical temperature, etc. ...)https://sensor.awi.de/rest/sensors/sensorOutputs/getDeviceSensorOutputs/{itemID}
TODO: solve outputType is matching exactly but the response is not unique.... doh!
input:
https://sandbox.sensor.awi.de/rest/sensors/sensorOutputs/getAllSensorOutputTypes
-> filterhttps://sandbox.sensor.awi.de/rest/sensors/unitsOfMeasurement/getAllUnitsOfMeasurement
-> filterhttps://sandbox.sensor.awi.de/rest/sensors/item/getItemByUrn/{URN}
-> derive IDput https://sandbox.sensor.awi.de/rest/sensors/sensorOutputs/putSensorOutput/{itemID}
+ INPUT {
}
Possibly a look in the available output types/units is useful in advance, if these things shall be modified.
get sensorOutputs/getDeviceSensorOutputs/{itemID}
-> use reply to fill new json
put sensorOutputs/modifySensorOutput/{outputID}/{itemID}
+ INPUT {
}
sensorOutputs/deleteSensorOutputFromDevice/{outputID}/{itemID}
-> doneinput:
/sensors/sensorOutputs/getDeviceSensorOutputs/{deviceID}
--> scrape all IDs to a list/sensors/sensorOutputs/getSensorOutput/{parameterID}
--> collect infos oninput:
https://sensor.awi.de/rest/sensors/contacts/login
https://sensor.awi.de/rest/sensors/contacts/getAllContactRoles
https://sensor.awi.de/rest/sensors/item/getItemByUrn/
https://sensor.awi.de/rest/sensors/contacts/putExistingContactToDevice/{itemID}/{userID}/{contactRoleID}
https://sensor.awi.de/rest/sensors/contacts/deleteContactFromDevice/{itemID}/{userID}/{contactRoleID}
input:
This procedures applies also to sensors/events/getAllEventTypes
, sensors/sensorOutputs/getAllSensorOutputTypes
, sensors/unitsOfMeasurement/getAllUnitsOfMeasurement
, sensors/measurementProperties/getAllMeasurementPropertyTypes
, and several more.
input:
https://sensor.awi.de/rest/sensors/item/getAllItemCategories
input:
https://sensor.awi.de/rest/sensors/item/getDetailedItem/{itemID}?includeChildren=true
create id list of output items
get https://sensor.awi.de/rest/sensors/sensorOutputs/getSensorOutput/{sensorOutputID}
-> create lists
export
For a complete list of all subitems (of all subitems of all subitems), make use of a while loop as in use case no. 3.
As altnerative approach the endpoint https://sensor.awi.de/rest/sensors/item/getChildrenOfItem/{itemID}
could be facilitated as well.
input:
https://sensor.awi.de/rest/sensors/contacts/login
--> generate auth tokenhttps://sensor.awi.de/rest/sensors/item/getAllItemCategories
--> item type IDhttps://sensor.awi.de/rest/sensors/item/getAllItemStatuses
--> status code IDhttps://sandbox.sensor.awi.de/rest/sensors/item/createItem?parentItemID={parentItemID}
--> create iteminput:
https://sensor.awi.de/rest/sensors/contacts/login
--> generate auth tokenhttps://sensor.awi.de/rest/sensors/itemReassignment/assignItemToItem/{itemID}
+ --> content json-bodyCode Block | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
'''
basic documentation of sensor.awi.de REST-API can be found here: https://sensor.awi.de/api/
'''
## necessary libraries
import json
import requests
import datetime
## PROD
#sensorURL<- "https://sensor.awi.de/rest/sensors/"
## SANDBOX
sensorURL <- "https://sandbox.sensor.awi.de/rest/sensors/"
## + ================================ | xxx | ================================ + ##
'''
USE CASE 1: We are looking for a list of items that have a certain user in their contact list.
1.1.a We know the contact email address (as in sensor.awi.de) of the user.
'''
## + ================================ | xxx | ================================ + ##
email = 'marcel.nicolaus@awi.de'
## create link for API call
link = sensorURL + "device/getItemsOfContact/" + email
## calling api
answer = requests.get(link)
## the content itself, read as a json object
fullList = json.loads(answer.content)
## status of request (see httpstatuses.com/)
answer.status_code
## since the result can be 0 items, 1 item, and >1 items , we filter the item ids according the number of items and write to a list
if len(fullList) == 0:
itemList = []
elif len(fullList) == 1:
itemList = [fullList[0]['id']]
else:
itemList = [i['id'] for i in fullList]
## there we go:
print(itemList)
## + ================================ | xxx | ================================ + ##
'''
USE CASE 1: We are looking for a list of items that have a certain user in their contact list.
1.1.b We know the last name (and if necessary the first name) of the user. Aim: get a single email address.
'''
## + ================================ | xxx | ================================ + ##
## creation of the API call
link = sensorURL + 'contacts/getAllSystemContacts'
## CASE: unique last name or no contact found
## variables
lastName = 'Gerchow'
## calling api
answer = requests.get(link)
x = json.loads(answer.content)
## loop over entire list
for a in x:
if a['lastName'] == lastName:
print(a['email'])
## CASE: non-unique last name or no contact
## variables
lastName = 'Nicolaus'
firstName = 'Rita'
## calling api
answer = requests.get(link)
x = json.loads(answer.content)
## loop over entire list
for a in x:
if a['lastName'] == lastName and a['firstName'] == firstName:
print(a['email'])
## + ================================ | xxx | ================================ + ##
'''
USE CASE 1: We are looking for a list of items that have a certain user in their contact list.
1.2. We have info from 1.1 but need that user only with a certain contact role (e.g. 'Principal Investigator').
'''
## + ================================ | xxx | ================================ + ##
## which user should be searched?
## remember 'email' from 1.1?
#email = 'sandra.tippenhauer@awi.de'
## what role should be filtered?
inputRole = 'Principal Investigator'
inputRole = 'Editor'
## create empty lists
lstID, lstURN = [], []
## recycling of itemList from 1.1
for item in itemList:
link = sensorURL + "contacts/getDeviceContacts/" + str(item)
answer = requests.get(link)
x = json.loads(answer.content)
## create dictionaries to map uuids to vocables
dictRoles = {}
dictAccounts = {}
for i in x:
if isinstance(i['contact'], dict):
dictAccounts[i['contact']['@uuid']] = i['contact']['email']
if isinstance(i['vocable'], dict):
dictRoles[i['vocable']['@uuid']] = i['vocable']['generalName']
## extracting from item
user, role = [], []
for i in x:
if isinstance(i['vocable'], dict):
role.append(i['vocable']['@uuid'])
elif isinstance(i['vocable'], str):
role.append(i['vocable'])
else:
pass
##
if isinstance(i['contact'], dict):
user.append(i['contact']['@uuid'])
elif isinstance(i['contact'], str):
user.append(i['contact'])
else:
pass
## merging info from item and mapping dict
for i in range(len(user)): ## <-- could improve!!!
if dictRoles[role[i]] == inputRole and dictAccounts[user[i]] == email:
lstID.append(item)
lstURN.append(x[0]['item']['urn'])
## neat output as some sort of report ...
print(json.dumps({'user':email,
'timeOfQuery':datetime.datetime.isoformat(datetime.datetime.utcnow()),
'role':inputRole,
'urn':lstURN,
'id':lstID})
)
## ... or just as a single list if item IDs
print(lstID)
## eof
|
Code Block | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
## '''
## basic documentation of sensor.awi.de REST-API can be found here: https://sensor.awi.de/api/
## '''
settingUpThings <- function(x){
mirror <- 'https://ftp.gwdg.de/pub/misc/cran'
newPackages <- x[!(x %in% installed.packages()[,'Package'])]
if(length(newPackages)){
install.packages(newPackages, dep = TRUE, repos = mirror)
}
lapply(x, library, character.only = TRUE, logical.return = TRUE)
}
libsToBeLoaded <- c('jsonlite', 'plyr', 'lubridate', 'httr')
settingUpThings(libsToBeLoaded)
## PROD
#sensorURL<- "https://sensor.awi.de/rest/sensors/"
## SANDBOX
sensorURL <- "https://sandbox.sensor.awi.de/rest/sensors/"
## + ================================ | xxx | ================================ + ##
## '''
## USE CASE 1: We are looking for a list of items that have a certain user in their contact list.
## 1.1.a We know the contact email address (as in sensor.awi.de) of the user.
## ''' | ||||||||||
Code Block | ||||||||||
| ||||||||||
''' basic documentation of sensor.awi.de REST-API can be found here: https://sensor.awi.de/api/ ''' ## necessary libraries import json import requests import datetime ## PROD #sensorURL<- "https://sensor.awi.de/rest/sensors/" ## SANDBOX sensorURL <- "https://sandbox.sensor.awi.de/rest/sensors/" ## + ================================ | xxx | ================================ + ## ''' USE CASE 1: We are looking for a list of items that have a certain user in their contact list. 1.1.a We know the contact email address (as in sensor.awi.de) of the user. ''' ## + ================================ | xxx | ================================ + ## email = 'marcel.nicolaus@awi.de' ## create link for API call link = sensorURL + "device/getItemsOfContact/" + email ## calling api answer = requests.get(link) ## the content itself, read as a json object fullList = json.loads(answer.content) ## status of request (see httpstatuses.com/) answer.status_code ## since the result can be 0 items, 1 item, and >1 items , we filter the item ids according the number of items and write to a list if len(fullList) == 0: itemList = [] elif len(fullList) == 1: itemList = [fullList[0]['id']] else: itemList = [i['id'] for i in fullList]email <- 'marcel.nicolaus@awi.de' ## create link for API call link <- paste0(sensorURL, "device/getItemsOfContact/", email) ## calling api answer <- GET(link) ## the content itself, read as a json object fullList <- content(answer, as = 'parsed') ## status of request (see httpstatuses.com/) answer$status_code ## since the result can be 0 items, 1 item, and >1 items , we filter the item ids according the number of items and write to a list if (length(fullList) == 0){ itemList <- list() } else if (length(fullList) == 1){ itemList <- list(fullList[[1]]$id) } else { itemList <- list() for (i in seq_along(fullList)){ itemList[[i]] <- fullList[[i]]$id } } ## there we go: print(itemList) ## + ================================ | xxx | ================================ + ## ## ''' ## USE CASE 1: We are looking for a list of items that have a certain user in their contact list. ## 1.1.b We know the last name (and if necessary the first name) of the user. Aim: get a single email address. ## ''' ## + ================================ | xxx | ================================ + ## ## creation of the API call link =<- paste0(sensorURL + ,'contacts/getAllSystemContacts') ## CASE: unique last name or no contact found ## variables lastName =<- 'Gerchow' ## calling api answer = requests.get<- GET(link) x = json.loads(answer.content) ## loop over entire list for a in x:<- content(answer, as = 'parsed') for (i in seq_along(x)){ if a['lastName'] ( is.null(x[[i]]$lastName) == FALSE && x[[i]]$lastName == lastName: ) { print(a['email']) x[[i]]$email) } } ## CASE: non-unique last name or no contact ## variables lastName =<- 'Nicolaus' firstName =<- 'Rita' ## calling api answer = requests.get<- GET(link) x = json.loads(answer.content<- content(answer, as = 'parsed') ## loop over entire list for a(i in x:seq_along(x)){ if a['lastName'] ( is.null(x[[i]]$lastName) == FALSE && x[[i]]$lastName == lastName and&& a['firstName']x[[i]]$firstName == firstName: ) { print(a['email']) x[[i]]$email) } } ## + ================================ | xxx | ================================ + ## ## ''' ## USE CASE 1: We are looking for a list of items that have a certain user in their contact list. ## 1.2. We have info from 1.1 but need that user only with a certain contact role (e.g. 'Principal Investigator'). ## ''' ## + ================================ | xxx | ================================ + ## ## which user should be searched? ## remember 'email' from 1.1? #email = 'sandra.tippenhauer@awi.de' ## what role should be filtered? inputRole =<- 'Principal Investigator' inputRole =<- 'Editor' ## create empty lists lstID, lstURN = [], [] ## recycling of itemList from 1.1 for item in itemList:' lstID <- NULL lstURN <- NULL for (item in seq_along(itemList)){ link =<- paste0(sensorURL +, "contacts/getDeviceContacts/" + str(item, itemList[[item]]) print(link) answer = requests.get<- GET(link) x x<- content(answer, as = json.loads(answer.content'parsed') ## create dictionaries to map uuids to vocables dictRoles =<- {}NULL dictAccounts =<- {}NULL for (i in seq_along(x)){ ## x: print(x[[i]]) if isinstance(i['contact'], dict):(is.list(x[[i]]$contact) == TRUE){ dictAccounts[x[[i['contact'][]]$contact$'@uuid']] =<- i['contact']['email']x[[i]]$contact$email } if isinstance(i['vocable'], dict):(is.list(x[[i]]$vocable) == TRUE){ dictRoles[i['vocable'][x[[i]]$vocable$'@uuid']] =<- i['vocable']['generalName']x[[i]]$vocable$generalName } } ## extracting from item user, <- NULL role = [], []<- NULL for (i in x:seq_along(x)){ if isinstance(i['vocable'], dict):(is.list(x[[i]]$vocable) == TRUE){ role. <- append(i['vocable'][role, x[[i]]$vocable$'@uuid']) elif isinstance(i['vocable'], str):} else { role.append(i['vocable']) else: <- append(role, x[[i]]$vocable) pass} ## if isinstance(i['contact'], dict):(is.list(x[[i]]$contact) == TRUE){ user. <- append(i['contact']['@uuid']) elif isinstance(i['contact'], str):user, x[[i]]$contact$'@uuid') } else { user.append(i['contact']) else: user <- append(user, x[[i]]$contact) pass} } ## merging info from item and mapping dict for (i in range(len(user)): ## <-- could improve!!!seq_along(x)){ if ( dictRoles[role[i]] == inputRole and&& dictAccounts[user[i]] == email:){ lstID. <- append(lstID, item) lstURN. <- append(lstURN, x[0]['item']['urn']) 1]]$item$urn) } } } ## neat output as some sort of report ... print(json.dumps({'user':( toJSON(list(user = email, timeOfQuery = now(tz 'timeOfQuery':datetime.datetime.isoformat(datetime.datetime.utcnow()), = "GMT"), role = inputRole, 'role':inputRole, urn = lstURN, id 'urn':lstURN,= lstID ) 'id':lstID} ) ) ## ... or just as a single list if item IDs print(lstID) ## eof |