end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

facebook conversion api client for perl

参考url

facebook conversion api client for perl

#!/usr/bin/perl

use strict;
use warnings;
use utf8;
use Data::Dumper;
use Digest::SHA qw(sha256_hex);
use JSON;
use HTTP::Request::Common;
use LWP::UserAgent;  # need for "cpan install LWP::Protocol::https"

#↓今回の件とは関係ありませんが...
my $LWP_OPT = {file =>"cookies.txt", autosave=>1, ignore_discard => 1};

# ex. https://graph.facebook.com/{API_VERSION}/{PIXEL_ID}/events
my $CAPI_URL = 'https://graph.facebook.com/v12.0/ないしょID/events';
my $CAPI_TOKEN = "ないしょTOKEN";


main();

sub main {
    my $ua = LWP::UserAgent->new;
    $ua->cookie_jar($LWP_OPT);

    #refer to
    # https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/server-event
    my $form_data = [
        {action_source=>"website",
         event_name=>"CatalogRequest",
         event_time=> time(),
         event_source_url=>"https://example.com/test_url",
         custom_data=>{},
         user_data=>{
             em=>[
                 Digest::SHA::sha256_hex('nobody@example.com')
                 ]
         }
        }];

    my $form_data_json = encode_json($form_data);
    # print STDERR "$form_data_json\n";

    my $req_url = "$CAPI_URL?access_token=$CAPI_TOKEN";
    my $req_param = [ access_token=>$CAPI_TOKEN,
                      data=>$form_data_json ];
    
    my $req = POST($req_url, $req_param );
    
    my $res = $ua->request($req);
    
    if( not $res->is_success or
        not chk_response($res) ) {
        error_occured($req,$res);
        return;
    }

    return 1;
}

sub chk_response {
    my ($res) = @_;
    my $res_content_json = $res->content;

    my $res_content = decode_json( $res_content_json );
    if( $res_content->{events_received} eq "1"){
    return 1; # 1 means success.
    }

    print STDERR Dumper($res);
    return; # undef means fail.
}

sub error_occured {
    my ($req,$res) = @_;
    # TODO エラー検知後の通知等
}

__END__