Convertir Script Python en php

Résolu/Fermé
ananias8686 Messages postés 86 Date d'inscription samedi 9 février 2019 Statut Membre Dernière intervention 19 août 2023 - 21 avril 2020 à 20:50
jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 - 22 avril 2020 à 10:49
Bonjour, je cherche une manière de convertir un script Python en php ou réécrire le script en php.
Le script permet de générer un IBAN irlandais correcte.

import requests
import re
import string
import random

URL_IBAN_GENERATOR = "https://bank.codes/iban/generate/ireland/"

def random_generator(size, chars):
    return ''.join(random.choice(chars) for _ in range(size))

def bank_code():
    return "PFSR"

def branch_code():
    return 991070

def account_number():
    return random_generator(size=8, chars=string.digits)

r = requests.post(URL_IBAN_GENERATOR, data={ "input_0": bank_code(), "input_1": branch_code(), "input_2": account_number() })
print(r.status_code, r.reason)


match = re.search("IE[0-9]{2}[A-Z]{4}[0-9]{14}", r.text)

if match:
    print(match.group())
else:
    print("iban not found")


Je vous prie de m'aider
Merci
A voir également:

2 réponses

jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705
21 avril 2020 à 21:02
Bonjour,

Visiblement ce script fait une requête POST vers l'url https://bank.codes/iban/generate/ireland/
avec 3 variables

"input_0": bank_code(), "input_1": branch_code(), "input_2": account_number()

Sachant que bank_code = PFSR
branch_code = 991070
account_number est un nombre aléatoire de 8 chiffres.

En php, tu peux utiliser du CURL pour faire cette requête POST
Et tu trouveras sans mal sur internet des scripts de génération de nombres aléatoires.


Et pour finir, ce script vérifie que le résultat obtenu est conforme à la regex IE[0-9]{2}[A-Z]{4}[0-9]{14}

0
ananias8686 Messages postés 86 Date d'inscription samedi 9 février 2019 Statut Membre Dernière intervention 19 août 2023
Modifié le 21 avril 2020 à 22:16
Voici ce que j'ai pu faire mais sans succès
<?php
/* Utilisation de Curl */
 
//On stock la valeur des variables POST
$account_number = mt_rand(10010350,90141045);
$pattern='IE[0-9]{2}[A-Z]{4}[0-9]{14}';
 
//Initialisation de curl dans $curl
$curl = curl_init();
 
curl_setopt($curl, CURLOPT_URL, "https://bank.codes/iban/generate/ireland/"); //Page sur laquelle envoyer les POST autrement dit la page vers laquelle pointe le formulaire

$data=array(
'input_0' => 'PFSR'    
'input_1' => 991070,
'input_2' => $account_number;) 
curl_setopt($curl, CURLOPT_POST, 3);
curl_setopt($curl, CURLOPT_POSTFIELDS,$branch_code, $bank_code, $account_number); //On envoie les valeurs
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 3);
$data = curl_exec($curl); //On place le code de la page
 
//Fin de Curl
curl_close($curl);

 
/* Affichage du code */
 
//ech
echo preg_match($pattern) ;
?>
0
jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705
21 avril 2020 à 22:36
Ton script devrait ressembler à un truc du genre
<?php

//Affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

/* Utilisation de Curl */
 
//On stock la valeur des variables POST
$account_number = mt_rand(10010350,90141045);
$pattern='IE[0-9]{2}[A-Z]{4}[0-9]{14}';
 
 
$data=array('input_0' => 'PFSR'  , 'input_1' => 991070, 'input_2' => $account_number );
$fields_string = http_build_query($data);
 
//Initialisation de curl dans $curl
$ch = curl_init();
 
curl_setopt($ch, CURLOPT_URL, "https://bank.codes/iban/generate/ireland/"); //Page sur laquelle envoyer les POST autrement dit la page vers laquelle pointe le formulaire
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$fields_string); //On envoie les valeurs
curl_setopt($ch, CURLOPT_FAILONERROR, true); // Required for HTTP error codes to be reported via our call to curl_error($ch)
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSLVERSION, 3);
curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, 'SSLv3');

$data = curl_exec($ch); //On place le code de la page

if (curl_errno($ch)) {
    $error_msg = curl_error($ch);
}
curl_close($ch);

if (isset($error_msg)) {
    // TODO - Handle cURL error accordingly
    echo "ERREUR : <br>";
    print_r($error_msg);
    exit();
}
 


 
/* Affichage du code */
 
//ech
echo preg_match($pattern) ;
?>



0
ananias8686 Messages postés 86 Date d'inscription samedi 9 février 2019 Statut Membre Dernière intervention 19 août 2023
Modifié le 21 avril 2020 à 22:50
Merci pour votre aide
J'obtiens comme erreur PHP Parse error: syntax error, unexpected '$ch' (T_VARIABLE) on line 30
0
jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705 > ananias8686 Messages postés 86 Date d'inscription samedi 9 février 2019 Statut Membre Dernière intervention 19 août 2023
21 avril 2020 à 22:54
Tu n'as pas du copier/coller exactement le code que je t'ai donné....
0
ananias8686 Messages postés 86 Date d'inscription samedi 9 février 2019 Statut Membre Dernière intervention 19 août 2023 > jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024
22 avril 2020 à 00:36
Mon hébergeur vient d'activer curl, je crois que tous marche bien par contre J'ai une erreur au niveau de la regex
Warning: preg_match() expects at least 2 parameters, 1 given on line 50
0
jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705 > ananias8686 Messages postés 86 Date d'inscription samedi 9 février 2019 Statut Membre Dernière intervention 19 août 2023
22 avril 2020 à 08:56
Oui je n'avais pas regardé cette partie de ton code
https://www.php.net/manual/fr/function.preg-match.php

ça devrait donner un truc du genre
$matches = array();
preg_match('/'.$pattern.'/', $data, $matches,);
print_r($matches);
0
ananias8686 Messages postés 86 Date d'inscription samedi 9 février 2019 Statut Membre Dernière intervention 19 août 2023 > jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024
22 avril 2020 à 10:22
Ça marche, j'ai ajouter $matches = $matches[0] pour afficher uniquement iban sans les éléments du tableau.
$matches = array();
preg_match('/'.$pattern.'/', $data, $matches);
$matches = $matches[0];
print_r($matches);

Merci beaucoup
0