signed_requestからページ情報を取り出す
2011年6月23日
Facebookアプリを登録して、リンクを踏むとアプリへsigned_requestが送られてきます。
で、そこから情報を取り出す方法をメモ。
Apps on Facebook.com http://developers.facebook.com/docs/guides/canvas/#auth
公式(上記)には、PHPのサンプルが載ってるんですが、Perl版が載ってない。。
CPANにFacebook::Signedってモジュールがあるんで、
use Facebook::Signed; my $signed_request = 'signed_request'; # POSTで受け取る my $secret = 'アプリの秘訣(笑)'; my $signed = Facebook::Signed->new( secret => $secret ); my $data = $signed->check_canvas_payload( $signed_request );
ってやれば、取れるはずなんですが、、JSONでエラーが。
多分、Perlのバージョンが悪い気がするけど、深追いしたくないので、
use Digest::SHA qw/hmac_sha256/; use MIME::Base64::URLSafe; use JSON; use Data::Dumper; my $signed_request = 'signed_request'; # POSTで受け取る my $secret = 'アプリの秘訣(笑)'; my ($encoded_sig, $payload) = split('\.', $facebook_data); my $sig = urlsafe_b64decode($encoded_sig); my $data = decode_json(urlsafe_b64decode($payload)); my $expected_sig = hmac_sha256($payload, $app_secret); if ($sig eq $expected_sig) { print Dumper $data; } else { print 'error' . "\n"; }
とりあえず、Facebook::Signedからcheck_canvas_payloadだけ取り出してみた。
これで、$data->{‘page’}->{‘id’}で、アクセス元のfacebookページのidが取れる。
他に何が入ってるかは、Dumpした中身を見ればいいんじゃないですかねw