Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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})\'\\)".+?&nbsp;&nbsp;(\\d)&nbsp;&nbsp;',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 smile

[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 smile ]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&#039;

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 smile

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 smile
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 wink

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

Yannick_LM a écrit :

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... smile


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 sad


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

trucutu a écrit :

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... smile

Merci pour la remarque constructive smile. Ca m'a permis de découvrir pylint.

atlas95 a écrit :

Ca ne fonctionne pas pour moi, ça me retourne : []
Dommage sad

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 roll
(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 smile.

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 smile.
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é smile ).

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