Résolu Récupérer plusieurs valeurs sur une page externe. (PHP)

Statut
N'est pas ouverte pour d'autres réponses.

0x0110d87f

Membre
Inscription
4 Avril 2017
Messages
17
Réactions
1
Points
36
RGCoins
0
Bonjour RG,

Je sollicite aujourd'hui votre aide car je bloque.

J'aimerais que cette page ci -> , affiche ligne par ligne les valeurs comprises entre "ip_str" sur cette page -> (soit 62 valeurs -> )

Comme vous pouvez le voir, la page demo.php affiche uniquement la première valeur compris entre "ip_str" hors je veux toute les valeurs qui sont comprise et je voudrais que le site affiche chaque valeur par ligne c'est a dire comme ceci (inspecter élement) -> (sans les espaces entre chaque valeurs)

Voici mon code actuel :

Code:
<?php

$file = file_get_contents('http://93.113.206.225/demo/demo.txt');

mb_eregi('"ip_str": "(.*)', $file, $result);
$result = explode('"},', $result[0]);
$result = str_replace('"ip_str": "', '', $result[0]);

echo $result;
?>

Merci de votre aide.
Je sollicite votre aide à vous aussi : @Matt Murdock ; @Walky SEC ; @✎ Daniel ; @MoDzCatZ ; @Westiix !
 
Dernière édition:

Mathieu ?

IT Officer @STATION F
Premium
Inscription
19 Novembre 2016
Messages
1 247
Réactions
1 460
Points
12 310
RGCoins
0
Bonjour RG,

Je sollicite aujourd'hui votre aide car je bloque.

J'aimerais que cette page ci -> , affiche ligne par ligne les valeurs comprises entre "ip_str" sur cette page -> (soit 62 valeurs -> )

Comme vous pouvez le voir, la page demo.php affiche uniquement la première valeur compris entre "ip_str" hors je veux toute les valeurs qui sont comprise et je voudrais que le site affiche chaque valeur par ligne c'est a dire comme ceci (inspecter élement) -> (sans les espaces entre chaque valeurs)

Voici mon code actuel :

Code:
<?php

$file = file_get_contents('http://93.113.206.225/demo/demo.txt');

mb_eregi('"ip_str": "(.*)', $file, $result);
$result = explode('"},', $result[0]);
$result = str_replace('"ip_str": "', '', $result[0]);

echo $result;
?>

Merci de votre aide.
Je sollicite votre aide à vous aussi : @Matt Murdock ; @Walky SEC ; @✎ Daniel ; @MoDzCatZ ; @Westiix !
Bha normale non tu met 0 en index de ton array donc sa te retourne que la 1 ere valeur fais une boucle For non ?
 

Mathieu ?

IT Officer @STATION F
Premium
Inscription
19 Novembre 2016
Messages
1 247
Réactions
1 460
Points
12 310
RGCoins
0
@Paul GTP le php c'est pas mon truc je connais pas la fonction explode et flemem de chercehr tu pourais lui faire la boucle For stp sa prend 2 sec en connaissant jpense mdrr ^^
 

0x0110d87f

Membre
Inscription
4 Avril 2017
Messages
17
Réactions
1
Points
36
RGCoins
0
@Paul GTP le php c'est pas mon truc je connais pas la fonction explode et flemem de chercehr tu pourais lui faire la boucle For stp sa prend 2 sec en connaissant jpense mdrr ^^
Mais quand je change 0 par 1 le code ne marche plus hein, il ne prend pas l'IP qui suit au contraire ^^
 

Paul GTP

Légende vivante
VIP
Inscription
15 Août 2013
Messages
6 194
Réactions
7 545
Points
24 772
RGCoins
0
Hey :)
Je regarde ça en rentrant chez moi dans 25/30min :p
J'editerai ce message s'il n'y en a pas de nouveau apres moi/en posterait un nouveau dans le cas contraire :espion:
À toute :bye:

----- EDIT: 05/04/2017 à 16h58 -----

Hey ! :p
Après une heure d'acharnement j'ai réussi à te pondre un code... qui marche à 96.77% :trollface:
En effet, sur 62 adresses IP, mon code arrive à en retrouver 60 ;)
Voici le code que j'ai utilisé:

Code:
<?php
    $file = file_get_contents('demo.txt'); // Je charge le fichier demo.txt
    $file = str_replace("}", "}<br />", $file); // Je casse ton fichier pour qu'il s'affiche "ligne par ligne" quand il y a un }
    $ligne = explode("}", $file); // Quand j'affiche une $ligne, je supprime le }
    $nbline = count($ligne); // Pour compter le nombre de lignes totales du fichier
    $i = 0; // Je défini le i dont je vais me servir pour la boucle

    while ($i < $nbline) { // Tant que $i est strictement inférieur au nombre de lignes
        $verifip = preg_match('#"ip_str"#', $ligne[$i]); // Je regarde à l'intérieur de la ligne pour voir s'il exsite une adresse IP
  
        if(!empty($verifip)) { // Si le résultat n'est pas vide (0), alors (1)
            $explodeOne = explode(" ", $ligne[$i]); // J'enlève les espaces
            $explodeTwo = explode('"', $ligne[$i]); // J'enlève les guillemets
            echo $explodeTwo[3]."<br />"; // Je prends la 3e valeur du tableau
        }
  
        $i++; // $i = $i + 1 - puis on recommence la boucle
    }
?>

Le code fonctionne plutôt bien mais comme je l'ai codé plus ou moins comme un porc (car tu utilises des fonctions qui m'étaient inconnues...) il n'est pas fonctionnel à 100% et il y a ce petit 3.23% d'erreur !
Si ça peut te rassurer, il suffit de faire Ctrl + F et de rechercher le texte qui s'est incrusté à la place de l'ip pour retrouver l'ip manuellement (c'est rapide...).

C'est tout pour moi, si quelqu'un d'autre à une meilleure solution je l'invite à la poster, mais je pense que tu ne trouveras pas quelqu'un d'aussi fou que moi pour chercher un truc dans le genre pendant 1h :trollface:


Bonne fin d'après-midi,
Paul GTP
 
Dernière édition:

0x0110d87f

Membre
Inscription
4 Avril 2017
Messages
17
Réactions
1
Points
36
RGCoins
0
Hey :)
Je regarde ça en rentrant chez moi dans 25/30min :p
J'editerai ce message s'il n'y en a pas de nouveau apres moi/en posterait un nouveau dans le cas contraire :espion:
À toute :bye:

----- EDIT: 05/04/2017 à 16h58 -----

Hey ! :p
Après une heure d'acharnement j'ai réussi à te pondre un code... qui marche à 96.77% :trollface:
En effet, sur 62 adresses IP, mon code arrive à en retrouver 60 ;)
Voici le code que j'ai utilisé:

Code:
<?php
    $file = file_get_contents('demo.txt'); // Je charge le fichier demo.txt
    $file = str_replace("}", "}<br />", $file); // Je casse ton fichier pour qu'il s'affiche "ligne par ligne" quand il y a un }
    $ligne = explode("}", $file); // Quand j'affiche une $ligne, je supprime le }
    $nbline = count($ligne); // Pour compter le nombre de lignes totales du fichier
    $i = 0; // Je défini le i dont je vais me servir pour la boucle

    while ($i < $nbline) { // Tant que $i est strictement inférieur au nombre de lignes
        $verifip = preg_match('#"ip_str"#', $ligne[$i]); // Je regarde à l'intérieur de la ligne pour voir s'il exsite une adresse IP
 
        if(!empty($verifip)) { // Si le résultat n'est pas vide (0), alors (1)
            $explodeOne = explode(" ", $ligne[$i]); // J'enlève les espaces
            $explodeTwo = explode('"', $ligne[$i]); // J'enlève les guillemets
            echo $explodeTwo[3]."<br />"; // Je prends la 3e valeur du tableau
        }
 
        $i++; // $i = $i + 1 - puis on recommence la boucle
    }
?>

Le code fonctionne plutôt bien mais comme je l'ai codé plus ou moins comme un porc (car tu utilises des fonctions qui m'étaient inconnues...) il n'est pas fonctionnel à 100% et il y a ce petit 3.23% d'erreur !
Si ça peut te rassurer, il suffit de faire Ctrl + F et de rechercher le texte qui s'est incrusté à la place de l'ip pour retrouver l'ip manuellement (c'est rapide...).

C'est tout pour moi, si quelqu'un d'autre à une meilleure solution je l'invite à la poster, mais je pense que tu ne trouveras pas quelqu'un d'aussi fou que moi pour chercher un truc dans le genre pendant 1h :trollface:


Bonne fin d'après-midi,
Paul GTP
J'upload sa et je regarde ! Merci :)
 

Paul GTP

Légende vivante
VIP
Inscription
15 Août 2013
Messages
6 194
Réactions
7 545
Points
24 772
RGCoins
0
Salut,

Quand je change le liens du file get contents et que je met celui ci : ; cela ne marche plus..

Il ne m'affiche pas l'ip mais la valeur des timestamp..

Tu peux adapter le code pour ce liens stp ?

Merci beaucoup de ton aide
Et je ne peux pas faire CTRL + F car je l'utiliserais comme API et sa sera un logiciel qui prendra les IP automatiquement ^^
Pour ton autre fichier, le code change sensiblement. Et le pourcentage d'erreur est plus élevé avec cette version. Mon code adapté:
Code:
<?php
    $file = file_get_contents('demotest.txt'); // Je charge le fichier demo.txt
    $file = str_replace("}", "}<br />", $file); // Je casse ton fichier pour qu'il s'affiche "ligne par ligne" quand il y a un }
    $ligne = explode("}", $file); // Quand j'affiche une $ligne, je supprime le }
    $nbline = count($ligne); // Pour compter le nombre de lignes totales du fichier
    $i = 0; // Je défini le i dont je vais me servir pour la boucle

    while ($i < $nbline) { // Tant que $i est strictement inférieur au nombre de lignes
        $verifip = preg_match('#"ip_str"#', $ligne[$i]); // Je regarde à l'intérieur de la ligne pour voir s'il exsite une adresse IP

        if(!empty($verifip)) { // Si le résultat n'est pas vide (0), alors (1)
            $explodeOne = explode(" ", $ligne[$i]); // J'enlève les espaces
            $explodeTwo = explode('"', $ligne[$i]); // J'enlève les guillemets
            echo $explodeTwo[27]."<br />"; // Je prends la 3e valeur du tableau
        }

        $i++; // $i = $i + 1 - puis on recommence la boucle
    }
?>
Pourcentage d'erreur: 18.46% (12 erreurs sur 65 ip, soit 6x plus que tout à l'heure !).
Pour trouver les 12 autres IP, il sffit de modifier le $explodeTwo[27] par $explodeTwo[25] :mmh:

Et si tu cherches à faire une api mon code ne sera pas bon étant donné que c'est de la charcuterie à l'état pur.
Essaie de trouver une meilleure méthode que la mienne.

Voici l'algorithme que j'avais en tête:

  • On sépare le bloc de texte en lignes en sautant une ligne à chaque "}"
  • On vérifie chaque ligne une par une (tant qu'il y reste des lignes) pour voir s'il y a une adresse IP
  • S'il y en a une, on donne l'adresse IP, sinon on ne renvoie rien
Il faut donc trouver quelque chose de plus clean pour une API...
Mais tu ne peux pas passer par une bdd ? :mmh:
 

0x0110d87f

Membre
Inscription
4 Avril 2017
Messages
17
Réactions
1
Points
36
RGCoins
0
Pour ton autre fichier, le code change sensiblement. Et le pourcentage d'erreur est plus élevé avec cette version. Mon code adapté:
Code:
<?php
    $file = file_get_contents('demotest.txt'); // Je charge le fichier demo.txt
    $file = str_replace("}", "}<br />", $file); // Je casse ton fichier pour qu'il s'affiche "ligne par ligne" quand il y a un }
    $ligne = explode("}", $file); // Quand j'affiche une $ligne, je supprime le }
    $nbline = count($ligne); // Pour compter le nombre de lignes totales du fichier
    $i = 0; // Je défini le i dont je vais me servir pour la boucle

    while ($i < $nbline) { // Tant que $i est strictement inférieur au nombre de lignes
        $verifip = preg_match('#"ip_str"#', $ligne[$i]); // Je regarde à l'intérieur de la ligne pour voir s'il exsite une adresse IP

        if(!empty($verifip)) { // Si le résultat n'est pas vide (0), alors (1)
            $explodeOne = explode(" ", $ligne[$i]); // J'enlève les espaces
            $explodeTwo = explode('"', $ligne[$i]); // J'enlève les guillemets
            echo $explodeTwo[27]."<br />"; // Je prends la 3e valeur du tableau
        }

        $i++; // $i = $i + 1 - puis on recommence la boucle
    }
?>
Pourcentage d'erreur: 18.46% (12 erreurs sur 65 ip, soit 6x plus que tout à l'heure !).
Pour trouver les 12 autres IP, il sffit de modifier le $explodeTwo[27] par $explodeTwo[25] :mmh:

Et si tu cherches à faire une api mon code ne sera pas bon étant donné que c'est de la charcuterie à l'état pur.
Essaie de trouver une meilleure méthode que la mienne.

Voici l'algorithme que j'avais en tête:

  • On sépare le bloc de texte en lignes en sautant une ligne à chaque "}"
  • On vérifie chaque ligne une par une (tant qu'il y reste des lignes) pour voir s'il y a une adresse IP
  • S'il y en a une, on donne l'adresse IP, sinon on ne renvoie rien
Il faut donc trouver quelque chose de plus clean pour une API...
Mais tu ne peux pas passer par une bdd ? :mmh:
Non car le fichier texte que je possède ne viens pas de mon site mais d'une API (fournis par un autre site)

Mais effectivement pour une API ce n'est pas assez propre car il y a des ligne blanches mais ce n'est pas grave, pour le moment je fait avec. :)

Merci de ton aide :)
 

0x0110d87f

Membre
Inscription
4 Avril 2017
Messages
17
Réactions
1
Points
36
RGCoins
0
J'attend d'autre personne pour savoir si il pourrais me l'adapter en API.
Car je ne voudrais pas que sa affiche dans le code source les br.

Je ne veux pas utiliser de html car lors du webclient en c# il les prends aussi.
Je voudrais chaque valeur pour chaque ligne sans utiliser de HTML. :)
 

Walky 🇫🇷

Cryptoboy
Ancien staff
Inscription
18 Octobre 2012
Messages
1 278
Réactions
1 188
Points
23 400
RGCoins
0
Ce que tu peux faire c'est un json_decode() ; ce qui va te permettre de transformer tout ce "charabia" en tableau PHP. Ainsi tu pourras traiter facilement les données avc un foreach.
 

Walky 🇫🇷

Cryptoboy
Ancien staff
Inscription
18 Octobre 2012
Messages
1 278
Réactions
1 188
Points
23 400
RGCoins
0
Sinon, plus simplement:

PHP:
<?php

$file = file_get_contents('http://93.113.206.225/demo/demo.txt');

$array = json_decode($file, true);

$ips = array_column($array['matches'], 'ip_str');

Attention, array_column n'est disponible que depuis PHP 5.5 ;)

Et $ips devrait te donner toutes les IPS
 
Cette réponse a aidé l'auteur de cette discussion !

0x0110d87f

Membre
Inscription
4 Avril 2017
Messages
17
Réactions
1
Points
36
RGCoins
0
Sinon, plus simplement:

PHP:
<?php

$file = file_get_contents('http://93.113.206.225/demo/demo.txt');

$array = json_decode($file, true);

$ips = array_column($array['matches'], 'ip_str');

Attention, array_column n'est disponible que depuis PHP 5.5 ;)

Et $ips devrait te donner toutes les IPS
Donc je fait "echo $ips;" ?
 

Walky 🇫🇷

Cryptoboy
Ancien staff
Inscription
18 Octobre 2012
Messages
1 278
Réactions
1 188
Points
23 400
RGCoins
0
Voici le resultat, ce n'est pas ce que je veux..

Tu as juste à afficher correctement maintenant. Un simple foreach avec echo et c'est fini
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut