Convertion d'un code php

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
MetalOS
Messages : 1498
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Convertion d'un code php

Message par MetalOS »

Salut les ptits gars, je tente de convertir un code php qui récupère les données Json d'un fichier sur un serveur sécurisé avec accès par identifiant et mot de passe. J'aimerais pouvoir convertir le code php en purebasic mais je n'y arrive pas, du moins en partie car j'arrive à me connecter au serveur puis à générer le bon lien car le fichier est horodaté, mais je n'arrive pas à le télécharger en local sous un autre nom pour ensuite l'exploiter dans mon projet.

Voici le code php:

Code : Tout sélectionner

<?php
ini_set('memory_limit', '512M'); 

// Configuration
$username = '';
$password = '';
$region = '1'; 

$strikes_dir = 'https://' . $username . ':' . $password . 'urldusite' . $region . '/';
$end_time = time();
$time_span = 3600; // 1 heure
$local_strikes_file = 'local.json';

// Renouvellement du fichier de données local si nécessaire
If (!file_exists($local_strikes_file) || filemtime($local_strikes_file) < $end_time - 60) {
    touch($local_strikes_file);
    
    $l_time = $end_time - $time_span;
    $tmp_strikes = [];

    $run_time = $l_time;
    While ($run_time < $end_time + 600) {
        $filename = $strikes_dir . gmdate("Y/m/d/H/", $run_time) . ($run_time / 600 % 6) . '0.json';
        error_log("Tentative d'ouverture du fichier : $filename");
        If ($file = @fopen($filename, 'r')) {
            error_log("Fichier ouvert avec succès : $filename");
            While ($line = fgets($file)) {
                $json = json_decode($line);
                If ($json && isset($json->time)) {
                    $json->time /= 1000000000;
                    If ($json->time >= $l_time) {
                        // Supprimer les signatures si nécessaire
                        If (isset($json->sig)) {
                            unset($json->sig);
                        }
                        $tmp_strikes[] = $json;
                    }
                }
                unset($json)
            }
            fclose($file);
        } Else {
            error_log("Échec de l'ouverture du fichier : $filename");
        }
        $run_time += 600;
    }

    // Écrire les données dans local.json
    file_put_contents($local_strikes_file, json_encode($tmp_strikes, JSON_PRETTY_PRINT));
}

// Chargement des données
$strikes = [];
$data = file_get_contents($local_strikes_file);
If ($data !== false) {
    $strikes = json_decode($data);
    If ($strikes === null) {
        error_log("Erreur lors du décodage JSON : " . json_last_error_msg());
        $strikes = [];
    }
} Else {
    error_log("Erreur lors de la lecture du fichier local.json");
}

// Retourner les données au format JSON
header('Content-Type: application/json');
echo json_encode($strikes);
?>
Je ne peut pas vous donner l'url exacte du serveur et les identifiants par sécurité et pour tester malheureusement.

Voici la partie PB que j'ai réussi à faire pour le moment:

Code : Tout sélectionner

; Définition des constantes et des variables
Define username.s = "" ; Remplacez par votre nom d'utilisateur
Define password.s = "" ; Remplacez par votre mot de passe
Define region.s = "1"  ; Exemple de région
Define strikes_dir.s = "https://" + username + ":" + password + "URLduServeur" + region + "/"
Define end_time = Date()
Define time_span = 3600 ; 1 heure
Define local_strikes_file.s = "local.json"
Define l_time = end_time - time_span
Define run_time

; Boucle pour télécharger les fichiers JSON
run_time = l_time
 If run_time < end_time + 600
  ; Vérifie que run_time n'est pas 0 avant d'effectuer la division
  Define index = (run_time / 600) % 6 ; Utiliser un index basé sur run_time
  Define filename.s = strikes_dir + FormatDate("%yyyy/%mm/%dd/%hh/", run_time) + Str(index) + "0.json"
  
EndIf

 ReceiveHTTPFile(filename, "strikes.json")
Merci d'avance pour votre aide.
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Convertion d'un code php

Message par Ar-S »

J'ai pas du tout le temps mais j'ai demandé à chatGPT qui a fait des progrès en PB.
Tout n'est pas judicieux mais ça pourra peut être t'aider.

Code : Tout sélectionner

; Initialisation de la mémoire (non nécessaire en PureBasic)
; Configuration
Define username.s = ""
Define password.s = ""
Define region.s = "1"

Define strikes_dir.s = "https://" + username + ":" + password + "urldusite" + region + "/"
Define end_time.l = Date()
Define time_span.l = 3600 ; 1 heure
Define local_strikes_file.s = "local.json"

; Renouvellement du fichier de données local si nécessaire
If FileSize(local_strikes_file) = -1 Or FileDate(local_strikes_file) < end_time - 60
    CreateFile(1, local_strikes_file)
    CloseFile(1)
    
    Define l_time.l = end_time - time_span
    Define tmp_strikes.s = "[]"
    Define run_time.l = l_time

    While run_time < end_time + 600
        Define filename.s = strikes_dir + FormatDate("%yyyy/%mm/%dd/%hh/", run_time) + Str(run_time / 600 % 6) + "0.json"
        Debug "Tentative d'ouverture du fichier : " + filename
        
        If ReceiveHTTPFile(filename, "temp.json")
            Debug "Fichier ouvert avec succès : " + filename
            If ReadFile(2, "temp.json")
                While Not Eof(2)
                    Define line.s = ReadString(2)
                    If JSONValue(0, line)
                        Define jsonObject = ParseJSON(0, line)
                        If FindJSONKey(jsonObject, "time") >= 0
                            ; Conversion de l'unité de temps
                            SetJSONElement(jsonObject, "time", JSONInteger(GetJSONElement(jsonObject, "time")) / 1000000000)
                            If GetJSONElement(jsonObject, "time") >= l_time
                                ; Suppression de la signature si présente
                                If FindJSONKey(jsonObject, "sig") >= 0
                                    RemoveJSONKey(jsonObject, "sig")
                                EndIf
                                tmp_strikes + ComposeJSON(0) + ","
                            EndIf
                        EndIf
                    EndIf
                Wend
                CloseFile(2)
            EndIf
        Else
            Debug "Échec de l'ouverture du fichier : " + filename
        EndIf
        run_time + 600
    Wend

    ; Écrire les données dans local.json
    If tmp_strikes <> "[]"
        tmp_strikes = "[" + Left(tmp_strikes, Len(tmp_strikes) - 1) + "]"
    EndIf
    CreateFile(3, local_strikes_file)
    WriteString(3, tmp_strikes, #PB_UTF8)
    CloseFile(3)
EndIf

; Chargement des données
Define strikes.s
If ReadFile(4, local_strikes_file)
    strikes = ReadString(4)
    CloseFile(4)
    If Not JSONValue(5, strikes)
        Debug "Erreur lors du décodage JSON"
        strikes = "[]"
    EndIf
Else
    Debug "Erreur lors de la lecture du fichier local.json"
    strikes = "[]"
EndIf

; Retourner les données au format JSON
SetClipboardText(strikes) ; Simuler la sortie de la réponse en JSON
Debug strikes ; Afficher les données JSON

~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Bmld76
Messages : 116
Inscription : dim. 09/janv./2022 12:47

Re: Convertion d'un code php

Message par Bmld76 »

Bonjour

regarde ce post viewtopic.php?t=19311
_____________________________________________________________
IMAC 21.5 2012 Core I5 - 2.70 Ghz. 16 GB NVIDIA GeForce GT 640M 512 Mo. MacOs OCPL Sonoma 14.3
MacBook Air M1 - 8Go - Sonoma 14.5

PureBasic 6.11 MacOS
greyfoxy123
Messages : 1
Inscription : dim. 02/févr./2025 15:15

Re: Convertion d'un code php

Message par greyfoxy123 »

Ar-S a écrit : lun. 04/nov./2024 9:41 J'ai pas du tout le temps mais j'ai demandé à chatGPT qui a fait des progrès en PB.
Tout n'est pas judicieux mais ça pourra peut être t'aider.
La réponse serait encore mieux avec un Chatgpt directement depuis l'éditeur de code plutot que le playground
PureBasic 6 Windows
Projet personnel : Dé en 3D
Répondre