web-dev-qa-db-fra.com

Analyse JSON simple à l'aide de Perl

J'essaie d'analyser les résultats de Facebook Graph API JSON, et j'ai un peu de mal avec ça.

Ce que j'espérais faire, c'était imprimer le nombre d'actions:

my $trendsurl = "https://graph.facebook.com/?ids=http://www.filestube.com";
my $json;
{
  local $/; #enable Slurp
  open my $fh, "<", $trendsurl;
  $json = <$fh>;
}

my $decoded_json = @{decode_json{shares}};
print $decoded_json;
34
kristin

Une partie du code ci-dessus est extrêmement déroutante. Je viens de le réécrire avec des annotations pour vous.

#!/usr/bin/Perl

use LWP::Simple;                # From CPAN
use JSON qw( decode_json );     # From CPAN
use Data::Dumper;               # Perl core module
use strict;                     # Good practice
use warnings;                   # Good practice

my $trendsurl = "https://graph.facebook.com/?ids=http://www.filestube.com";

# open is for files.  unless you have a file called
# 'https://graph.facebook.com/?ids=http://www.filestube.com' in your
# local filesystem, this won't work.
#{
#  local $/; #enable Slurp
#  open my $fh, "<", $trendsurl;
#  $json = <$fh>;
#}

# 'get' is exported by LWP::Simple; install LWP from CPAN unless you have it.
# You need it or something similar (HTTP::Tiny, maybe?) to get web pages.
my $json = get( $trendsurl );
die "Could not get $trendsurl!" unless defined $json;

# This next line isn't Perl.  don't know what you're going for.
#my $decoded_json = @{decode_json{shares}};

# Decode the entire JSON
my $decoded_json = decode_json( $json );

# you'll get this (it'll print out); comment this when done.
print Dumper $decoded_json;

# Access the shares like this:
print "Shares: ",
      $decoded_json->{'http://www.filestube.com'}{'shares'},
      "\n";

Exécutez-le et vérifiez la sortie. Vous pouvez commenter le print Dumper $decoded_json; ligne lorsque vous comprenez ce qui se passe.

109
Sdaz MacSkibbons

Que diriez-vous d'utiliser la commande CURL à la place? (P.S .: Cela fonctionne sous Windows; apportez les modifications CURL pour les systèmes Unix).

   $curl=('C:\\Perl64\\bin\\curl.exe -s http://graph.facebook.com/?ids=http://www.filestube.com');
    $exec=`$curl`;
    print "Output is::: \n$exec\n\n";

    ## match the string "shares": in the CURL output
    if ($exec=~/"shares":?/)
    { 
        print "Output is::: \n$exec\n\n";
        ## string after the match (any string on the right side of "shares":)
        $shares=$'; 
        ## delete all non-Digit characters after the share number
        $shares=~s/(\D.*)//; 
        print "Number of Shares is: ".$shares."\n";
    } else {
        print "No Share Information available.\n"
    }

SORTIE:


La sortie est ::: {"http://www.msn.com": {"id": "http://www.msn.com", "partages": 331357, "commentaires": 19}}

Le nombre d'actions est: 331357


1
Kaji Lama