Extraire variable page html

Résolu
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

  1. 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
    0
    1. Contributeur
      super, bravo !
      0
  2. Contributeur
    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
    0