Skip to content

Nouveau script d'extractions annuaires depuis Scodoc #163

@SebL68

Description

@SebL68

Intégrer la contribution de Rodolphe BOURRU (IUT de Sceaux) :

<?php
//
// #################################################################################################
// #
// #  Rodolphe BOURRU
// #  V1
// #   23/05/2024   Script pour extraire le numéro étudiant personnel (nip) des étudiants inscrits dans Scodoc
// #                ainsi que leur identifiant unique prenom.nom issu d'une partie de leur  mail universitaire
// #################################################################################################

$url_base = "https://serveur-scodoc.domaine.fr/ScoDoc/api"; // saisir adresse du serveur Scodoc sous la forme https://scodoc.domaine.fr/Scodoc/api
$client_Id = "lecteur-api"; // Saisir l'identifiant du compte lecteur API
$client_Mdp = "le_motde_passe"; // Saisir le mot de passe du lecteur API
$coupe_mail = "@domaine.fr"; // Domaine de l'email à supprimer pour consitué l'identifiant prenom.nom


function get_auth_token($url_base, $client_Id, $client_Mdp) {
    $url = "$url_base/tokens";
    echo $url . "\n";

    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Accept-Charset: UTF-8']);
    curl_setopt($ch, CURLOPT_USERPWD, "$client_Id:$client_Mdp");
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([])); // Si nécessaire, ajoutez les paramètres ici

    $result = curl_exec($ch);

    if (curl_errno($ch)) {
        echo 'Erreur cURL : ' . curl_error($ch);
        return null;
    }

    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    if ($http_code != 200) {
        echo "Erreur HTTP: " . $http_code . "\n";
        echo "Réponse : " . $result . "\n";
        return null;
    }

    curl_close($ch);

    $body = json_decode($result, true);
    if (isset($body['token'])) {
        $token = $body['token'];
        return $token;
    } else {
        echo "Erreur: Token non trouvé dans la réponse\n";
        return null;
    }
}

function get_data($url, $headers) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

    $result = curl_exec($ch);

    if (curl_errno($ch)) {
        echo 'Erreur cURL : ' . curl_error($ch);
        return null;
    }

    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    if ($http_code != 200) {
        echo "Erreur HTTP: " . $http_code . "\n";
        echo "Réponse : " . $result . "\n";
        return null;
    }

    curl_close($ch);

    return json_decode($result, true);
}

function extraire_codes_nip_et_emails($chaine, $coupe_mail) {
    $pattern_nip = '/"code_nip"\s*:\s*"(\d+)"/';
    preg_match_all($pattern_nip, $chaine, $matches_nip);
    $codes_nip = $matches_nip[1];

    $pattern_email = '/"email"\s*:\s*"([^"]+)"/';
    preg_match_all($pattern_email, $chaine, $matches_email);
    $emails = $matches_email[1];

    // Construire le pattern pour le domaine à couper
    $pattern_coupe_mail = '/' . preg_quote($coupe_mail, '/') . '$/';
    $emails = array_map(function($email) use ($pattern_coupe_mail) {
        return preg_replace($pattern_coupe_mail, '', $email);
    }, $emails);

    $resultat = [];
    foreach ($codes_nip as $index => $nip) {
        $resultat[] = $nip . ':' . $emails[$index];
    }

    return $resultat;
}

function main() {
    global $url_base, $client_Id, $client_Mdp, $coupe_mail;

    $auth_token = get_auth_token($url_base, $client_Id, $client_Mdp);
    if ($auth_token === null) {
        echo "Échec de l'obtention du token d'authentification.\n";
        return;
    }

    $headers = [
        'Content-Type: application/x-www-form-urlencoded',
        'Authorization: Bearer ' . $auth_token
    ];

    $data = get_data($url_base . "/etudiants/courants/long", $headers);
    if ($data === null) {
        echo "Échec de l'obtention des données.\n";
        return;
    }

    $info_etu = json_encode($data);
    // echo $info_etu . "\n";

    $codes_nip = extraire_codes_nip_et_emails($info_etu, $coupe_mail);

    $file = fopen("/var/www/data/annuaires/test.txt", "w");
    foreach ($codes_nip as $code) {
        fwrite($file, $code . "\n");
    }
    fclose($file);

    echo "Les codes NIP et les adresses e-mail ont été écrits dans le fichier test.txt'.\n";
}

main();
?>

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions