Python - Llamada a una API con request.get en Python Problemas

 
Vista:
sin imagen de perfil
Val: 5
Ha disminuido su posición en 17 puestos en Python (en relación al último mes)
Gráfica de Python

Llamada a una API con request.get en Python Problemas

Publicado por Jonathan (2 intervenciones) el 04/03/2021 22:55:19
Hola a todos y muchas gracias por su tiempo.

Estoy enfrentando un problema realmente extraño. Existe esta organización que tiene este servicio de API para que podamos recuperar datos de ellos. Es una URL simple que devuelve un JSON con exactamente 100 registros.

Así que creé un código Python para recuperar estos datos y almacenarlos en nuestra base de datos local. Entonces, cada vez que ejecutamos el código, obtenemos 100 registros hasta que la API de la organización queda vacía y no hay nada más para en el response hasta el día siguiente. Así que para que quede claro. Si la organización quiere que importemos 360 registros, tenemos que ejecutar la API GET call 4 veces, 3 veces para obtener lotes de 100 registros y la cuarta vez para recuperar los últimos 60 registros. Después de eso, si lo ejecuto por quinta vez, el response me dice que no hay más registros para el día.

Entonces, mi problema comienza aquí, quería ejecutar la API GET call dentro de un ciclo while para recuperar todos los JSONs y almacenarlos en una lista. Pero dentro del ciclo while cada vez que ejecutamos nuevamente la llamada API GET, su respuesta es exactamente la misma que la respuesta anterior. Los datos no cambian en absoluto y la API del lado de la organización, no envía más lotes de registros, porque no hay solicitudes de nosotros. Permitanme mostrarles cómo se ve.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
import requests
 
listOfResponses = []
tempResponseList = []
 
while True:
    tempResponseList = requests.get(url = apiURL, headers = headers, params = params).json()
 
    if tempResponseList:
        listOfResponses.append(tempResponseList)
        tempResponseList = []
    else:
        print('There are no more records')
        break


He leído muchos más artículos con respecto a que el problema puede estar en la propiedad
1
keep-alive
de la biblioteca
1
requests
en Python, pero no importa lo que intente, no restablecerá la conexión ni actualizará la API GET call para recuperar nuevos datos. Estoy atado a tener que ejecutar el programa las veces necesarias para recuperar todos los datos de la API.

Intenté agregar el parámetro
1
{'Connection': 'close'}
en los headers de la solicitud y cerró la conexión pero aún no hay datos nuevos.

Intenté usar el método
1
request.Session()
y cerrar la sesión, pero aún no hay solución:

1
2
3
4
s = requests.Session()
 #all the code above executed but instead of requests.get, I used s.get
 #and then it was followed by this
s.close()

También probé una solución publicada en un foro de internet que sugería agregar este código después de
1
s.close()
:

1
2
s.mount ('http: //', request.adapters.HTTPAdapter ())
s.mount ('https: //', request.adapters.HTTPAdapter ())


Estoy un poco confundido con esto, por lo que cualquier ayuda, observación o sugerencia es muy apreciada.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Jaime
Val: 526
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Llamada a una API con request.get en Python Problemas

Publicado por Jaime (136 intervenciones) el 04/03/2021 23:15:16
Ya intentastes pasar la paginación como parámetro?
Porque si es una API sin paginación, en la primera consulta te debería devolver todo!
En cambio, si la API tiene paginación, te devolverá de a 100 registros (si la paginacion está configurada).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 5
Ha disminuido su posición en 17 puestos en Python (en relación al último mes)
Gráfica de Python

Llamada a una API con request.get en Python Problemas

Publicado por Jonathan (2 intervenciones) el 08/03/2021 16:12:06
Que tal Jaime,

Disculpa la demora en contestar, estaba verificando con los creadores de la API y lamentablemente no tiene parámetros para paginar y tampoco regresa algún campo con el header
1
next_link
para paginar.

¿Qué crees que pueda ser?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jaime
Val: 526
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Llamada a una API con request.get en Python Problemas

Publicado por Jaime (136 intervenciones) el 08/03/2021 16:34:58
Ni idea jejeje, lástima q no tenga como ayudarte más!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar