|
| 1 | +import requests |
| 2 | +from django.core.management.base import BaseCommand, CommandError |
| 3 | + |
| 4 | +from shiptrader.models import Starship |
| 5 | + |
| 6 | + |
| 7 | +class Command(BaseCommand): |
| 8 | + help = 'Retrieves starship data from the swapi.co api ' |
| 9 | + |
| 10 | + def handle(self, *args, **options): |
| 11 | + |
| 12 | + url = 'https://swapi.co/api/starships/' |
| 13 | + starships = [] |
| 14 | + |
| 15 | + while url is not None: |
| 16 | + response = requests.get(url) |
| 17 | + response_json = response.json() |
| 18 | + url = response_json['next'] |
| 19 | + starships += [build_starship(result) for result in response_json['results']] |
| 20 | + |
| 21 | + Starship.objects.bulk_create(starships) |
| 22 | + |
| 23 | + |
| 24 | +def build_starship(data): |
| 25 | + return Starship(name=data['name'], |
| 26 | + model=data['model'], |
| 27 | + starship_class=data['starship_class'], |
| 28 | + manufacturer=data['manufacturer'], |
| 29 | + length=float(convert_unknown(data['length'])), |
| 30 | + hyperdrive_rating=float(convert_unknown(data['hyperdrive_rating'])), |
| 31 | + cargo_capacity=int(convert_unknown(data['cargo_capacity'])), |
| 32 | + crew=int(convert_unknown(data['crew'])), |
| 33 | + passengers=int(convert_unknown(data['passengers']))) |
| 34 | + |
| 35 | + |
| 36 | +def convert_unknown(value): |
| 37 | + return value.replace(',', '.') if value != 'unknown' else 0 |
0 commit comments