Ajout des scripts pour les adhérents

This commit is contained in:
Guillaume Ayoub 2019-03-29 14:12:44 +01:00
parent 6e997008f3
commit d3f74b229e
2 changed files with 177 additions and 0 deletions

83
adherents/helloasso.py Executable file
View File

@ -0,0 +1,83 @@
#!/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)

94
adherents/relance.py Executable file
View File

@ -0,0 +1,94 @@
#!/usr/bin/env python
import smtplib
import sys
import time
import traceback
from datetime import date
from email.message import EmailMessage
from getpass import getpass
from helloasso import get_members
HOST = 'mail.afpy.org'
PORT = 587
SUBJECT = 'Campagne de cotisation AFPy'
TEMPLATE = '''Bonjour {firstname} {name},
Vous recevez ce courriel en tant que membre de l'Association Francophone
Python.
Nos scripts Python nous ont informés que vous n'étiez pas à jour de votre
cotisation.
Maintenir votre cotisation à jour vous permet de prendre part aux votes lors
des assembles générales et de soutenir l'action de l'association,
financièrement et moralement.
Voici un exemple des ralisations de l'AFPy ces dernières années:
- organisation des confrences PyConFr,
- partenariat avec la confrence PyData,
- financement ou organisation de divers ateliers Python (Django Girl, Django
Carrot. Workshop Django),
- traduction en français de la documentation Python,
- mise en place de rencontres locales (Lyon, Pau, Nantes, Grenoble, Paris,
Rennes).
La cotisation annuelle de l'AFPy est de 20€. Le taux réduit de 10€ s'applique
aux personnes ayant des revenus modestes.
Vous pouvez payer votre cotisation en ligne à l'adresse suivante:
https://www.helloasso.com/associations/afpy/adhesions/
En attendant de recevoir votre cotisation, nous vous souhaitons une bonne
journée pleine de Python!
--
Association Francophone Python
'''
if __name__ == '__main__':
smtp_login = getpass('Identifiant SMTP: ')
smtp_password = getpass('Mot de passe SMTP: ')
hello_password = getpass('Mot de passe HelloAsso: ')
print()
print('Récupération des membres…')
print()
old_members = get_members(
date.today().year - 1, hello_password, output_format='dict')
new_members_emails = {
member['email'] for member in
get_members(date.today().year, hello_password, output_format='dict')}
members = [
member for member in old_members
if member['email'] not in new_members_emails]
members = [{'firstname': 'Guillaume', 'name': 'Ayoub', 'email': 'xovni@wanadoo.fr'}]
print(f'Envoi du message à {len(members)} personnes dans 10 secondes!')
print()
time.sleep(10)
for member in members:
message = EmailMessage()
message.set_content(TEMPLATE.format(**member))
message['Subject'] = SUBJECT
message['From'] = f'Association Francophone Python <{smtp_login}>'
message['To'] = [member['email']]
print(f'Envoi à {member["email"]}')
afpy_smtp = smtplib.SMTP(host=HOST, port=PORT)
afpy_smtp.starttls()
afpy_smtp.login(smtp_login, smtp_password)
try:
afpy_smtp.send_message(message)
except Exception:
traceback.print_exc(file=sys.stderr)
afpy_smtp.quit()
time.sleep(1)