Simple JSON parsing using Perl

前端 未结 2 1125
梦毁少年i
梦毁少年i 2020-12-23 09:59

I\'m trying to parse the Facebook Graph API JSON results, and I\'m having a bit of trouble with it.

What I was hoping to do was print the number of shares:



        
相关标签:
2条回答
  • 2020-12-23 10:24

    Some of the code above is extremely puzzling. I've just rewritten it with annotations for you.

    #!/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";
    

    Run it and check the output. You can comment out the print Dumper $decoded_json; line when you understand what's going on.

    0 讨论(0)
  • 2020-12-23 10:26

    How about using CURL command instead? (P.S.: This is running on Windows; make CURL changes for Unix systems).

    $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";
    
        # 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"
    }
    

    OUTPUT:

    Output is:
    {"http:\/\/www.msn.com":{"id":"http:\/\/www.msn.com","shares":331357,"comments":19}}
    Number of Shares is: 331357
    
    0 讨论(0)
提交回复
热议问题