• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..03-May-2022-

examples/H13-Mar-2010-282203

lib/WWW/Facebook/H13-Mar-2010-5,922970

t/H03-May-2022-1,2831,056

ChangesH A D13-Mar-201013.1 KiB347296

MANIFESTH A D26-Nov-20091.5 KiB7978

MANIFEST.SKIPH A D20-Oct-2008368 2721

META.ymlH A D13-Mar-2010797 3231

Makefile.PLH A D22-Aug-2009943 3028

READMEH A D13-Mar-201032.7 KiB852666

README

1NAME
2    WWW::Facebook::API - Facebook API implementation
3
4VERSION
5    This document and others distributed with this module describe
6    WWW::Facebook::API version 0.4.18
7
8SYNOPSIS
9        use WWW::Facebook::API;
10
11        # @ENV{qw/WFA_API_KEY WFA_SECRET WFA_DESKTOP/} are the initial values,
12        # so use those if you only have one app and don't want to pass in values
13        # to constructor
14        my $client = WWW::Facebook::API->new(
15            desktop => 0,
16            api_key => 'your api key',
17            secret => 'your secret key',
18        );
19
20    # Change API key and secret
21        print "Enter your public API key: ";
22        chomp( my $val = <STDIN> );
23        $client->api_key($val);
24        print "Enter your API secret: ";
25        chomp($val = <STDIN> );
26        $client->secret($val);
27
28    # not needed if web app (see $client->canvas->get_fb_params)
29        $client->auth->get_session( $token );
30
31    use Data::Dumper;
32        my $friends_perl = $client->friends->get;
33        print Dumper $friends_perl;
34
35    my $notifications_perl = $client->notifications->get;
36        print Dumper $notifications_perl;
37
38    # Current user's quotes
39        my $quotes_perl = $client->users->get_info(
40            uids   => $friends_perl,
41            fields => ['quotes']
42        );
43        print Dumper $quotes_perl;
44
45    $client->auth->logout;
46
47DESCRIPTION
48    A Perl implementation of the Facebook API, working off of the canonical
49    Java and PHP implementations. By default it uses JSON::Any to parse the
50    response returned by Facebook's server. There is an option to return the
51    raw response in either XML or JSON (See the "parse" method below). As
52    the synopsis states, the following environment variables are used to set
53    the defaults for new instances:
54
55        WFA_API_KEY
56        WFA_SECRET
57        WFA_SESSION_KEY
58        WFA_DESKTOP
59
60    Additionally, for each instance that is created, the following
61    environment variables are used if no values are set:
62
63        WFA_API_KEY_APP_PATH
64        WFA_SECRET_APP_PATH
65        WFA_SESSION_KEY_APP_PATH
66        WFA_DESKTOP_APP_PATH
67
68    Where "APP_PATH" is replaced by whatever $client->app_path returns, with
69    all non-alphanumeric characters replaced with an underscore and all
70    characters upcased (e.g., foo-bar-baz becomes FOO_BAR_BAZ).
71
72SUBROUTINES/METHODS
73    new( %params )
74        Returns a new instance of this class. You are able to pass in any of
75        the attribute method names in WWW::Facebook::API to set its value:
76
77            my $client = WWW::Facebook::API->new(
78                parse           => 1,
79                format          => 'JSON',
80                secret          => 'application_secret_key',
81                api_key         => 'application_key',
82                session_key     => 'session_key',
83                session_expires => 'session_expires',
84                session_uid     => 'session_uid',
85                desktop         => 1,
86                api_version     => '1.0',
87                callback        => 'callback_url',
88                next            => 'next',
89                popup           => 'popup',
90                skipcookie      => 'skip_cookie',
91                throw_errors    => 1,
92            );
93            $copy = $client->new;
94
95NAMESPACE METHODS
96    All method names from the Facebook API are lower_cased instead of
97    CamelCase.
98
99    admin
100        admin namespace of the API (See WWW::Facebook::API::Admin).
101
102    application
103        application namespace of the API (See
104        WWW::Facebook::API::Application).
105
106    auth
107        For desktop apps, these are synonymous:
108
109            $client->auth->get_session( $client->auth->create_token );
110            $client->auth->get_session;
111
112        And that's all you really have to do (but see
113        WWW::Facebook::API::Auth for details about opening a browser on *nix
114        for Desktop apps). "get_session" automatically sets "session_uid",
115        "session_key", and "session_expires" for $client. It returns
116        nothing.
117
118        If the desktop attribute is set to false the $token must be the
119        auth_token returned from Facebook to your web app for that user:
120
121            if ( $q->param('auth_token')  ) {
122                $client->auth->get_session( $q->param('auth_token') );
123            }
124
125        "get_session" automatically sets "session_uid", "session_key", and
126        "session_expires" for $client. It returns nothing.
127
128        See WWW::Facebook::API::Auth for details.
129
130    canvas
131        Work with the canvas. See WWW::Facebook::API::Canvas.
132
133            $response = $client->canvas->get_user( $q )
134            $response = $client->canvas->get_fb_params( $q )
135            $response = $client->canvas->get_non_fb_params( $q )
136            $response = $client->canvas->validate_sig( $q )
137            $response = $client->canvas->in_fb_canvas( $q )
138            $response = $client->canvas->in_frame( $q )
139
140    comments
141        comments namespace of the API (See WWW::Facebook::API::Comments).
142
143    connect
144        connect namespace of the API (See WWW::Facebook::API::Connect).
145
146    data
147        data namespace of the API (See WWW::Facebook::API::Data). All method
148        names from the Facebook API are lower_cased instead of CamelCase:
149
150            $response = $client->data->set_cookie( uid => 23, qw/name foo value bar/);
151            $cookies = $client->data->get_cookies(
152                uid => 4534,
153                name => 'foo',
154            );
155
156    events
157        events namespace of the API (See WWW::Facebook::API::Events). All
158        method names from the Facebook API are lower_cased instead of
159        CamelCase:
160
161            $response = $client->events->get(
162                uid => 'uid',
163                eids => [@eids],
164                start_time => 'utc',
165                end_time => 'utc',
166                rsvp_status => 'attending|unsure|declined|not_replied',
167            );
168            $response = $client->events->get_members( eid => 233 );
169
170    fbml
171        fbml namespace of the API (See WWW::Facebook::API::FBML). All method
172        names from the Facebook API are lower_cased instead of CamelCase:
173
174            $response = $client->fbml->set_ref_handle( handle => '', fbml => '');
175            $response = $client->fbml->refresh_img_src( url => '');
176            $response = $client->fbml->refresh_ref_url( url => '');
177
178    feed
179        feed namespace of the API (See WWW::Facebook::API::Feed). All method
180        names from the Facebook API are lower_cased instead of CamelCase:
181
182            $response
183                = $client->feed->publish_story_to_user(
184                    title   => 'title',
185                    body    => 'markup',
186                    ...
187            );
188            $response
189                = $client->feed->publish_action_of_user(
190                    title   => 'title',
191                    body    => 'markup',
192                    ...
193            );
194            $response
195                = $client->feed->publish_templatized_action(
196                    actor_id       => 'title',
197                    title_template => 'markup',
198                    ...
199            );
200
201    fql fql namespace of the API (See WWW::Facebook::API::FQL):
202
203            $response = $client->fql->query( query => 'FQL query' );
204
205    friends
206        friends namespace of the API (See WWW::Facebook::API::Friends). All
207        method names from the Facebook API are lower_cased instead of
208        CamelCase:
209
210            $response = $client->friends->get;
211            $response = $client->friends->get_app_users;
212            $response
213                = $client->friends->are_friends( uids1 => [1,5,8], uids2 => [2,3,4] );
214            $response = $client->friends->get_lists;
215
216    groups
217        groups namespace of the API (See WWW::Facebook::API::Groups). All
218        method names from the Facebook API are lower_cased instead of
219        CamelCase:
220
221            $response = $client->groups->get( uid => 234324, gids => [2423,334] );
222            $response = $client->groups->get_members( gid => 32 );
223
224    intl
225        intl namespace of the API (See WWW::Facebook::API::Intl).
226
227    links
228        links namespace of the API (See WWW::Facebook::API::Links).
229
230    livemesssage
231        liveMesssage namespace of the API (See
232        WWW::Facebook::API::LiveMesssage).
233
234    message
235        message namespace of the API (See WWW::Facebook::API::Message).
236
237    notes
238        notes namespace of the API (See WWW::Facebook::API::Notes).
239
240    notifications
241        notifications namespace of the API (See
242        WWW::Facebook::API::Notifications). All method names from the
243        Facebook API are lower_cased instead of CamelCase:
244
245            $response = $client->notifications->get;
246            $response = $client->notifications->send(
247                to_ids => [ 1, 3 ],
248                notification => 'FBML notification markup',
249            );
250            $response = $client->notifications->send_email(
251                recipients => [1, 2343, 445],
252                subject => 'subject',
253                text => 'text version of email body',
254                fbml  => 'fbml version of email body',
255            );
256
257    pages
258        pages namespace of the API (See WWW::Facebook::API::Pages). All
259        method names from the Facebook API are lower_cased instead of
260        CamelCase:
261
262            $response = $client->pages->get_info(
263                page_ids => [@pages],
264                fields   => [@fields],
265                uid      => 'user',
266                type     => 'page type',
267            );
268            $page_added_app = $client->pages->is_app_added( page_id => 'page' );
269            $is_admin = $client->pages->is_admin( page_id => 'page' );
270            $is_fan = $client->pages->is_fan( page_id => 'page', uid => 'uid' )
271
272    permissions
273        permissions namespace of the API (See
274        WWW::Facebook::API::Permissions).
275
276    photos
277        photos namespace of the API (See WWW::Facebook::API::Photos). All
278        method names from the Facebook API are lower_cased instead of
279        CamelCase:
280
281            $response = $client->photos->add_tag(
282                    pid => 2,
283                    tag_uid => 3,
284                    tag_text => "me",
285                    x => 5,
286                    y => 6
287                );
288            $response = $client->photos->create_album(
289                    name => 'fun in the sun',
290                    location => 'California',
291                    description => "Summer '07",
292            );
293            $response = $client->photos->get( aid => 2, pids => [4,7,8] );
294            $response = $client->photos->get_albums( uid => 1, pids => [3,5] );
295            $response = $client->photos->get_tags( pids => [4,5] );
296            $response = $client->photos->upload(
297                aid => 5,
298                caption => 'beach',
299                data => 'raw data',
300            );
301
302    profile
303        profile namespace of the API (See WWW::Facebook::API::Profile). All
304        method names from the Facebook API are lower_cased instead of
305        CamelCase:
306
307            $response = $client->profile->get_fbml( uid => 3 );
308            $response = $client->profile->set_fbml( uid => 5,
309                profile => 'markup',
310                profile_action => 'markup',
311                mobile_profile => 'markup',
312            );
313
314    sms sms namespace of the API (See WWW::Facebook::API::SMS).
315
316    status
317        status namespace of the API (See WWW::Facebook::API::Status).
318
319    stream
320        stream namespace of the API (See WWW::Facebook::API::Stream).
321
322    users
323        users namespace of the API (See WWW::Facebook::API::Users). All
324        method names from the Facebook API are lower_cased instead of
325        CamelCase:
326
327            $response = $client->users->get_info(
328                uids => 2343,
329                fields => [ qw/about_me quotes/ ]
330            );
331            $uid = $client->users->get_logged_in_user;
332            $response = $client->users->has_app_permission(
333                ext_perm => 'status_update|photo_upload'
334            );
335            $app_added = $client->users->is_app_user;
336            $response = $client->users->set_status(
337                status => 'status message',
338                clear => 1|0,
339            );
340
341    video
342        video namespace of the API (See WWW::Facebook::API::Video).
343
344ATTRIBUTE METHODS
345    These are methods to get/set the object's attributes.
346
347    api_key( $new_api_key )
348        The developer's API key. If $ENV{'WFA_API_KEY'} is set, all
349        instances will be initialized with its value. See the Facebook API
350        documentation for more information.
351
352    api_version( $new_version )
353        Which version to use (default is "1.0", which is the latest one
354        supported currently). Corresponds to the argument "v" that is passed
355        in to methods as a parameter.
356
357    app_id()
358        The application id where your Facebook app is described, e.g.:
359
360            http://www.facebook.com/apps/application.php?id=THIS_NUMBER
361
362        Remember, "WWW::Facebook::API" is not that clairvoyant: You must
363        first set this number (when calling "new()") in order to use it.
364
365    app_path()
366        If using the Facebook canvas, the path to your application. For
367        example if your application is at http://apps.facebook.com/example/
368        this should be "example".
369
370    apps_uri()
371        The apps uri for Facebook apps. The default is
372        http://apps.facebook.com/.
373
374    callback( $new_default_callback )
375        The callback URL for your application. See the Facebook API
376        documentation. Just a convenient place holder for the value.
377
378    call_success( $is_success, $error_message )
379        Takes in two values, the first setting the object's
380        last_call_success attribute, and the second setting the object's
381        last_error attribute. Returns an array reference containing the
382        last_call_success and last_error values, in that order:
383
384            my $response = $client->call_success( 1, undef );
385            if ( $response->[0] == 1 ) {
386                print 'Last call successful';
387            }
388            if ( not defined $response->[1] ) {
389                print 'Error message is undefined';
390            }
391
392            $client->call_success( 0,'2: The service is not available at this time.');
393
394            $response = $client->call_success;
395            if ( not $response->[0] ) {
396                print 'Last call unsuccessful';
397            }
398            if ( not defined $response->[1] ) {
399                print "Error $response->[1]";
400            }
401
402        The "call" method calls this method, and shouldn't need to be called
403        to set anything, just to get the value later if "throw_errors" is
404        false.
405
406    config($filename)
407        Used when instantiating a new object to set the environment
408        variables. The file has a simple, BASH-style format:
409
410            WFA_API_KEY_MYAPP=383378efa485934bc
411            WFA_SECRET_MYAPP=234234ac902f340923
412            WFA_SESSION_KEY_MYAPP=34589349abce989d
413            WFA_DESKTOP_MYAPP=1
414
415        If the file is found, and the environment variables are already set,
416        then the variables will not be changed.
417
418    debug(0|1)
419        A boolean set to either true or false, determining if debugging
420        messages should be carped for REST calls. Defaults to 0.
421
422    desktop(0|1)
423        A boolean signifying if the client is being used for a desktop
424        application. If $ENV{'WFA_DESKTOP'} is set, all instances will be
425        initialized with its value. Defaults to 0 otherwise. See the
426        Facebook API documentation for more information.
427
428    format('JSON'|'XML')
429        The default format to use if none is supplied with an API method
430        call. Currently available options are XML and JSON. Defaults to
431        JSON.
432
433    last_call_success(1|0)
434        A boolean set to true or false, to show whether the last call was
435        succesful or not. Called by "call_success". Defaults to 1.
436
437    last_error( $error_message )
438        A string holding the error message of the last failed call to the
439        REST server. Called by "call_success". Defaults to undef.
440
441    next( $new_default_next_url )
442        See the Facebook API documentation's Authentication Guide. Just a
443        convenient place holder for the value.
444
445    parse(1|0)
446        Defaults to 1. If set to true, the response returned by each method
447        call will be a Perl structure (see each method for the structure it
448        will return). If it is set to 0, the response string from the server
449        will be returned. (The response string is unescaped if the 'desktop'
450        attribute is false).
451
452    popup( $popup )
453        See the Facebook API documentation's Authentication Guide. Just a
454        convenient place holder for the value.
455
456    query( $query )
457        Stores the current query object to use (either CGI or
458        Apache::Request) but really anything that implements the "param()"
459        method can be used. N.B. When using "require_*" methods below,
460        Apache::Request will croak because it does not implement a redirect
461        method.
462
463    secret( $new_secret_key )
464        For a desktop application, this is the secret that is used for
465        calling "auth->create_token" and "auth->get_session". For a web
466        application, secret is used for all calls to the API. If
467        $ENV{'WFA_SECRET'} is set, all instances will be initialized with
468        its value. See the Facebook API documentation under Authentication
469        for more information.
470
471    server_uri( $new_server_uri )
472        The server uri to access the Facebook REST server. Default is
473        'http://api.facebook.com/restserver.php'. Used to make calls to the
474        Facebook server, and useful for testing. See the Facebook API
475        documentation.
476
477    session_expires( $new_expires )
478        The session expire timestamp for the client's user. Automatically
479        set when "$client->auth->get_session" is called. See the Facebook
480        API documentation.
481
482    session_key( $new_key )
483        The session key for the client's user. Automatically set when
484        "$client->auth->get_session" is called. See the Facebook API
485        documentation.
486
487    session_uid( $new_uid )
488        The session's uid for the client's user. Automatically set when
489        "$client->auth->get_session" is called. See the Facebook API
490        documentation.
491
492    skipcookie(0|1)
493        See the Facebook API documentation's Authentication Guide. Just a
494        convenient place holder for the value.
495
496    throw_errors(0|1)
497        A boolean set to either true of false, signifying whether or not to
498        "confess" when an error is returned from the REST server.
499
500    ua  The LWP::UserAgent agent used to communicate with the REST server.
501        The agent_alias is initially set to "Perl-WWW-Facebook-API/0.4.18".
502
503PUBLIC METHODS
504    call( $method, %args )
505        The method which other submodules within WWW::Facebook::API use to
506        call the Facebook REST interface. It takes in a string signifying
507        the method to be called (e.g., 'auth.getSession'), and key/value
508        pairs for the parameters to use: $client->call( 'auth.getSession',
509        auth_token => 'b3324235e' );
510
511        For all calls, if " parse " is set to true and an empty hash/array
512        reference is returned from facebook, nothing will be returned
513        instead of the empty hash/array reference.
514
515    generate_sig( params => $params_hashref, secret => $secret )
516        Generates a sig when given a parameters hash reference and a secret
517        key.
518
519    get_add_url( %params )
520        Returns the URL to add your application with the parameters (that
521        are given) included. Note that the API key and the API version
522        parameters are also included automatically. If the "next" parameter
523        is passed in, it's string-escaped. Used for platform applications:
524
525            $response = $client->get_add_url( next => 'http://my.website.com' );
526
527            # prints http://www.facebook.com/app.php?api_key=key&v=1.0
528            #        &next=http%3A%2F%2Fmy.website.com
529            print $response;
530
531    get_app_url
532        Returns the URL to your application, if using the Facebook canvas.
533        Uses <$client->app_path>, which you have to set yourself (See
534        <app_path> below).
535
536    get_facebook_url( $subdomain )
537        Returns the URL to Facebook. You can specifiy a specific network as
538        a parameter:
539
540            $response = $client->get_facebook_url( 'apps' );
541            print $response;    # prints http://apps.facebook.com
542
543    get_infinite_session_url()
544        Returns the URL for the user to generate an infinite session for
545        your application:
546
547            $response = $client->get_infinite_session_url;
548
549            # prints http://www.facebook.com/codegen.php?api_key=key&v=1.0
550            print $response;
551
552        From what I've seen, the session keys that Facebook returns don't
553        expire automatically, so as long as you don't call
554        $client->auth->logout, you shouldn't even need to worry about this.
555
556    get_login_url( %params )
557        Returns the URL to login to your application with the parameters
558        (that are defined) included. If the "next" parameter is passed in,
559        it's string-escaped:
560
561            $response = $client->get_login_url( next => 'http://my.website.com' );
562
563            # prints http://www.facebook.com/login.php?api_key=key&v=1.0
564            #        &next=http%3A%2F%2Fmy.website.com
565            print $response;
566
567    get_url( $type, @args )
568        Called by all the above "get_*_url" methods above. $type can be
569        'login', 'app', 'add', 'facebook', 'infinite_session', or 'custom'.
570        @args contains the query parameters for the the cases when $type is
571        not 'app' or 'facebook'. In the case of 'custom', the first item in
572        @args is the url path relative to the facebook website. All of the
573        "get_*_url" methods correspond to the ones in the official PHP
574        client.
575
576    log_string($params_hashref, $response)
577        Pass in the params and the response from a call, and it will make a
578        formatted string out of it showing the parameters used, and the
579        response received.
580
581    redirect( $url, $query_object )
582        Called by "require()" to redirect the user either within the canvas
583        or without. If no <$query_object> is defined, then whatever is in
584        "$client->query" will be used. (See WWW::Facebook::API::Canvas) If
585        no redirect is required, nothing is returned. That is the only case
586        when there is no return value. If a redirect is required, there are
587        two cases that are covered:
588
589        user not logged in
590            If there isn't a user logged in to Facebook's system, then a
591            redirect to the Facebook login page is printed to STDOUT with a
592            next parameter to the appropriate page. The redirect is called
593            with the the CGI module that comes standard with perl. The
594            return value in this case is 1.
595
596        user logged in
597            If the user is logged in to Facebook, and a redirect is
598            required, the necessary FBML is returned: "<fb:redirect
599            url="WHATEVER">". So the return value is the FBML, which you can
600            then print to STDOUT.
601
602    require_add( $query )
603        Redirects the user to what "get_add_url()" returns. See "require()"
604        below for the $query parameter.
605
606    require_frame( $query )
607        Redirects the user to what "get_login_url( canvas =" '1' )> returns.
608        See "require()" below for the $query parameter.
609
610    require_login( $query )
611        Redirects the user to what "get_login_url()" returns. See
612        "require()" below for the $query parameter.
613
614    require( $what, $query )
615        The official PHP client has "require_*" methods that take no
616        arguments. Logically, you better know what you want to require when
617        you call each of them, so this API consolidates them into one
618        method. The valid values for $what are 'add', 'frame', and 'login'.
619        $query is the query object to use (most likely CGI). If $query is
620        undefined, the value of " $client-"query >> is used.
621
622    session( uid => $uid, key => $session_key, expires => $session_expires )
623        Sets the "user", "session_key", and "session_expires" all at once.
624
625    unescape_string($escaped_string)
626        Returns its parameter with all the escape sequences unescaped. If
627        you're using a web app, this is done automatically to the response.
628
629    verify_sig( sig => $expected_sig, params => $params_hashref )
630        Checks the signature for a given set of parameters against an
631        expected value.
632
633PRIVATE METHODS
634    _add_url_params( %params )
635        Called by both "get_login_url" and "get_add_url" to process any of
636        their parameters. Prepends the api_key and the version number as
637        parameters and returns the parameter string.
638
639    _check_values_of($params_hashref)
640        Makes sure all the values of the $params_hashref that need to be set
641        are set. Uses the defaults for those values that are needed and not
642        supplied.
643
644    _format_and_check_params( $method, %args )
645        Format method parameters (given in %args) according to Facebook API
646        specification. Returns a list of items: A hash reference of the
647        newly formatted params (based on %params) and the raw data (and
648        filename, if passed in) if the call is a photo or video upload:
649
650            ($params, $raw_data, $filename) = $self->_format_and_check_params( $method, %args );
651
652    _has_error_response( $response )
653        Determines if the response is an error, and logs it appropriately.
654        Returns true if response is an error, false otherwise.
655
656    is_empty_response( $response )
657        Determines if the response is an empty hash or array reference.
658        Returns true if the response is empty, false otherwise.
659
660    _post_request( $params_hashref, $sig, $raw_data, $filename )
661        Used by "call" to post the request to the REST server and return the
662        response. $raw_data and $filename are used when uploading a photo or
663        video to Facebook.
664
665    _parse($string)
666        Parses the response from a call to the Facebook server to make it a
667        Perl data structure, and returns the result.
668
669    _parser()
670        Returns a new instance of JSON::Any.
671
672    _reformat_response( $params, $response )
673        Reformats the response according to whether the app is a desktop
674        app, if the response should be parsed (i.e., changed to a Perlish
675        structure), if the response is empty, etc. Returns the reformatted
676        response.
677
678DIAGNOSTICS
679    "Unable to load JSON module for parsing: %s"
680        JSON::Any was not able to load one of the JSON modules it uses to
681        parse JSON. Please make sure you have one (of the several) JSON
682        modules it can use installed.
683
684    "Error during REST call: %s"
685        This means that there's most likely an error in the server you are
686        using to communicate to the Facebook REST server. Look at the
687        traceback to determine why an error was thrown. Double-check that
688        "server_uri" is set to the right location.
689
690    "Cannot create namespace %s: %s"
691        Cannot create the needed subclass method. Contact the developer to
692        report.
693
694    "Cannot create attribute %s: %s"
695        Cannot create the needed attribute method. Contact the developer to
696        report.
697
698    "<_format_and_check_params must be called in list context!">
699        You're using a private method call and you're not calling it in list
700        context. It returns a list of items, all of which should be
701        interesting to you.
702
703    "Cannot open %s"
704        Cannot open the configuration file. Make sure the filename is
705        correct and that the program has the appropriate permissions.
706
707    "Cannot close %s"
708        Cannot close the configuration file. Make sure the filename is
709        correct and that the program has the appropriate permissions.
710
711FAQ
712    Id numbers returned by Facebook are being rounded. What is the problem?
713        The JSON module that is installed on your system is converting the
714        numbers to Perl and is losing precision in the process. Make sure
715        you have the latest JSON::XS module installed or JSON::DWIW (any
716        recent version of either should work).
717
718    How do I run the examples in the examples directory?
719        There are two types of examples in the examples directory,
720        desktop-based and web-based. With desktop-based, the api key and
721        secret key are prompted for on STDIN, and then the user's browser is
722        opened and directed to the Facebook log in page. Currently, the
723        desktop-based examples pause for 20 seconds to allow for the user to
724        enter in their credentials.
725
726        With web-based, you have to pass in the api key, secret key, and app
727        path to the constructor, and then place the script at the callback
728        url you specified in the Facebook setup for your application. For
729        instance, when using the web-based example, you might have the
730        following callback url (note the trailing slash):
731
732            http://www.example.com/facebook-canvas-json/
733
734        You have to make sure the required Perl modules are in the @INC path
735        for the web server process, otherwise there will be a 500 Internal
736        Server error. The easiest way to do that is to put the following at
737        the top of the example script (as long as "path-to-perl5-libs" is
738        readable by the web server process):
739
740            use lib "path-to-perl5-libs";
741
742    I'm getting the "Multiple values for %s" error from WFA::Canvas. Help?
743        This usually means that your forms are using GET rather than POST to
744        Facebook URLs. Change your forms to use POST and the problem should
745        be resolved. (See RT#31620 and RT#31944 for more information).
746
747CONFIGURATION AND ENVIRONMENT
748    WWW::Facebook::API requires no configuration files or environment
749    variables.
750
751DEPENDENCIES
752    version Crypt::SSLeay Digest::MD5 JSON::Any Time::HiRes LWP::UserAgent
753
754INCOMPATIBILITIES
755    None.
756
757BUGS AND LIMITATIONS
758    No bugs have been reported.
759
760    Please report any bugs or feature requests to
761    "bug-www-facebook-api@rt.cpan.org", or through the web interface at
762    <http://rt.cpan.org>.
763
764SOURCE REPOSITORY
765    http://github.com/unobe/perl-wfa/tree/master
766
767TESTING
768    There are some live tests included, but they are only run if the
769    following environment variables are set: WFA_API_KEY_TEST
770    WFA_SECRET_TEST WFA_SESSION_KEY_TEST
771
772    Additionally, if your app is a desktop one, you must set
773    "WFA_DESKTOP_TEST". Also, the session key must be valid for the API key
774    being used.
775
776    To enable POD coverage and POD formattings tests, set "PERL_TEST_POD" to
777    true. To enable Perl::Critic tests, set "_PERL_TEST_CRITIC" to true.
778
779AUTHOR
780    David Romano "<unobe@cpan.org>"
781
782CONTRIBUTORS
783    Anthony Bouvier "none"
784
785    Clayton Scott "http://www.matrix.ca"
786
787    David Leadbeater "http://dgl.cx"
788
789    Derek Del Conte "derek@delconte.org"
790
791    Gisle Aas "none"
792
793    J. Shirley "<jshirley@gmail.com>"
794
795    Jim Spath "<jspath@gmail.com>"
796
797    Kevin Riggle "none"
798
799    Larry Mak "none"
800
801    Louis-Philippe "none"
802
803    Matt Sickler "<imMute@mail.msk3.ath.cx>"
804
805    Nick Gerakines "<nick@socklabs.com>"
806
807    Olaf Alders "<olaf@wundersolutions.com>"
808
809    Patrick Michael Kane "<pmk@wawd.com>"
810
811    Ryan D Johnson "ryan@innerfence.com"
812
813    Sean O'Rourke "<seano@cpan.org>"
814
815    Shawn Van Ittersum "none"
816
817    Simon Cavalletto "<simonm@cavalletto.org>"
818
819    Skyler Clark "none"
820
821    Thomas Sibley "<tsibley@cpan.org>"
822
823LICENSE AND COPYRIGHT
824    Copyright (c) 2007-2010, David Romano "<unobe@cpan.org>". All rights
825    reserved.
826
827    This module is free software; you can redistribute it and/or modify it
828    under the same terms as Perl itself. See perlartistic.
829
830DISCLAIMER OF WARRANTY
831    BECAUSE THIS SOFTWARE IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
832    FOR THE SOFTWARE, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
833    OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
834    PROVIDE THE SOFTWARE "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
835    EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
836    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
837    ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH
838    YOU. SHOULD THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
839    NECESSARY SERVICING, REPAIR, OR CORRECTION.
840
841    IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
842    WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
843    REDISTRIBUTE THE SOFTWARE AS PERMITTED BY THE ABOVE LICENSE, BE LIABLE
844    TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL, OR
845    CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
846    SOFTWARE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
847    RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
848    FAILURE OF THE SOFTWARE TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
849    SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
850    DAMAGES.
851
852