Facebook Graph API JSONの結果を解析しようとしていますが、少し問題があります。
私が望んでいたのは、共有数を印刷することでした:
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;
上記のコードの一部は非常に不可解です。注釈を付けて書き直しただけです。
#!/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";
実行して、出力を確認します。何が起こっているかを理解したら、print Dumper $decoded_json;
行をコメントアウトできます。
代わりにCURLコマンドを使用してはどうですか? (追伸:これはWindowsで実行されています。UnixシステムのCURLを変更します)。
$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"
}
出力:
出力::: {"http://www.msn.com":{"id": "http://www.msn.com"、 "shares":331357、 "comments":19}}
株式数:331357