-
Notifications
You must be signed in to change notification settings - Fork 17
Open
Description
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
Labels
No labels