Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf-8 -*-
- from sodapy import Socrata
- from datetime import datetime
- from django.db import IntegrityError
- from django.utils import timezone
- from .models import Machine
- DATETIME_FORMATS = dict(
- short="%d/%m/%Y",
- iso8601="%Y-%m-%dT%H:%M:%S.%fZ"
- )
- def convert_to_datetime_format(rdw_date_string, datetime_format):
- return timezone.make_aware(datetime.strptime(
- rdw_date_string, datetime_format))
- def validate_data(mach):
- machine = {}
- machine['kenteken'] = mach.get('kenteken', '')
- machine['voertuigsoort'] = mach.get('voertuigsoort', '')
- machine['merk'] = mach.get('merk', '')
- machine['handelsbenaming'] = mach.get('handelsbenaming', '')
- if 'vervaldatum_apk' not in mach:
- machine['vervaldatum_apk'] = None
- else:
- machine['vervaldatum_apk'] = convert_to_datetime_format(
- mach['vervaldatum_apk'], DATETIME_FORMATS['short'])
- if 'datum_tenaamstelling' not in mach:
- machine['datum_tenaamstelling'] = None
- else:
- machine['datum_tenaamstelling'] = convert_to_datetime_format(
- mach['datum_tenaamstelling'], DATETIME_FORMATS['short'])
- machine['bruto_bpm'] = mach.get('bruto_bpm', None)
- machine['inrichting'] = mach.get('inrichting', '')
- machine['aantal_zitplaatsen'] = mach.get(
- 'aantal_zitplaatsen', None)
- machine['eerste_kleur'] = mach.get('eerste_kleur', '')
- machine['tweede_kleur'] = mach.get('tweede_kleur', '')
- machine['aantal_cilinders'] = mach.get(
- 'aantal_cilinders', None)
- machine['cilinderinhoud'] = mach.get('cilinderinhoud', None)
- machine['massa_ledig_voertuig'] = mach.get(
- 'massa_ledig_voertuig', None)
- machine['toegestane_maximum_massa_voertuig'] = mach.get(
- 'toegestane_maximum_massa_voertuig', None)
- machine['massa_rijklaar'] = mach.get('massa_rijklaar', None)
- machine['maximum_massa_trekken_ongeremd'] = mach.get(
- 'maximum_massa_trekken_ongeremd', None)
- machine['maximum_trekken_massa_geremd'] = mach.get(
- 'maximum_trekken_massa_geremd', None)
- if 'retrofit_roetfilter' not in mach:
- machine['retrofit_roetfilter'] = None
- else:
- machine['retrofit_roetfilter'] = (
- 'Nee' not in mach['retrofit_roetfilter'])
- machine['zuinigheidslabel'] = mach.get('zuinigheidslabel', '')
- if 'datum_eerste_toelating' not in mach:
- machine['datum_eerste_toelating'] = None
- else:
- machine['datum_eerste_toelating'] = convert_to_datetime_format(
- mach['datum_eerste_toelating'], DATETIME_FORMATS['short'])
- if 'datum_eerste_afgifte_nederland' not in mach:
- machine['datum_eerste_afgifte_nederland'] = None
- else:
- machine['datum_eerste_afgifte_nederland'] = convert_to_datetime_format(
- mach['datum_eerste_afgifte_nederland'], DATETIME_FORMATS['short'])
- machine['wacht_op_keuren'] = None if 'wacht_op_keuren' not in mach else (
- 'Nee' not in mach['wacht_op_keuren'])
- machine['catalogusprijs'] = mach.get('catalogusprijs', None)
- machine['wam_verzekerd'] = mach.get('wam_verzekerd', '')
- machine['maximale_constructiesnelheid_brom_snorfiets'] = mach.get(
- 'maximale_constructiesnelheid_brom_snorfiets', None)
- machine['laadvermogen'] = mach.get('laadvermogen', None)
- machine['oplegger_geremd'] = mach.get('oplegger_geremd', None)
- machine['aanhangwagen_autonoom_geremd'] = mach.get(
- 'aanhangwagen_autonoom_geremd', None)
- machine['aanhangwagen_middenas_geremd'] = mach.get(
- 'aanhangwagen_middenas_geremd', None)
- machine['vermogen_brom_snorfiets'] = mach.get(
- 'vermogen_brom_snorfiets', None)
- machine['aantal_staanplaatsen'] = mach.get(
- 'aantal_staanplaatsen', None)
- machine['aantal_deuren'] = mach.get('aantal_deuren', None)
- machine['aantal_wielen'] = mach.get('aantal_wielen', None)
- machine['afstand_hart_koppeling_tot_achterzijde_voertuig'] = mach.get(
- 'afstand_hart_koppeling_tot_achterzijde_voertuig', None)
- machine['afstand_voorzijde_voertuig_tot_hart_koppeling'] = mach.get(
- 'afstand_voorzijde_voertuig_tot_hart_koppeling', None)
- machine['afwijkende_maximum_snelheid'] = mach.get(
- 'afwijkende_maximum_snelheid', None)
- machine['lengte'] = mach.get('lengte', None)
- machine['breedte'] = mach.get('breedte', None)
- machine['europese_voertuigcategorie'] = mach.get(
- 'europese_voertuigcategorie', '')
- machine['europese_voertuigcategorie_toevoeging'] = mach.get(
- 'europese_voertuigcategorie_toevoeging', '')
- machine['europese_uitvoeringcategorie_toevoeging'] = mach.get(
- 'europese_uitvoeringcategorie_toevoeging', '')
- machine['plaats_chassisnummer'] = mach.get(
- 'plaats_chassisnummer', '')
- machine['technische_max_massa_voertuig'] = mach.get(
- 'technische_max_massa_voertuig', None)
- machine['mtype'] = mach.get('type', '')
- machine['type_gasinstallatie'] = mach.get(
- 'type_gasinstallatie', '')
- machine['typegoedkeuringsnummer'] = mach.get(
- 'typegoedkeuringsnummer', '')
- machine['variant'] = mach.get('variant', '')
- machine['uitvoering'] = mach.get('uitvoering', '')
- machine['volgnummer_wijziging_eu_typegoedkeuring'] = mach.get(
- 'volgnummer_wijziging_eu_typegoedkeuring', None)
- machine['vermogen_massarijklaar'] = mach.get(
- 'vermogen_massarijklaar', None)
- machine['wielbasis'] = mach.get('wielbasis', None)
- machine['export_indicator'] = None if 'export_indicator' not in mach else (
- 'Nee' not in mach['export_indicator'])
- if 'openstaande_terugroepactie_indicator' not in mach:
- machine['openstaande_terugroepactie_indicator'] = None
- else:
- machine['openstaande_terugroepactie_indicator'] = (
- 'Nee' not in mach['openstaande_terugroepactie_indicator'])
- if 'vervaldatum_tachograaf' not in mach:
- machine['vervaldatum_tachograaf'] = None
- else:
- machine['vervaldatum_tachograaf'] = convert_to_datetime_format(
- mach['vervaldatum_tachograaf'], DATETIME_FORMATS['short'])
- machine['api_gekentekende_voertuigen_assen'] = mach.get(
- 'api_gekentekende_voertuigen_assen', '')
- machine['api_gekentekende_voertuigen_brandstof'] = mach.get(
- 'api_gekentekende_voertuigen_brandstof', '')
- machine['api_gekentekende_voertuigen_carrosserie'] = mach.get(
- 'api_gekentekende_voertuigen_carrosserie', '')
- machine['api_gekentekende_voertuigen_carrosserie_specifiek'] = mach.get(
- 'api_gekentekende_voertuigen_carrosserie_specifiek', '')
- machine['api_gekentekende_voertuigen_voertuigklasse'] = mach.get(
- 'api_gekentekende_voertuigen_voertuigklasse', '')
- machine['mach_id'] = mach.get(':id', '')
- machine['rdw_created_at'] = convert_to_datetime_format(
- mach[':created_at'], DATETIME_FORMATS['iso8601'])
- machine['rdw_updated_at'] = convert_to_datetime_format(
- mach[':updated_at'], DATETIME_FORMATS['iso8601'])
- return machine
- def scrap_rdw():
- client = Socrata("opendata.rdw.nl",
- "Dsj9WODO8RIEhbjXOMJfA1R1v",
- username="duco.van.rossem@keenalytics.com",
- password="0oPNyamhap96")
- machine_data = client.get("/resource/m9d7-ebf2.json",
- select="*, :id, :created_at, :updated_at",
- limit=15)
- for mach in machine_data:
- result_msg = "Created machine: "
- valid_data = validate_data(mach)
- try:
- ex_machine = Machine.objects.create(**valid_data)
- except IntegrityError:
- result_msg = "Exists machine: "
- ex_machine = Machine.objects.get(mach_id=valid_data['mach_id'])
- if valid_data['rdw_updated_at'] != ex_machine.rdw_updated_at:
- result_msg = "Updated machine: "
- Machine.objects.filter(
- mach_id=valid_data['mach_id']).update(**valid_data)
- print('{0} {1} {2}'.format(result_msg,
- ex_machine.kenteken, ex_machine.merk))
- if __name__ == '__main__':
- scrap_rdw()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement