Extraire variable page html [Résolu]

perlzero - 14 avril 2017 à 20:35 - Dernière réponse : [Dal] 4473 Messages postés mercredi 15 septembre 2004Date d'inscriptionContributeurStatut 16 janvier 2018 Dernière intervention
- 18 avril 2017 à 09:25
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

Afficher la suite 

3 réponses

Répondre au sujet
[Dal] 4473 Messages postés mercredi 15 septembre 2004Date d'inscriptionContributeurStatut 16 janvier 2018 Dernière intervention - Modifié par [Dal] le 15/04/2017 à 01:32
0
Utile
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 : http://search.cpan.org/~bkb/JSON-Parse-0.49/lib/JSON/Parse.pod


Dal
Commenter la réponse de [Dal]
0
Utile
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
[Dal] 4473 Messages postés mercredi 15 septembre 2004Date d'inscriptionContributeurStatut 16 janvier 2018 Dernière intervention - 18 avril 2017 à 09:25
super, bravo !
Commenter la réponse de perlzero