#!/usr/bin/env python3 import datetime import json import math from multiprocessing.dummy import Pool as ThreadPool import requests sess = requests.session() # API documentation: # https://data.bka.gv.at/ris/api/v2.5/applications/bundesnormen def fetch_page(page): res = sess.get('https://data.bka.gv.at/ris/api/v2.5/bundesnormen', params=dict( Seitennummer=page, DokumenteProSeite='OneHundred', FassungVom=datetime.datetime.today().strftime('%Y-%m-%d'), Abschnitt_Von=1 )) print(res.request.url) data = res.json()['OgdSearchResult'] if 'Error' in data: print(data) return return data['OgdDocumentResults'] pages = [] first = fetch_page(1) pages.append(first) page_count = math.ceil(int(first['Hits']['#text']) / 100) for page in ThreadPool(8).map(fetch_page, range(2, page_count+1)): pages.append(page) normen = {} for page in pages: for result in page['OgdDocumentReference']: info = result['Data']['Metadaten']['Bundes-Landesnormen'] if info['Typ'] in ('K', 'K (Geltungsbereich)'): continue if info['Typ'].startswith('Vertrag -'): continue data = dict( title=info['Kurztitel'].strip(), url=info['GesamteRechtsvorschriftUrl'], ) if 'Abkuerzung' in info: data['abbr'] = info['Abkuerzung'].strip() normen[info['Gesetzesnummer']] = data with open('laws/at.json', 'w') as f: json.dump(list(normen.values()), f, indent=2, ensure_ascii=False)