Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
[Consulta]Libreria requests para consultar API, [Solved]
#1
Hola a todos soy nuevo en el foro, google algun foro en español de python y este fue el primero que me salio asi que por eso estoy aqui Big Grin
Mi consulta es estoy usando esta API https://swapi.dev/documentation y quiero traer todos los datos de este endpoint https://swapi.dev/api/people/
Por cada pagina trae 10 "people" excepto la 82 que trae menos.

Mi codigo es este y funciona pero trae los primeros 10 no se como incluir a la url el parametro de paginacion

Código:
import requests
import json

if __name__ == '__main__':
    url = 'https://swapi.dev/api/people'
    response = requests.get(url)
    if response.status_code == 200:
        response_json = json.loads(response.text)
        print (response_json['results'])


Solucion


Código:
import requests
import json

total_results = []
response = requests.get("https://swapi.dev/api/people/?search=a")
data = response.json()
total_results = total_results + data['results']
while data['next'] is not None:
    response = requests.get(data['next'])
    data = response.json()
    total_results = total_results + data['results']

print(total_results)

[url=http://swapi.dev/api/people/?page=2][/url]
Responder
#2
Hola, bienvenido! Para incluir el page=2 en la URL, simplemente:

  1. response = requests.get(url, params={"page": 2})


Saludos!
Responder
#3
Hola Francisco queria incluir todas las paginas para tener todos los resultados sin hardcodearlo, ahi puse la solucion que trae todas las people sin tener que hardcodear cada url
Responder
#4
Perfecto! Gracias por aportar la solución. Dejo una alternativa:

  1. import requests
  2. import json
  3.  
  4. def get_total_results(url):
  5. response = requests.get(url)
  6. data = response.json()
  7. if data["next"] is None:
  8. return data["results"]
  9. return data["results"] + get_total_results(data["next"])
  10.  
  11. total_results = get_total_results("https://swapi.dev/api/people/?search=a")
  12. print(total_results)


Saludos
Responder
#5
(16-05-2020, 03:15 PM)Francisco escribió: Perfecto! Gracias por aportar la solución. Dejo una alternativa:

  1. import requests
  2. import json
  3.  
  4. def get_total_results(url):
  5.     response = requests.get(url)
  6.     data = response.json()
  7.     if data["next"] is None:
  8.         return data["results"]
  9.     return data["results"] + get_total_results(data["next"])
  10.  
  11. total_results = get_total_results("https://swapi.dev/api/people/?search=a")
  12. print(total_results)


Saludos

Francisco te hago una consulta esa lista de diccionarios que obtengo la quiero guardar en una mongodb, tendria que usar un orm, es una lista con diccionarios adentro el total_results que me recomendas?
Responder
#6
https://www.w3schools.com/python/python_...insert.asp
Responder
#7
hola Fransico en la API que consultamos son 82 los registros pero el script de python nos trae 58 osea faltan 24 registros y no me puedo dar cuenta por que es?


Código:
import requests
import json

def get_total_results(url):
    response = requests.get(url)
    data = response.json()
    if data["next"] is None:
        return data["results"]
    return data["results"] + get_total_results(data["next"])

total_results = get_total_results("https://swapi.dev/api/people/?search=a")
print(total_results)
Responder
#8
Hola. Son 82 en total, pero 58 con el filtro ?search=a. Si no querés que se aplique el filtro, simplemente borrá esa parte de la URL.

Saludos!
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)