gestion/adherents/helloasso.py

84 lines
2.3 KiB
Python
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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 lanné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)