Convertir Script Python en php

Résolu
ananias8686 Messages postés 96 Statut Membre -  
jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   -
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

2 réponses

  1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    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
    1. ananias8686 Messages postés 96 Statut Membre
       
      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
  2. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    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
    1. ananias8686 Messages postés 96 Statut Membre
       
      Merci pour votre aide
      J'obtiens comme erreur PHP Parse error: syntax error, unexpected '$ch' (T_VARIABLE) on line 30
      0
    2. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > ananias8686 Messages postés 96 Statut Membre
       
      Tu n'as pas du copier/coller exactement le code que je t'ai donné....
      0
    3. ananias8686 Messages postés 96 Statut Membre > jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention  
       
      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
    4. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > ananias8686 Messages postés 96 Statut Membre
       
      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
    5. ananias8686 Messages postés 96 Statut Membre > jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention  
       
      Ç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