gestion/adherents/helloasso.py

84 lines
2.3 KiB
Python
Raw Normal View History

2019-03-29 13:12:44 +00:00
#!/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)