handelsregister

command line interface for handelsregister.de
git clone https://git.ce9e.org/handelsregister.git

commit
878ca10c1a808b69a4247073a4b4419f1b51e38e
parent
355fa4ca664c7402fa5f6915a1abba0e04fee9d3
Author
Tobias Bengfort <tobias.bengfort@posteo.de>
Date
2025-12-07 21:00
search: add more parameters

Diffstat

M README.md 2 +-
M handelsregister.py 47 +++++++++++++++++++++++++++++++++++++++++------

2 files changed, 42 insertions, 7 deletions


diff --git a/README.md b/README.md

@@ -19,6 +19,6 @@ Kurz: Die Webseite ich nicht benutzbar.
   19    19 Deshalb habe ich dieses Skript gebaut. Benutzung:
   20    20 
   21    21 ```
   22    -1 python3 handelsregister.py search 'atos'  # search by keyword
   -1    22 python3 handelsregister.py search 'atos' --state Hessen  # search by keyword
   23    23 python3 handelsregister.py xml HRB 16686 M1202  # get structured data for a specific entry
   24    24 ```

diff --git a/handelsregister.py b/handelsregister.py

@@ -14,6 +14,25 @@ REGISTERS = {
   14    14     'GsR': 'Gesellschaftsregister',
   15    15 }
   16    16 
   -1    17 STATES = [
   -1    18     'Baden-Württemberg',
   -1    19     'Bayern',
   -1    20     'Berlin',
   -1    21     'Brandenburg',
   -1    22     'Bremen',
   -1    23     'Hamburg',
   -1    24     'Hessen',
   -1    25     'Mecklenburg-Vorpommern',
   -1    26     'Niedersachsen',
   -1    27     'Nordrhein-Westfalen',
   -1    28     'Rheinland-Pfalz',
   -1    29     'Saarland',
   -1    30     'Sachsen',
   -1    31     'Sachsen-Anhalt',
   -1    32     'Schleswig-Holstein',
   -1    33     'Thüringen',
   -1    34 ]
   -1    35 
   17    36 
   18    37 def parse_id(s, ctx):
   19    38     parts = s.strip().split()
@@ -113,11 +132,16 @@ def _search(session, query):
  113   132     }
  114   133 
  115   134 
  116    -1 def search(terms, register=''):
   -1   135 def search(*, terms=[], register='', id='', court='', type='', state=''):
  117   136     query = {
  118    -1         'form:schlagwoerter': terms,
   -1   137         'form:schlagwoerter': ' '.join(terms),
  119   138         'form:registerArt_input': register,
   -1   139         'form:registerNummer': id,
   -1   140         'form:registergericht_input': court,
   -1   141         'form:rechtsform_input': type,
  120   142     }
   -1   143     if state:
   -1   144         query[f'form:{state}_input'] = 'on',
  121   145     with Session() as session:
  122   146         data = _search(session, query)
  123   147     return data['items']
@@ -158,7 +182,12 @@ def get_parser():
  158   182     subparsers = parser.add_subparsers(required=True)
  159   183 
  160   184     parser_search = subparsers.add_parser('search', help='find entries in the registers')
  161    -1     parser_search.add_argument('terms')
   -1   185     parser_search.add_argument('terms', nargs='*')
   -1   186     parser_search.add_argument('--register', choices=REGISTERS)
   -1   187     parser_search.add_argument('--id')
   -1   188     parser_search.add_argument('--court')
   -1   189     parser_search.add_argument('--type')
   -1   190     parser_search.add_argument('--state', choices=STATES)
  162   191     parser_search.set_defaults(action='search')
  163   192 
  164   193     parser_xml = subparsers.add_parser('xml', help='get data for a specific ID')
@@ -177,9 +206,15 @@ def get_parser():
  177   206 if __name__ == '__main__':
  178   207     args = get_parser().parse_args()
  179   208     if args.action == 'search':
  180    -1         for item in search(args.terms):
  181    -1             print(item['title'])
  182    -1             print('\t', item['court'], item['reg'], item['id'])
   -1   209         for item in search(
   -1   210             terms=args.terms,
   -1   211             register=args.register,
   -1   212             id=args.id,
   -1   213             court=args.court,
   -1   214             type=args.type,
   -1   215             state=args.state,
   -1   216         ):
   -1   217             print(f'{item["reg"]} {item["id"]} {item["court"]}\t{item["title"]}')
  183   218     elif args.action == 'xml':
  184   219         print(get_xml(args.register, args.id, args.court))
  185   220     else: