Last active
April 25, 2023 20:38
-
-
Save LtGlahn/3ed8ad4d6aa33601a511b7dd87bc4181 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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} ") |
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
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