Cómo importar datos de ventas2
Aprenda a autenticarse en la API GraphQL y luego aprenda a crear y ejecutar consultas y mutaciones.
El end point de GraphQL
El API GraphQL de tbRetail tiene 2 end points, uno para realizar las llamadas de test y otro para realizar las llamadas de producción:
End Point de test: https://apitest.tbretail.com
End Point de producción: https://api.tbretail.com
Autenticarse con GraphQL
Para comunicarse con el servidor GraphQL, necesitará un token OAuth con los alcances (scopes) correctos.
Obtener un token de usuario: Este token de acceso estará asociado al usuario y permitirá obtener los datos que el usuario tiene acceso en la aplicación.
Obtención del token de acceso temporal: Una vez obtenido en el paso 1 un token de usuario, se podrá realizar una petición al servidor para obtener un token temporal de acceso. Este token temporal tiene una validez de 24 horas. Transcurrido dicho periodo deberá solicitarse un nuevo token temporal para poder solicitar los datos. La url de autentificación en la fase de pruebas:
Acceso TEST:: Haga clic aquí para obtener token
Los valores de las variables para realizar la petición de datos son las siguientes:
Variables | Valor |
---|---|
client_id para test | 14fuos4vd8u14utepgl46fhjob |
client_id para producción | 63h4jubc7qvrg9f65c36vjp3bq |
redirect_uri en test | |
redirect_uri en producción | |
refresh_token | Token obtenido en el paso 1 |
Código de ejemplo en python
import requests
import json
import datetime
refresh_token = "<inserte token obtenido en paso 1>"
client_id = '<inserte client id>'
redirect_uri = '<inserte redirect uri'
# realizar la peticion de autenticacion para obtener el token temporal de acceso
token_url = 'https://auth.tbretail.com/oauth2/token'
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
data = {'grant_type': 'refresh_token', 'client_id': client_id, 'redirect_uri': redirect_uri, 'refresh_token': refresh_token}
token_response = requests.post(token_url, data=data, verify=False, allow_redirects=False, headers=headers)
access_token = token_response.json()['access_token']
Esta petición devolverá el access_token que podrá ser usado para realizar las peticiones al servidor.
Petición de datos al servidor para descargar información
La petición se debe realizar haciendo un POST al end point de pruebas o de producción.
El formato de la query debe ser el siguiente:
query {
getData (
locations: […]
start_date: “YYYY-MM-DD”
end_date: “YYY-MM-DD”
categories: { dimension: MONTH interval: 1 }
metrics: [ ENTERS ]
group: {dimension: LOCATION}
) {
categories
series [{ name: ENTERS operation: SUM} }
}
}
Los parámetros de la query son los siguientes:
Campo | Descripción |
locations | Lista de id’s de las locations a solicitar |
start_date | Fecha de inicio en formato YYYY-MM-DD |
end_date | Fecha final en formato YYYY-MM-DD |
category | Objeto con los parámetros que se describen a continuación |
category.dimension | Pueden ser los siguientes valores: YEAR, QUARTER, MONTH, DAY, HOUR, MINUTE |
category.interval | Intervalo de la petición. 1, 2, 3 .. etc. Por ejemplo para pedir cada 15 minutos, se debe solicitar en la dimension MINUTE y en el interval 15. |
group | Puede ser COMPANY, BRAND, LOCATION, ZONE Permite devolver la información agrupada. |
metrics | Lista de métricas a solicitar y la operación a realizar ENTERS, EXITS, GROUP ENTERS, GROUP EXITS operaciones: SUM, AVG, MAX, MIN |
Codigo de Ejemplo Python:
# obtenido el token temporal (access_token) podremos realizar llamadas al graphql
api_url = 'https://api.tbretail.com'
headers = {
'Authorization': access_token
}
json_data = {
"query": """
query {
getData(
companies: []
brands: []
locations: [3]
zones: []
start_date: "2021-01-01"
end_date: "2021-01-30"
metrics: [{name: ENTERS, operation: SUM}]
category: {dimension: DAY interval: 1}
group: {dimension: LOCATION}
) {
series {
group
metric
data
}
categories
}
}
"""
}
data_response = requests.post(api_url, json=json_data, headers=headers)
# una vez obtenidos los datos se pueden transformar
# en una lista
json_data = json.loads(data_response.content)
result_getdata = json_data['data']['getData']
if result_getdata:
series = result_getdata['series']
categories = result_getdata['categories']
print ("group_id,start_datetime,metric,value")
for serie in series:
group_id = serie['group']
metric = serie['metric']
serie_data = serie['data']
for category in categories:
unixdate = int(category) / 1000
starttime = datetime.datetime.utcfromtimestamp(unixdate)
value = serie_data[categories.index(category)]
line = "%s,%s,%s,%s" % ( group_id, starttime.strftime("%Y-%m-%d %H:%M:%S"), metric, value )
print (line)
else:
print ("No hay datos")
Este ejemplo devolverá la siguiente lista por pantalla: