Extraire variable page html

Résolu
perlzero -  
[Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   -
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. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
     
    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
  2. perlzero
     
    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. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
       
      super, bravo !
      0