Skip to content

Instantly share code, notes, and snippets.

@LtGlahn
Last active April 25, 2023 20:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save LtGlahn/3ed8ad4d6aa33601a511b7dd87bc4181 to your computer and use it in GitHub Desktop.
Save LtGlahn/3ed8ad4d6aa33601a511b7dd87bc4181 to your computer and use it in GitHub Desktop.
import requests
from datetime import datetime
from time import sleep
import pandas as pd
import geopandas as gpd
data = []
# url = 'https://hjortevilt2-utv.miljodirektoratet.no/api/v0/fallvilt'
url = 'https://www.hjorteviltregisteret.no/api/v0/fallvilt'
page = 0
pagefeil = None
pageSize = 1000
tempdata = []
data = []
if __name__ == '__main__':
t0 = datetime.now()
while len( tempdata ) > 0 or page <= 1:
page += 1
if page == 1 or page == 10 or page % 100 == 0:
print( f"Henter side {page} fra hjorteviltregister-paginering" )
r = requests.get( url, params={ 'pageSize' : pageSize, 'page' : page })
if r.ok:
if pagefeil:
print( f"SUKSESS med nytt forsøk på å hente {r.url} ")
pagefeil = None
tempdata = r.json()
if isinstance( tempdata, list):
if len( tempdata ) > 0:
data.extend( tempdata )
else:
print( f"Fikk annet resultat enn liste: {type( tempdata )}, avbryter ")
break
elif not pagefeil:
print( f"Feilrespons {r.status_code} fra hjortevilt-API {r.url}, prøver på ny om litt")
pagefeil = page
page = page -1
sleep( 15 )
else:
print( f"Feilrespons {r.status_code} fra hjortevilt-API {r.url}, gir opp")
break
tidsbruk = datetime.now() - t0
print( f"Hentet {len(data)} objekter fra hjorteviltregister, fordelt på {page-1} pagineringssider, tidsbruk: {tidsbruk}" )
myDf = pd.DataFrame( data )
# Siler vekk dem uten geometri
utengeom = myDf[ ( myDf['Latitude'].isnull()) | ( myDf['Longitude'].isnull())]
medGeom = myDf[ (~myDf['Latitude'].isnull()) & (~myDf['Longitude'].isnull())]
print( "Lagrer til fil")
myGdf = gpd.GeoDataFrame( medGeom,
geometry=gpd.points_from_xy( medGeom.Longitude, medGeom.Latitude), crs=4326 )
myGdf.to_file( 'hjorteviltdatadump.gpkg', driver='GPKG' )
print( f"Ferdig med all datanedlasting, tidsbruk inklusive lagring: {datetime.now()-t0} ")
@LtGlahn
Copy link
Author

LtGlahn commented Sep 14, 2022

Output fra scriptet:

In [13]: %run hjortevilt.py
Henter side 1 fra hjorteviltregister-paginering
Henter side 10 fra hjorteviltregister-paginering
Henter side 100 fra hjorteviltregister-paginering
Henter side 200 fra hjorteviltregister-paginering
Henter side 300 fra hjorteviltregister-paginering
Henter side 400 fra hjorteviltregister-paginering
Henter side 500 fra hjorteviltregister-paginering
Henter side 600 fra hjorteviltregister-paginering
Henter side 700 fra hjorteviltregister-paginering
Henter side 800 fra hjorteviltregister-paginering
Henter side 900 fra hjorteviltregister-paginering
Henter side 1000 fra hjorteviltregister-paginering
Henter side 1100 fra hjorteviltregister-paginering
Henter side 1200 fra hjorteviltregister-paginering
Henter side 1300 fra hjorteviltregister-paginering
Henter side 1400 fra hjorteviltregister-paginering
Henter side 1500 fra hjorteviltregister-paginering
Henter side 1600 fra hjorteviltregister-paginering
Henter side 1700 fra hjorteviltregister-paginering
Henter side 1800 fra hjorteviltregister-paginering
Henter side 1900 fra hjorteviltregister-paginering
Henter side 2000 fra hjorteviltregister-paginering
Henter side 2100 fra hjorteviltregister-paginering
Henter side 2200 fra hjorteviltregister-paginering
Henter side 2300 fra hjorteviltregister-paginering
Henter side 2400 fra hjorteviltregister-paginering
Henter side 2500 fra hjorteviltregister-paginering
Hentet 253680 objekter fra hjorteviltregister, fordelt på 2537 pagineringssider, tidsbruk: 0:48:10.186910

@LtGlahn
Copy link
Author

LtGlahn commented Sep 14, 2022

Kode for å gjøre om liste med dictionaries => Pandas DataFrame, og deretter GeoPandas GeoDataFrame => lagre til disk på egnet format.

import pandas as pd
import geopandas as gpd
mydf = pd.DataFrame( data )
myGdf = gpd.GeoDataFrame( mydf, geometry=gpd.points_from_xy(mydf.Longitude, mydf.Latitude ), crs=4326)
myGdf.to_file( 'hjortevilt.gpkg', layer='hjortevilt', driver='GPKG' )

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment