Add first implementation
This commit is contained in:
parent
92075e7e46
commit
acdcf98896
4 changed files with 86 additions and 0 deletions
16
csv_exporter.py
Normal file
16
csv_exporter.py
Normal file
|
@ -0,0 +1,16 @@
|
|||
from verein import Verein
|
||||
|
||||
TABLE_HEADING = "account_name,total_balance,available_balance,redeemed"
|
||||
|
||||
|
||||
def export_vereine(vereine: [Verein], export_filename: str):
|
||||
export_string: str = TABLE_HEADING + '\n'
|
||||
for verein in vereine:
|
||||
export_string += line_for_verein(verein) + '\n'
|
||||
|
||||
with open(export_filename, 'w') as export_file:
|
||||
export_file.writelines(export_string)
|
||||
|
||||
|
||||
def line_for_verein(verein: Verein):
|
||||
return f'{verein.account_name},{verein.total_balance},{verein.available_balance},{verein.redeemed}'
|
33
main.py
Normal file
33
main.py
Normal file
|
@ -0,0 +1,33 @@
|
|||
import argparse
|
||||
|
||||
from csv_exporter import export_vereine
|
||||
from verein import Verein
|
||||
from verein_fetcher import get_verein_ids_near_location, get_verein_for_id
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(
|
||||
prog='Rewe Vereinsscheine',
|
||||
description='Get the amount of Vereinsscheine for Vereine near a location')
|
||||
parser.add_argument('latitude')
|
||||
parser.add_argument('longitude')
|
||||
parser.add_argument('-f', '--export-file', default='vereine.csv', required=False)
|
||||
args = parser.parse_args()
|
||||
|
||||
print("Fetching Vereine")
|
||||
verein_ids = get_verein_ids_near_location(args.latitude, args.longitude)
|
||||
|
||||
print("Getting Verein information")
|
||||
vereine: [Verein] = []
|
||||
for verein_id in verein_ids:
|
||||
try:
|
||||
vereine.append(get_verein_for_id(verein_id))
|
||||
except RuntimeError:
|
||||
pass
|
||||
|
||||
print("Exporting Verein information")
|
||||
export_vereine(vereine, args.export_file)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
14
verein.py
Normal file
14
verein.py
Normal file
|
@ -0,0 +1,14 @@
|
|||
class Verein:
|
||||
account_name: str
|
||||
total_balance: int
|
||||
available_balance: int
|
||||
redeemed: int
|
||||
|
||||
def __init__(self, account_name: str, total_balance: int, available_balance: int, redeemed: int):
|
||||
self.account_name = account_name
|
||||
self.total_balance = total_balance
|
||||
self.available_balance = available_balance
|
||||
self.redeemed = redeemed
|
||||
|
||||
def __str__(self):
|
||||
return f'{self.account_name}: ({self.available_balance} + {self.redeemed} = {self.total_balance})'
|
|
@ -0,0 +1,23 @@
|
|||
import requests
|
||||
|
||||
from verein import Verein
|
||||
|
||||
|
||||
def get_verein_ids_near_location(latitude: float, longitude: float, count: int = 10):
|
||||
response = requests.get(
|
||||
f"https://scheinefuervereine.rewe.de/consumer-api/customer.php?action=get_clubs_near_location&count={count}&lat={latitude}&long={longitude}")
|
||||
if not response.ok:
|
||||
return []
|
||||
|
||||
data = response.json()['data']
|
||||
return [verein['partyID'] for verein in data]
|
||||
|
||||
|
||||
def get_verein_for_id(verein_id: int) -> Verein:
|
||||
response = requests.get(
|
||||
f"https://scheinefuervereine.rewe.de/consumer-api/customer.php?action=get_club&id={verein_id}")
|
||||
if not response.ok:
|
||||
raise RuntimeError
|
||||
|
||||
data = response.json()['data']
|
||||
return Verein(data['accountName'], data['totalBalance'], data['availableBalance'], data['redeemed'])
|
Loading…
Reference in a new issue