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.
He leído muchos más artículos con respecto a que el problema puede estar en la propiedad de la biblioteca 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 en los headers de la solicitud y cerró la conexión pero aún no hay datos nuevos.
Intenté usar el método y cerrar la sesión, pero aún no hay solución:
También probé una solución publicada en un foro de internet que sugería agregar este código después de:
Estoy un poco confundido con esto, por lo que cualquier ayuda, observación o sugerencia es muy apreciada.
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
1
requests
Intenté agregar el parámetro
1
{'Connection': 'close'}
Intenté usar el método
1
request.Session()
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
0