Skip to content

Instantly share code, notes, and snippets.

@yusukebe
Created October 11, 2010 15:48
Show Gist options
  • Save yusukebe/620743 to your computer and use it in GitHub Desktop.
Save yusukebe/620743 to your computer and use it in GitHub Desktop.
use strict;
use Plack::App::URLMap;
use Plack::Request;
use Facebook::Graph;
use URI;
my $app_id = "";
my $secret = "";
my $urlmap = Plack::App::URLMap->new;
my $fb = Facebook::Graph->new(
postback => 'http://xxx/facebook/postback',
app_id => $app_id,
secret => $secret,
);
my $connect = sub {
my $env = shift;
my $request = Plack::Request->new($env);
my $response = $request->new_response;
$response->redirect(
$fb->authorize->extend_permissions(qw(publish_stream))
->uri_as_string );
return $response->finalize;
};
$urlmap->map( "/facebook" => $connect );
my $postback = sub {
my $env = shift;
my $request = Plack::Request->new($env);
$fb->request_access_token( $request->param('code') );
my $uri = URI->new('http://xxx/hello');
$uri->query_form( access_token => $fb->access_token );
my $response = $request->new_response;
$response->redirect( $uri->as_string );
return $response->finalize;
};
$urlmap->map( "/facebook/postback" => $postback );
my $hello = sub {
my $env = shift;
my $request = Plack::Request->new($env);
$fb->access_token( $request->param('access_token') );
my $post_response = $fb->add_post
->set_message('I like risuco via API.')
->publish;
my $response = $request->new_response;
$response->status(200);
$response->content_type('text/plain');
$response->body( $post_response->as_string() );
return $response->finalize;
};
$urlmap->map( "/hello" => $hello );
$urlmap->to_app;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment