Advertisement
Guest User

Untitled

a guest
Jan 29th, 2016
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 8.14 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. from sodapy import Socrata
  3. from datetime import datetime
  4.  
  5. from django.db import IntegrityError
  6. from django.utils import timezone
  7.  
  8. from .models import Machine
  9.  
  10.  
  11. DATETIME_FORMATS = dict(
  12.     short="%d/%m/%Y",
  13.     iso8601="%Y-%m-%dT%H:%M:%S.%fZ"
  14. )
  15.  
  16.  
  17. def convert_to_datetime_format(rdw_date_string, datetime_format):
  18.     return timezone.make_aware(datetime.strptime(
  19.         rdw_date_string, datetime_format))
  20.  
  21.  
  22. def validate_data(mach):
  23.     machine = {}
  24.     machine['kenteken'] = mach.get('kenteken', '')
  25.     machine['voertuigsoort'] = mach.get('voertuigsoort', '')
  26.     machine['merk'] = mach.get('merk', '')
  27.     machine['handelsbenaming'] = mach.get('handelsbenaming', '')
  28.     if 'vervaldatum_apk' not in mach:
  29.         machine['vervaldatum_apk'] = None
  30.     else:
  31.         machine['vervaldatum_apk'] = convert_to_datetime_format(
  32.             mach['vervaldatum_apk'], DATETIME_FORMATS['short'])
  33.     if 'datum_tenaamstelling' not in mach:
  34.         machine['datum_tenaamstelling'] = None
  35.     else:
  36.         machine['datum_tenaamstelling'] = convert_to_datetime_format(
  37.             mach['datum_tenaamstelling'], DATETIME_FORMATS['short'])
  38.     machine['bruto_bpm'] = mach.get('bruto_bpm', None)
  39.     machine['inrichting'] = mach.get('inrichting', '')
  40.     machine['aantal_zitplaatsen'] = mach.get(
  41.         'aantal_zitplaatsen', None)
  42.     machine['eerste_kleur'] = mach.get('eerste_kleur', '')
  43.     machine['tweede_kleur'] = mach.get('tweede_kleur', '')
  44.     machine['aantal_cilinders'] = mach.get(
  45.         'aantal_cilinders', None)
  46.     machine['cilinderinhoud'] = mach.get('cilinderinhoud', None)
  47.     machine['massa_ledig_voertuig'] = mach.get(
  48.         'massa_ledig_voertuig', None)
  49.     machine['toegestane_maximum_massa_voertuig'] = mach.get(
  50.         'toegestane_maximum_massa_voertuig', None)
  51.     machine['massa_rijklaar'] = mach.get('massa_rijklaar', None)
  52.     machine['maximum_massa_trekken_ongeremd'] = mach.get(
  53.         'maximum_massa_trekken_ongeremd', None)
  54.     machine['maximum_trekken_massa_geremd'] = mach.get(
  55.         'maximum_trekken_massa_geremd', None)
  56.     if 'retrofit_roetfilter' not in mach:
  57.         machine['retrofit_roetfilter'] = None
  58.     else:
  59.         machine['retrofit_roetfilter'] = (
  60.             'Nee' not in mach['retrofit_roetfilter'])
  61.     machine['zuinigheidslabel'] = mach.get('zuinigheidslabel', '')
  62.     if 'datum_eerste_toelating' not in mach:
  63.         machine['datum_eerste_toelating'] = None
  64.     else:
  65.         machine['datum_eerste_toelating'] = convert_to_datetime_format(
  66.             mach['datum_eerste_toelating'], DATETIME_FORMATS['short'])
  67.     if 'datum_eerste_afgifte_nederland' not in mach:
  68.         machine['datum_eerste_afgifte_nederland'] = None
  69.     else:
  70.         machine['datum_eerste_afgifte_nederland'] = convert_to_datetime_format(
  71.             mach['datum_eerste_afgifte_nederland'], DATETIME_FORMATS['short'])
  72.     machine['wacht_op_keuren'] = None if 'wacht_op_keuren' not in mach else (
  73.         'Nee' not in mach['wacht_op_keuren'])
  74.     machine['catalogusprijs'] = mach.get('catalogusprijs', None)
  75.     machine['wam_verzekerd'] = mach.get('wam_verzekerd', '')
  76.     machine['maximale_constructiesnelheid_brom_snorfiets'] = mach.get(
  77.         'maximale_constructiesnelheid_brom_snorfiets', None)
  78.     machine['laadvermogen'] = mach.get('laadvermogen', None)
  79.     machine['oplegger_geremd'] = mach.get('oplegger_geremd', None)
  80.     machine['aanhangwagen_autonoom_geremd'] = mach.get(
  81.         'aanhangwagen_autonoom_geremd', None)
  82.     machine['aanhangwagen_middenas_geremd'] = mach.get(
  83.         'aanhangwagen_middenas_geremd', None)
  84.     machine['vermogen_brom_snorfiets'] = mach.get(
  85.         'vermogen_brom_snorfiets', None)
  86.     machine['aantal_staanplaatsen'] = mach.get(
  87.         'aantal_staanplaatsen', None)
  88.     machine['aantal_deuren'] = mach.get('aantal_deuren', None)
  89.     machine['aantal_wielen'] = mach.get('aantal_wielen', None)
  90.     machine['afstand_hart_koppeling_tot_achterzijde_voertuig'] = mach.get(
  91.         'afstand_hart_koppeling_tot_achterzijde_voertuig', None)
  92.     machine['afstand_voorzijde_voertuig_tot_hart_koppeling'] = mach.get(
  93.         'afstand_voorzijde_voertuig_tot_hart_koppeling', None)
  94.     machine['afwijkende_maximum_snelheid'] = mach.get(
  95.         'afwijkende_maximum_snelheid', None)
  96.     machine['lengte'] = mach.get('lengte', None)
  97.     machine['breedte'] = mach.get('breedte', None)
  98.     machine['europese_voertuigcategorie'] = mach.get(
  99.         'europese_voertuigcategorie', '')
  100.     machine['europese_voertuigcategorie_toevoeging'] = mach.get(
  101.         'europese_voertuigcategorie_toevoeging', '')
  102.     machine['europese_uitvoeringcategorie_toevoeging'] = mach.get(
  103.         'europese_uitvoeringcategorie_toevoeging', '')
  104.     machine['plaats_chassisnummer'] = mach.get(
  105.         'plaats_chassisnummer', '')
  106.     machine['technische_max_massa_voertuig'] = mach.get(
  107.         'technische_max_massa_voertuig', None)
  108.     machine['mtype'] = mach.get('type', '')
  109.     machine['type_gasinstallatie'] = mach.get(
  110.         'type_gasinstallatie', '')
  111.     machine['typegoedkeuringsnummer'] = mach.get(
  112.         'typegoedkeuringsnummer', '')
  113.     machine['variant'] = mach.get('variant', '')
  114.     machine['uitvoering'] = mach.get('uitvoering', '')
  115.     machine['volgnummer_wijziging_eu_typegoedkeuring'] = mach.get(
  116.         'volgnummer_wijziging_eu_typegoedkeuring', None)
  117.     machine['vermogen_massarijklaar'] = mach.get(
  118.         'vermogen_massarijklaar', None)
  119.     machine['wielbasis'] = mach.get('wielbasis', None)
  120.     machine['export_indicator'] = None if 'export_indicator' not in mach else (
  121.         'Nee' not in mach['export_indicator'])
  122.     if 'openstaande_terugroepactie_indicator' not in mach:
  123.         machine['openstaande_terugroepactie_indicator'] = None
  124.     else:
  125.         machine['openstaande_terugroepactie_indicator'] = (
  126.             'Nee' not in mach['openstaande_terugroepactie_indicator'])
  127.     if 'vervaldatum_tachograaf' not in mach:
  128.         machine['vervaldatum_tachograaf'] = None
  129.     else:
  130.         machine['vervaldatum_tachograaf'] = convert_to_datetime_format(
  131.             mach['vervaldatum_tachograaf'], DATETIME_FORMATS['short'])
  132.     machine['api_gekentekende_voertuigen_assen'] = mach.get(
  133.         'api_gekentekende_voertuigen_assen', '')
  134.     machine['api_gekentekende_voertuigen_brandstof'] = mach.get(
  135.         'api_gekentekende_voertuigen_brandstof', '')
  136.     machine['api_gekentekende_voertuigen_carrosserie'] = mach.get(
  137.         'api_gekentekende_voertuigen_carrosserie', '')
  138.     machine['api_gekentekende_voertuigen_carrosserie_specifiek'] = mach.get(
  139.         'api_gekentekende_voertuigen_carrosserie_specifiek', '')
  140.     machine['api_gekentekende_voertuigen_voertuigklasse'] = mach.get(
  141.         'api_gekentekende_voertuigen_voertuigklasse', '')
  142.     machine['mach_id'] = mach.get(':id', '')
  143.     machine['rdw_created_at'] = convert_to_datetime_format(
  144.         mach[':created_at'], DATETIME_FORMATS['iso8601'])
  145.     machine['rdw_updated_at'] = convert_to_datetime_format(
  146.         mach[':updated_at'], DATETIME_FORMATS['iso8601'])
  147.     return machine
  148.  
  149.  
  150. def scrap_rdw():
  151.     client = Socrata("opendata.rdw.nl",
  152.                      "Dsj9WODO8RIEhbjXOMJfA1R1v",
  153.                      username="duco.van.rossem@keenalytics.com",
  154.                      password="0oPNyamhap96")
  155.     machine_data = client.get("/resource/m9d7-ebf2.json",
  156.                               select="*, :id, :created_at, :updated_at",
  157.                               limit=15)
  158.     for mach in machine_data:
  159.         result_msg = "Created machine: "
  160.         valid_data = validate_data(mach)
  161.         try:
  162.             ex_machine = Machine.objects.create(**valid_data)
  163.         except IntegrityError:
  164.             result_msg = "Exists machine: "
  165.             ex_machine = Machine.objects.get(mach_id=valid_data['mach_id'])
  166.             if valid_data['rdw_updated_at'] != ex_machine.rdw_updated_at:
  167.                 result_msg = "Updated machine: "
  168.                 Machine.objects.filter(
  169.                     mach_id=valid_data['mach_id']).update(**valid_data)
  170.         print('{0} {1} {2}'.format(result_msg,
  171.                                    ex_machine.kenteken, ex_machine.merk))
  172.  
  173.  
  174. if __name__ == '__main__':
  175.     scrap_rdw()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement