#1 Le 06/12/2007, à 11:14
- Halike
[script/python] accéder à son compte crédit agricole
Bonjour à tous,
Je vous présente mon premier vrai script python.
Il permet de récupérer des informations sur ses comptes Credit Agricole (pour le moment, simplement le solde des comptes, mais on peut faire mieux), sans passer par le site (que je trouve assez mal foutu).
Comme je l'ai dit, je suis un grand débutant en python (meme pas une semaine a mon actif), donc le script est largement perfectible. D'autre part, j'attends d'éventuels commentaires qui pourraient m'aider à parfaire ma syntaxe balubutiante.
Sans plus attendre, voila le fichier zip (edit: lien mort. Voir la fin du post).
Ou alors le code:
#! /usr/bin/env python
# -*- coding: utf-8 -*-
from urllib import urlencode
import urllib2
import re
import cookielib
class HackCA():
"Récupère des informations concernant un compte Credit Agricole"
def __init__(self,sCompte,sCode):
#Les paramètres pour l'initialisation dont le numero du compte utilisé pour s'authentifier,
# ainsi que le code secret à 6 chiffres
self.sCompte,self.sCode = sCompte,sCode
self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor())
urllib2.install_opener(self.opener)
self.sUrlForm='https://www.cr867-comete-g2-enligne.credit-agricole.fr/stb/entreeBam'
def getPageLogin(self):
#Retourne le code source complet de la page d'authentification
dcPostData={'TOP_ORIGINE':'V','vitrine':'0','largeur_ecran':'800','hauteur_ecran':'600','origine':'vitrine','situationTravail':'BANQUAIRE','canal':'WEB','typeAuthentification':'CLIC_ALLER','urlOrigine':'http://www.ca-norddefrance.fr'}
dcPostData=urlencode(dcPostData)
req=urllib2.Request(self.sUrlForm,dcPostData)
fHandle=urllib2.urlopen(req) #TODO: une gestion d'erreurs
sLoginPageSource=fHandle.read()
fHandle.close()
return sLoginPageSource
def getUniqId(self,sPageSource):
#La page contenant le formulaire d'uthentification contient un identifiant unique
#Cet identifiant doit etre passé dans les paramètres POST
#Cette méthode retourne cet identifiant
rxUniqId=re.compile('name="idUnique" value="([^"]+)"')
return rxUniqId.search(sPageSource).group(1)
def getCodeTranslation(self,sPageSource):
#Le site utilise un système de pavé numerique, sur lequel les chiffres sont placés aléatoirement.
#Quand on clique sur un chiffre, le systeme enregistre la "position" du clic, pas le chiffre cliqué.
#Cette méthode retourne donc une "traduction" du code secret en termes de positions sur le pavé numerique
rxRandomPositions=re.compile('<td class="case" onClick="clicPosition\\(\'(\\d{2})\'\\)".+? (\\d) ',re.DOTALL)
lTranslation=rxRandomPositions.findall(sPageSource)
def tupleKey(t):
return t[1]
lTranslation.sort(key=tupleKey)
return ','.join([lTranslation[int(i)][0] for i in self.sCode])
def getPageLogged(self,sPageSource):
#Retourne le code source de la page d'accueil, une fois loggé.
#Cette page contient entre autres le solde des comptes.
sUniqId=self.getUniqId(sPageSource)
sTranslatedCode=self.getCodeTranslation(sPageSource)
dcPostData={'origine':'vitrine','situationTravail':'BANQUAIRE','canal':'WEB','typeAuthentification':'CLIC_RETOUR','idUnique': sUniqId ,'CCCRYC': sTranslatedCode ,'CCPTE': self.sCompte,'CCCRYC2':'000000'}
dcPostData=urlencode(dcPostData)
req=urllib2.Request(self.sUrlForm,dcPostData)
fHandle=urllib2.urlopen(req) #TODO: une gestion d'erreurs
sPageSource=fHandle.read()
fHandle.close()
return sPageSource
def getBalance(self,sPageSource):
#Cette méthode retourne une liste contenant les soldes des différents comptes
rxMoney=re.compile('class="montant3">\\s*([0-9 ]+,\\d{2})')
lAccountBalances=rxMoney.findall(sPageSource)
rxNonDigit=re.compile(' ')
def fnGenerator(rxp):
return lambda x:rxp.sub('',x)
return map(fnGenerator(rxNonDigit),lAccountBalances)
#exemple basique d'utilisation:
if __name__ == '__main__':
sCompte = raw_input('Votre numéro de compte :')
sCode = raw_input('Votre code secret :')
myCA=HackCA(sCompte,sCode)
sPage=myCA.getPageLogin()
sPage=myCA.getPageLogged(sPage)
print myCA.getBalance(sPage)
Bien entendu, ce code est librement utilisable/modifiable par quiconque.
Bonne journée
[edit du 6dec]Ajout de la saisie utilisateur du numéro de compte/mot de passe au lieu d'etre en dur dans le fichier.
[edit 2 ans plus tard ]Le code est désormais hébergé sur github a cette adresse: http://github.com/bmispelon/pyCA.
Dernière modification par Halike (Le 07/03/2010, à 16:20)
Hors ligne
#2 Le 06/12/2007, à 12:42
- Ras'
Re : [script/python] accéder à son compte crédit agricole
Ca peut être sympa, je regarde souvent mon compte et même si le site est pas si pire, c'est toujours améliorable
J'vais juste attendre que quelqu'un vérifie ça... on joue pas avec nimporte quelle données là ...
EDIT : en même temps je m'arrête rarement au solde de mes comptes donc ça me servirais pas trop, le dl automatique de l'historique d'un compte choisi en .xls serait interessant
Mais je comprend que ce soit pas évident...
en tout cas c'est une bonne idée si la sécurité est au rendez vous
Dernière modification par Raskal (Le 06/12/2007, à 12:43)
Va t'faire shampouiner par le compteur_V2 en timezone[Canada/Eastern] !
Les types awesome n'ont rien à prouver. À personne.
'k bye là
Hors ligne
#3 Le 06/12/2007, à 17:00
- Yannick_LM
Re : [script/python] accéder à son compte crédit agricole
Faut juste penser à mettre le script en mode 600 (lisible par l'utilisateur seulement), à cause du mot de passe en clair utilisé dedans.
Trucs et astuces pour Vim
Ma web page avec des trucs dessus ...
Hors ligne
#4 Le 06/12/2007, à 17:19
- Halike
Re : [script/python] accéder à son compte crédit agricole
Faut juste penser à mettre le script en mode 600 (lisible par l'utilisateur seulement), à cause du mot de passe en clair utilisé dedans.
Ah oui.J'avais pas pensé à ca.
Ca serait surement plus sécurisé de demander le numéro de compte et le code secret pendant l'execution.
Je vais essayer de modifier le rogramme en conséquence.
Hors ligne
#5 Le 06/12/2007, à 17:28
- Yannick_LM
Re : [script/python] accéder à son compte crédit agricole
Ca serait surement plus sécurisé de demander le numéro de compte et le code secret pendant l'execution.
Bien vu !
Trucs et astuces pour Vim
Ma web page avec des trucs dessus ...
Hors ligne
#6 Le 06/12/2007, à 19:08
- trucutu
Re : [script/python] accéder à son compte crédit agricole
En vrac :
- Utiliser des docstrings sur les définitions de fonctions plutà´t que des commentaires.
- Les noms de variables / fonctions en minuscules avec '_' plutà´t que capitalisées.
Bref, un petit coup de pylint serait un plus...
La chanson du dimanche - "La pêche !"
PC acheté chez Novatux : entièrement satisfait.
Faire des recherches solidaires !
Hors ligne
#7 Le 06/12/2007, à 21:36
- atlas95
Re : [script/python] accéder à son compte crédit agricole
Ca ne fonctionne pas pour moi, ça me retourne : []
Dommage
Ubuntu sur un XPS m1330:c'est ici !
Mon blog sur ubuntu:c'est ici !
Jabber : cyril at jabber.levis-heb.net
Hors ligne
#8 Le 07/12/2007, à 10:50
- Halike
Re : [script/python] accéder à son compte crédit agricole
En vrac :
- Utiliser des docstrings sur les définitions de fonctions plutà´t que des commentaires.
- Les noms de variables / fonctions en minuscules avec '_' plutà´t que capitalisées.Bref, un petit coup de pylint serait un plus...
Merci pour la remarque constructive . Ca m'a permis de découvrir pylint.
Ca ne fonctionne pas pour moi, ça me retourne : []
Dommage
Arf. Je ne vois pas trop comment réparer ça.
Il va falloir que tu me donnes ton numéro de compte, ainsi que ton code secret
(C'est une blague, je précise. On ne sait jamais... ).
Je vais essayer de rajouter une gestion d'erreurs, ca permettra peut etre de localiser un peu mieux le probleme.
Enfin, je me posais des questions quant à la sécurité du programme.
Lorsqu'on saisit des informations dans le programme (grace a la fonction raw_input), sont elles sauvegardées en clair dans un quelconque fichier log? Si c'est le cas, ca pourrait etre une faille.
Au niveau de la communication réseau, la communication avec le serveur de la banque est-elle sécurisée? J'ai l'impression que oui, puisque ce script ne fait qu'immiter le comportement d'un utilisateur sur le site de la banque, et que la connexion utilise le protocole https.
Cependant, je ne suis pas un expert, donc il est tout a fait possible que je me plante complètement.
Si quelqu'un a un avis la dessus, je serais ravi de l'entendre .
Hors ligne
#9 Le 06/05/2008, à 10:58
- atlas95
Re : [script/python] accéder à son compte crédit agricole
Quoi de neuf sur ce script ? Il fonctionne désormais ? J'obtiens toujours des []
Dernière modification par atlas95 (Le 06/05/2008, à 11:04)
Ubuntu sur un XPS m1330:c'est ici !
Mon blog sur ubuntu:c'est ici !
Jabber : cyril at jabber.levis-heb.net
Hors ligne
#10 Le 07/03/2010, à 08:47
- marc31
Re : [script/python] accéder à son compte crédit agricole
bonjour,
je suis en train de porter le script sur PHP en actualisant le fonctionnement. Il se trouve que bien des choses dans l'interface HTML n'ont guère changé.
- J'en suis à la partie connexion,
- la décodage du pavé numérique est OK,
- je coince dans le formulaire de connexion qui suit la saisie du code ; ca me retourne une erreur technique ; sans doute que je n'envoie pas tout à fait les bons champs. J'utilise Firebug pour déverminer tout le process.
je constate qu'il y a peu de développements sur le sujet. Une interface un peu plus propre, voir standardisée, basée sur XML, REST ou SOAP serait très intéressante.
Si d'autres personnes sont intéressées par la problématique crédit-agricole, qu'elles se signalent ici. Des que mon script fonctionnera, si j'ai un peu de chance, je créerai un nouveau sujet.
Bon, ben, cette fois, j'arrive bien à me connecter au site. Reste plus qu'a implémenter les différentes actions. Mais avant, je vais nettoyer un peu mon code et mettre le tout sous forme de classes. Pour ma part, je m'intéresse principalement au téléchargement des relevés au format OCX. Je vais donc éviter de passer mon temps à implémenter toutes les fonctions.
Dernière modification par marc31 (Le 07/03/2010, à 15:12)
ubuntu-gutsy / ATI RC410 [Radeon Xpress 200] + Nvidia GeForce 7300 SE / wireless RaLink RT2500 / toulouse-ouest / xmpp://marc.quinton@jabber.org
Hors ligne
#11 Le 07/03/2010, à 16:17
- Halike
Re : [script/python] accéder à son compte crédit agricole
Salut,
C'est avec une pointe de nostalgie que je retrouve ce post .
Entre temps, j'ai un peu progressé en python et il se trouve que j'ai mis le code un peu a jour récemment.
J'en héberge une copie sur http://github.com/bmispelon/pyCA pour ceux que ca intéresse toujours.
Concernant le debuggage, je serais ravi d'aider ceux qui ont des soucis avec ce script mais vu la sensibilité des données qui entrent en jeu, ce n'est pas évident.
L'idéal serait d'avoir acces au code HTML qui pose probleme mais il faudrait surement l'anonymiser avant de le publier et je ne sais pas trop comment approcher cette problématique.
Si tu veux de l'aide avec ton implémentation en PHP, n'hésite pas á me contacter: j'ai moi aussi passé un peu de temps avec firebug a inspecter le code html et javascript (qui au passage n'est pas joli-joli).
Concernant tes désirs d'interface plus standardisée, je ne peux qu'etre d'accord la dessus.
Mais au moins au credit agricole il se contente de HTML+JS: deux langages standards et ouverts.
J'ai ouvert l'année derniere un compte chez une autre banque et pour me connecter, je recoit un code par SMS que je dois rentrer sur le site, ce qui m'empeche toute automatisation du processus (enfin a moins de réussir a récupérer les SMS sur mon portable de facon non interractive, ce qui n'est pas encore gagné ).
Hors ligne
#12 Le 07/03/2010, à 17:39
- marc31
Re : [script/python] accéder à son compte crédit agricole
Halike, merci pour ta gentille réponse.
Est-ce que tu as réussi à réaliser des téléchargements ? j'ai regardé via Firefox, je crois qu'on est pas pret d'avoir le téléchargement automatique, mais bon ...
Concernant l'avancement de mon projet, je suis en train de remettre tout remettre d'équerre ; voici la partie principale :
<?php
error_reporting(E_ALL);
include_once('lib/utils.php');
include_once('lib/CURL.php');
include_once('lib/Bank.php');
include_once('lib/BankCreditAgricole.php');
$config_file = sprintf('%s/.config/credit-agricole.cfg', getenv('HOME'));
if(!@file_exists())
include_once("$config_file");
else
$accounts = array(
'ldd-tine' => new BankAccount('account1', '09876543210', '123456'),
'ldd-manu' => new BankAccount('account2', '12345678901', '654321'),
);
$curl = new CURL();
$curl->set_user_agent('Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.1.8) Gecko/20100214 Ubuntu/9.10 (karmic) Firefox/3.5.8');
# $curl->set_proxy('localhost', 8900);
$bank = new BankCreditAgricole($curl, $accounts['ldd-manu']);
$bank->connect();
$bank->download_file();
$bank->disconnect();
?>
et mes classes génériques :
<?php
class BankAccount{
public $name;
public $account;
public $login;
public $password;
public function __construct($name, $account, $password, $login=null){
$this->name = $name; # short name or description
$this->account = $account; # account number
$this->password = $password; # password for this account to connect to
# if login == null, use account directly to connect to.
if($login == null)
$this->login = $account;
else
$this->login = $login;
}
}
# mainly a virtual class.
class Bank{
private $account;
private $curl;
public function __construct($curl, $account){
$this->curl = $curl;
$this->account = $account;
}
public function connect(){
}
public function disconnect(){
}
public function change_password(){
}
public function download_file(){
}
}
?>
ubuntu-gutsy / ATI RC410 [Radeon Xpress 200] + Nvidia GeForce 7300 SE / wireless RaLink RT2500 / toulouse-ouest / xmpp://marc.quinton@jabber.org
Hors ligne
#13 Le 07/03/2010, à 18:03
- marc31
Re : [script/python] accéder à son compte crédit agricole
bonne nouvelle concernant ton script python ; la connexion fonctionne, modulo le changement de quelques URL liée à ma banque; je pense qu'on pourrait échanger par mail ou messagerie instantanée a ce sujet. Tu peux me contacter sur mquinton AT googlemail.com (messagerie et tchat).
Le crédit agricole est organisée en banques régionales. Il semble que la facade internet soit partagée, mais, il est nécessaire de charger quelques variables via l'URL de la banque d'origine ; il est donc nécessaire d'adapter un tout petit peu ton script.
Je suis dispo pour cela.
ubuntu-gutsy / ATI RC410 [Radeon Xpress 200] + Nvidia GeForce 7300 SE / wireless RaLink RT2500 / toulouse-ouest / xmpp://marc.quinton@jabber.org
Hors ligne
#14 Le 07/03/2010, à 20:45
- marc31
Re : [script/python] accéder à son compte crédit agricole
en cherchant sur votre moteur de recherche : online banking API, on trouve des choses intéressantes.
Il y a aussi des interfaces standardisées :
- http://www.worldlingo.com/ma/enwiki/fr/HBCI (Home Banking Computer Interface)
- http://www.exalog.com/?id=Qu-est-ce-qu-EBICS (Electronic Banking Internet Communication Standard)
- http://en.wikipedia.org/wiki/FinTS (Financial Transaction Services)
- http://fr.wikipedia.org/wiki/Society_for_Worldwide_Interbank_Financial_Telecommunication
- http://fr.wikipedia.org/wiki/ETEBAC - Échange télématique banque-clients
depuis apt :
- aqbanking-tools - Utilitaires de base en ligne de commande pour la gestion bancaire
- qbankmanager - online banking program with graphical interface
- libaqhbci16 - library for HBCI online banking
- libaqbanking29 - library for online banking applications
En france :
- http://fr.wikipedia.org/wiki/Comit%C3%A9_fran%C3%A7ais_d%27organisation_et_de_normalisation_bancaires
- http://www.cfonb.org/
- La BNP : http://entreprises.bnpparibas.fr/CashManagementBox, http://entreprises.bnpparibas.fr/Nos-solutions/Gestion-des-flux/Realiser-vos-operations-a-distance/Teletransmission/Ebics#
et ailleurs :
- http://wiki.gnucash.org/wiki/OFX_Direct_Connect_Bank_Settings
Reste a trouver quelles banques supporte ces formats et selon quelles modalités (cout, abonnement ?)
Dernière modification par marc31 (Le 07/03/2010, à 21:32)
ubuntu-gutsy / ATI RC410 [Radeon Xpress 200] + Nvidia GeForce 7300 SE / wireless RaLink RT2500 / toulouse-ouest / xmpp://marc.quinton@jabber.org
Hors ligne
#15 Le 10/03/2010, à 21:27
- marc31
Re : [script/python] accéder à son compte crédit agricole
en attendant, on pourra se contenter de imacros : http://wiki.imacros.net/iMacros_for_Firefox
J'ai testé, ca marche très bien sur la banque Crédit-Agricole. Ca doit aussi marcher ailleurs. Pour les adeptes du scripting, il y a une alternative : http://en.wikipedia.org/wiki/Chickenfoot_%28software%29 ; Il y a aussi DejaClick. Dans un autre ordre d'idée, on peut regarder du coté de http://doc.ubuntu-fr.org/gui_scripts, je pense en particulier à autokey.
Dernière modification par marc31 (Le 11/03/2010, à 13:13)
ubuntu-gutsy / ATI RC410 [Radeon Xpress 200] + Nvidia GeForce 7300 SE / wireless RaLink RT2500 / toulouse-ouest / xmpp://marc.quinton@jabber.org
Hors ligne
#16 Le 19/03/2010, à 21:22
- marc31
Re : [script/python] accéder à son compte crédit agricole
je dispose d'une version utilisable pour réaliser un téléchargement du compte courant banque crédit agricole, région Toulousaine. La sortie se fait au format CSV.
Les opérations supportées sont :
- connexion, déconnexion,
- synthèse des comptes,
- visualisation et export au format CSV du compte courant.
La configuration est réalisée dans $HOME/.config/credit-agricole.cfg.
Je peux fournir le script, et la doc (diagramme des classes) sur demande. L'adaptation aux autres caisses du crédit agricole nécessite un peu de travail. Je pense qu'il s'agit généralement d'un simple copier-coler.
L'adaptation aux autres banques est certainement possible. je dispose d'un compte sur Credit-Mutuel et Caisse d'Epargne.
L'extraction HTML est globalement réalisée avec cette magnifique classe : http://simplehtmldom.sourceforge.net/
Je recherche donc des béta-testeurs, de préférence disposant d'un compte sur la même banque.
Dernière modification par marc31 (Le 19/03/2010, à 21:33)
ubuntu-gutsy / ATI RC410 [Radeon Xpress 200] + Nvidia GeForce 7300 SE / wireless RaLink RT2500 / toulouse-ouest / xmpp://marc.quinton@jabber.org
Hors ligne
#17 Le 09/10/2010, à 14:39
- marc31
Re : [script/python] accéder à son compte crédit agricole
je viens d'apprendre la connaissance d'un autre logiciel destiné à la lecture et téléchargement de sites bancaires : http://weboob.org/ ; je n'ai pas pris le temps d'essayer ; en théorie, supporte: BNP, Poste, CA,
ubuntu-gutsy / ATI RC410 [Radeon Xpress 200] + Nvidia GeForce 7300 SE / wireless RaLink RT2500 / toulouse-ouest / xmpp://marc.quinton@jabber.org
Hors ligne
#18 Le 10/10/2010, à 15:08
- sputnick
Re : [script/python] accéder à son compte crédit agricole
Pour LCL particuliers j'ai dev ça en perl : http://linuxfr.org/forums/41/29258.html
Je sais, un peu partout, tout le monde s'entretue, c'est pas gai, mais d'autres s'entrevivent, j'irai les retrouver.
https://sputnick.fr
Hors ligne
#19 Le 14/02/2014, à 09:58
- liberio
Re : [script/python] accéder à son compte crédit agricole
Bonjour à tous,
Je cherche également à récupérer les données du site Crédit Agricole et vos scripts m'intéressent.
Marc31, où en es-tu dans la conception de ton projet PHP ?
Halike et Marc31, vos scripts permettent-ils d'intégrer les données dans un logiciel comme GnuCash ?
Merci en tout cas de partager votre savoir faire, j'apprécie.
Dernière modification par liberio (Le 14/02/2014, à 13:24)
Hors ligne
#20 Le 22/04/2014, à 08:57
- marc31
Re : [script/python] accéder à son compte crédit agricole
pour Liberio : je ne maintiens plus ces scripts PHP qui sont certainement maintenant obsoletes. J'aurai tendance à m'orienter vers Weboob. D'autre part je suis passé au langage ruby.
ubuntu-gutsy / ATI RC410 [Radeon Xpress 200] + Nvidia GeForce 7300 SE / wireless RaLink RT2500 / toulouse-ouest / xmpp://marc.quinton@jabber.org
Hors ligne