Extraire variable page html [Résolu/Fermé]

Signaler
-
Messages postés
5545
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 mai 2021
-
Bonjour,

j'ai besoin d'aide sur un script qui permet d'aller interroger une page html avec ceci :
$listuser=`curl -s -b cookie.txt $url`;


dans cette page html est écrit en dur une variable au format json :
var utilisateurs = {...[{...},{...}]}


<table id="table" class="tablestyle">
    <script type="text/javascript">

// <!--
var utilisateurs = {...[{...},{...}]}
...


Y'a-t'il un moyen d'extraire cette variable et de la passer à perl ?


Merci pour votre aide

2 réponses

Messages postés
5545
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 mai 2021
933
Oui, tu récupères les données JSON en les matchant avec une regexp, et tu utilises un module CPAN pour les décoder et les passer à Perl. Par exemple comme ceci avec JSON::Parse :

#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

use JSON::Parse 'parse_json';

my $listuser = <<'EOT';
<table id="table" class="tablestyle">
    <script type="text/javascript">

// <!--
var utilisateurs = { "firstName": "John", "lastName": "Smith", "age": 25, "address": { "streetAddress": "21 2nd Street", "city": "New York", "state": "NY", "postalCode": "10021" }, "phoneNumber": [ { "type": "home", "number": "212 555-1234" }, { "type": "fax", "number": "646 555-4567" } ] }
...
EOT                                                                                                                                         

if ($listuser =~ /var utilisateurs = (.*?)$/ms) {
    print "matched $1\n";
    my $parsed = parse_json($1);
    print Dumper($parsed);
}

donne :

$ ./perlzero.pl 
matched { "firstName": "John", "lastName": "Smith", "age": 25, "address": { "streetAddress": "21 2nd Street", "city": "New York", "state": "NY", "postalCode": "10021" }, "phoneNumber": [ { "type": "home", "number": "212 555-1234" }, { "type": "fax", "number": "646 555-4567" } ] }
$VAR1 = {
'age' => 25,
'address' => {
'postalCode' => '10021',
'state' => 'NY',
'city' => 'New York',
'streetAddress' => '21 2nd Street'
},
'firstName' => 'John',
'lastName' => 'Smith',
'phoneNumber' => [
{
'number' => '212 555-1234',
'type' => 'home'
},
{
'type' => 'fax',
'number' => '646 555-4567'
}
]
};

La regexp suppose que le JSON est sur une seule ligne à la suite de "var utilisateurs = "

Pour plus de détails : https://metacpan.org/pod/release/BKB/JSON-Parse-0.49/lib/JSON/Parse.pod


Dal
Merci Dal,

mon problème est résolu en grande partie avec l'aide que tu as fournie. Effectivement mon json était multiligne, mais avec quelques recherches supplémentaires, j'ai pu m'en sortir.

@bientôt
Messages postés
5545
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 mai 2021
933
super, bravo !