84 lines
2.3 KiB
Python
Executable File
84 lines
2.3 KiB
Python
Executable File
#!/usr/bin/env python
|
||
|
||
import csv
|
||
from datetime import date, timedelta
|
||
from getpass import getpass
|
||
from io import StringIO
|
||
|
||
import requests
|
||
|
||
|
||
LOGIN = 'tresorerie@afpy.org'
|
||
CAMPAIGN_IDS = (14589, 31115)
|
||
|
||
|
||
def get_members(year, password=None, output_format='csv'):
|
||
if not password:
|
||
password = getpass('Mot de passe HelloAsso : ')
|
||
|
||
session = requests.Session()
|
||
session.get(
|
||
'https://www.helloasso.com/utilisateur/authentificate',
|
||
json={
|
||
'currentUrl': 'https://helloasso.com/',
|
||
'email': LOGIN,
|
||
'password': password,
|
||
}
|
||
)
|
||
|
||
start = date(year, 1, 1)
|
||
end = date(year + 1, 1, 1) - timedelta(days=1)
|
||
|
||
start_str = f'{start.day}/{start.month}/{start.year}'
|
||
end_str = f'{end.day}/{end.month}/{end.year}'
|
||
|
||
for campaign_id in CAMPAIGN_IDS:
|
||
url = (
|
||
'https://www.helloasso.com/admin/handler/reports.ashx?'
|
||
'type=Details&format=Csv&'
|
||
f'id_adh={campaign_id}&from={start_str}&to={end_str}&'
|
||
'includeSubpages=1&period=MONTH&domain=HelloAsso&trans=Adhesions&'
|
||
)
|
||
response = session.get(url)
|
||
|
||
rows = csv.reader(StringIO(response.text), delimiter=';')
|
||
header = next(rows)
|
||
name_index = header.index('Nom')
|
||
firstname_index = header.index('Prénom')
|
||
email_index = header.index('Email')
|
||
|
||
for row in rows:
|
||
if output_format == 'dict':
|
||
yield {
|
||
'name': row[name_index],
|
||
'firstname': row[firstname_index],
|
||
'email': row[email_index],
|
||
}
|
||
elif output_format == 'csv':
|
||
yield ','.join(
|
||
row[index] for index in
|
||
(name_index, firstname_index, email_index)
|
||
)
|
||
|
||
|
||
if __name__ == '__main__':
|
||
password = getpass('Mot de passe HelloAsso : ')
|
||
|
||
print('')
|
||
|
||
print('Membres de l’année dernière')
|
||
print('===========================')
|
||
print('')
|
||
rows = get_members(date.today().year - 1, password)
|
||
for i, row in enumerate(rows):
|
||
print(f'{i + 4: 3}', row)
|
||
|
||
print('')
|
||
|
||
print('Membres de cette année')
|
||
print('======================')
|
||
print('')
|
||
rows = get_members(date.today().year, password)
|
||
for i, row in enumerate(rows):
|
||
print(f'{i + 4: 3}', row)
|