forked from dtompkins/fbcmd
-
Notifications
You must be signed in to change notification settings - Fork 0
/
facebookapi_php5_restlib.php
3627 lines (3367 loc) · 126 KB
/
facebookapi_php5_restlib.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?php
// Copyright 2004-2009 Facebook. All Rights Reserved.
//
// +---------------------------------------------------------------------------+
// | Facebook Platform PHP5 client |
// +---------------------------------------------------------------------------+
// | Copyright (c) 2007-2009 Facebook, Inc. |
// | All rights reserved. |
// | |
// | Redistribution and use in source and binary forms, with or without |
// | modification, are permitted provided that the following conditions |
// | are met: |
// | |
// | 1. Redistributions of source code must retain the above copyright |
// | notice, this list of conditions and the following disclaimer. |
// | 2. Redistributions in binary form must reproduce the above copyright |
// | notice, this list of conditions and the following disclaimer in the |
// | documentation and/or other materials provided with the distribution. |
// | |
// | THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
// | IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
// | OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
// | IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
// | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
// | NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
// | THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
// +---------------------------------------------------------------------------+
// | For help with this library, contact [email protected] |
// +---------------------------------------------------------------------------+
//
include_once 'jsonwrapper/jsonwrapper.php';
class FacebookRestClient {
public $secret;
public $session_key;
public $api_key;
// to save making the friends.get api call, this will get prepopulated on
// canvas pages
public $friends_list;
public $user;
// to save making the pages.isAppAdded api call, this will get prepopulated
// on canvas pages
public $added;
public $is_user;
// we don't pass friends list to iframes, but we want to make
// friends_get really simple in the canvas_user (non-logged in) case.
// So we use the canvas_user as default arg to friends_get
public $canvas_user;
public $batch_mode;
private $batch_queue;
private $pending_batch;
private $call_as_apikey;
private $use_curl_if_available;
private $format = null;
private $using_session_secret = false;
const BATCH_MODE_DEFAULT = 0;
const BATCH_MODE_SERVER_PARALLEL = 0;
const BATCH_MODE_SERIAL_ONLY = 2;
/**
* Create the client.
* @param string $session_key if you haven't gotten a session key yet, leave
* this as null and then set it later by just
* directly accessing the $session_key member
* variable.
*/
public function __construct($api_key, $secret, $session_key=null) {
$this->secret = $secret;
$this->session_key = $session_key;
$this->api_key = $api_key;
$this->batch_mode = FacebookRestClient::BATCH_MODE_DEFAULT;
$this->last_call_id = 0;
$this->call_as_apikey = '';
$this->use_curl_if_available = true;
$this->server_addr =
Facebook::get_facebook_url('api') . '/restserver.php';
$this->photo_server_addr =
Facebook::get_facebook_url('api-photo') . '/restserver.php';
if (!empty($GLOBALS['facebook_config']['debug'])) {
$this->cur_id = 0;
?>
<script type="text/javascript">
var types = ['params', 'xml', 'php', 'sxml'];
function getStyle(elem, style) {
if (elem.getStyle) {
return elem.getStyle(style);
} else {
return elem.style[style];
}
}
function setStyle(elem, style, value) {
if (elem.setStyle) {
elem.setStyle(style, value);
} else {
elem.style[style] = value;
}
}
function toggleDisplay(id, type) {
for (var i = 0; i < types.length; i++) {
var t = types[i];
var pre = document.getElementById(t + id);
if (pre) {
if (t != type || getStyle(pre, 'display') == 'block') {
setStyle(pre, 'display', 'none');
} else {
setStyle(pre, 'display', 'block');
}
}
}
return false;
}
</script>
<?php
}
}
/**
* Set the default user id for methods that allow the caller
* to pass an uid parameter to identify the target user
* instead of a session key. This currently applies to
* the user preferences methods.
*
* @param $uid int the user id
*/
public function set_user($uid) {
$this->user = $uid;
}
/**
* Switch to use the session secret instead of the app secret,
* for desktop and unsecured environment
*/
public function use_session_secret($session_secret) {
$this->secret = $session_secret;
$this->using_session_secret = true;
}
/**
* Normally, if the cURL library/PHP extension is available, it is used for
* HTTP transactions. This allows that behavior to be overridden, falling
* back to a vanilla-PHP implementation even if cURL is installed.
*
* @param $use_curl_if_available bool whether or not to use cURL if available
*/
public function set_use_curl_if_available($use_curl_if_available) {
$this->use_curl_if_available = $use_curl_if_available;
}
/**
* Start a batch operation.
*/
public function begin_batch() {
if ($this->pending_batch()) {
$code = FacebookAPIErrorCodes::API_EC_BATCH_ALREADY_STARTED;
$description = FacebookAPIErrorCodes::$api_error_descriptions[$code];
throw new FacebookRestClientException($description, $code);
}
$this->batch_queue = array();
$this->pending_batch = true;
}
/*
* End current batch operation
*/
public function end_batch() {
if (!$this->pending_batch()) {
$code = FacebookAPIErrorCodes::API_EC_BATCH_NOT_STARTED;
$description = FacebookAPIErrorCodes::$api_error_descriptions[$code];
throw new FacebookRestClientException($description, $code);
}
$this->pending_batch = false;
$this->execute_server_side_batch();
$this->batch_queue = null;
}
/**
* are we currently queueing up calls for a batch?
*/
public function pending_batch() {
return $this->pending_batch;
}
private function execute_server_side_batch() {
$item_count = count($this->batch_queue);
$method_feed = array();
foreach ($this->batch_queue as $batch_item) {
$method = $batch_item['m'];
$params = $batch_item['p'];
list($get, $post) = $this->finalize_params($method, $params);
$method_feed[] = $this->create_url_string(array_merge($post, $get));
}
$serial_only =
($this->batch_mode == FacebookRestClient::BATCH_MODE_SERIAL_ONLY);
$params = array('method_feed' => json_encode($method_feed),
'serial_only' => $serial_only,
'format' => $this->format);
$result = $this->call_method('facebook.batch.run', $params);
if (is_array($result) && isset($result['error_code'])) {
throw new FacebookRestClientException($result['error_msg'],
$result['error_code']);
}
for ($i = 0; $i < $item_count; $i++) {
$batch_item = $this->batch_queue[$i];
$batch_item['p']['format'] = $this->format;
$batch_item_result = $this->convert_result($result[$i],
$batch_item['m'],
$batch_item['p']);
if (is_array($batch_item_result) &&
isset($batch_item_result['error_code'])) {
throw new FacebookRestClientException($batch_item_result['error_msg'],
$batch_item_result['error_code']);
}
$batch_item['r'] = $batch_item_result;
}
}
public function begin_permissions_mode($permissions_apikey) {
$this->call_as_apikey = $permissions_apikey;
}
public function end_permissions_mode() {
$this->call_as_apikey = '';
}
/*
* If a page is loaded via HTTPS, then all images and static
* resources need to be printed with HTTPS urls to avoid
* mixed content warnings. If your page loads with an HTTPS
* url, then call set_use_ssl_resources to retrieve the correct
* urls.
*/
public function set_use_ssl_resources($is_ssl = true) {
$this->use_ssl_resources = $is_ssl;
}
/**
* Returns public information for an application (as shown in the application
* directory) by either application ID, API key, or canvas page name.
*
* @param int $application_id (Optional) app id
* @param string $application_api_key (Optional) api key
* @param string $application_canvas_name (Optional) canvas name
*
* Exactly one argument must be specified, otherwise it is an error.
*
* @return array An array of public information about the application.
*/
public function application_getPublicInfo($application_id=null,
$application_api_key=null,
$application_canvas_name=null) {
return $this->call_method('facebook.application.getPublicInfo',
array('application_id' => $application_id,
'application_api_key' => $application_api_key,
'application_canvas_name' => $application_canvas_name));
}
/**
* Creates an authentication token to be used as part of the desktop login
* flow. For more information, please see
* http://wiki.developers.facebook.com/index.php/Auth.createToken.
*
* @return string An authentication token.
*/
public function auth_createToken() {
return $this->call_method('facebook.auth.createToken');
}
/**
* Returns the session information available after current user logs in.
*
* @param string $auth_token the token returned by
* auth_createToken or passed back to
* your callback_url.
* @param bool $generate_session_secret whether the session returned should
* include a session secret
*
* @return array An assoc array containing session_key, uid
*/
public function auth_getSession($auth_token, $generate_session_secret=false) {
if (!$this->pending_batch()) {
$result = $this->call_method('facebook.auth.getSession',
array('auth_token' => $auth_token,
'generate_session_secret' => $generate_session_secret));
$this->session_key = $result['session_key'];
if (!empty($result['secret']) && !$generate_session_secret) {
// desktop apps have a special secret
$this->secret = $result['secret'];
}
return $result;
}
}
/**
* Generates a session-specific secret. This is for integration with
* client-side API calls, such as the JS library.
*
* @return array A session secret for the current promoted session
*
* @error API_EC_PARAM_SESSION_KEY
* API_EC_PARAM_UNKNOWN
*/
public function auth_promoteSession() {
return $this->call_method('facebook.auth.promoteSession');
}
/**
* Expires the session that is currently being used. If this call is
* successful, no further calls to the API (which require a session) can be
* made until a valid session is created.
*
* @return bool true if session expiration was successful, false otherwise
*/
public function auth_expireSession() {
return $this->call_method('facebook.auth.expireSession');
}
/**
* Revokes the given extended permission that the user granted at some
* prior time (for instance, offline_access or email). If no user is
* provided, it will be revoked for the user of the current session.
*
* @param string $perm The permission to revoke
* @param int $uid The user for whom to revoke the permission.
*/
public function auth_revokeExtendedPermission($perm, $uid=null) {
return $this->call_method('facebook.auth.revokeExtendedPermission',
array('perm' => $perm, 'uid' => $uid));
}
/**
* Revokes the user's agreement to the Facebook Terms of Service for your
* application. If you call this method for one of your users, you will no
* longer be able to make API requests on their behalf until they again
* authorize your application. Use with care. Note that if this method is
* called without a user parameter, then it will revoke access for the
* current session's user.
*
* @param int $uid (Optional) User to revoke
*
* @return bool true if revocation succeeds, false otherwise
*/
public function auth_revokeAuthorization($uid=null) {
return $this->call_method('facebook.auth.revokeAuthorization',
array('uid' => $uid));
}
/**
* Get public key that is needed to verify digital signature
* an app may pass to other apps. The public key is only used by
* other apps for verification purposes.
* @param string API key of an app
* @return string The public key for the app.
*/
public function auth_getAppPublicKey($target_app_key) {
return $this->call_method('facebook.auth.getAppPublicKey',
array('target_app_key' => $target_app_key));
}
/**
* Get a structure that can be passed to another app
* as proof of session. The other app can verify it using public
* key of this app.
*
* @return signed public session data structure.
*/
public function auth_getSignedPublicSessionData() {
return $this->call_method('facebook.auth.getSignedPublicSessionData',
array());
}
/**
* Returns the number of unconnected friends that exist in this application.
* This number is determined based on the accounts registered through
* connect.registerUsers() (see below).
*/
public function connect_getUnconnectedFriendsCount() {
return $this->call_method('facebook.connect.getUnconnectedFriendsCount',
array());
}
/**
* This method is used to create an association between an external user
* account and a Facebook user account, as per Facebook Connect.
*
* This method takes an array of account data, including a required email_hash
* and optional account data. For each connected account, if the user exists,
* the information is added to the set of the user's connected accounts.
* If the user has already authorized the site, the connected account is added
* in the confirmed state. If the user has not yet authorized the site, the
* connected account is added in the pending state.
*
* This is designed to help Facebook Connect recognize when two Facebook
* friends are both members of a external site, but perhaps are not aware of
* it. The Connect dialog (see fb:connect-form) is used when friends can be
* identified through these email hashes. See the following url for details:
*
* http://wiki.developers.facebook.com/index.php/Connect.registerUsers
*
* @param mixed $accounts A (JSON-encoded) array of arrays, where each array
* has three properties:
* 'email_hash' (req) - public email hash of account
* 'account_id' (opt) - remote account id;
* 'account_url' (opt) - url to remote account;
*
* @return array The list of email hashes for the successfully registered
* accounts.
*/
public function connect_registerUsers($accounts) {
return $this->call_method('facebook.connect.registerUsers',
array('accounts' => $accounts));
}
/**
* Unregisters a set of accounts registered using connect.registerUsers.
*
* @param array $email_hashes The (JSON-encoded) list of email hashes to be
* unregistered.
*
* @return array The list of email hashes which have been successfully
* unregistered.
*/
public function connect_unregisterUsers($email_hashes) {
return $this->call_method('facebook.connect.unregisterUsers',
array('email_hashes' => $email_hashes));
}
/**
* Returns events according to the filters specified.
*
* @param int $uid (Optional) User associated with events. A null
* parameter will default to the session user.
* @param array/string $eids (Optional) Filter by these event
* ids. A null parameter will get all events for
* the user. (A csv list will work but is deprecated)
* @param int $start_time (Optional) Filter with this unix time as lower
* bound. A null or zero parameter indicates no
* lower bound.
* @param int $end_time (Optional) Filter with this UTC as upper bound.
* A null or zero parameter indicates no upper
* bound.
* @param string $rsvp_status (Optional) Only show events where the given uid
* has this rsvp status. This only works if you
* have specified a value for $uid. Values are as
* in events.getMembers. Null indicates to ignore
* rsvp status when filtering.
*
* @return array The events matching the query.
*/
public function &events_get($uid=null,
$eids=null,
$start_time=null,
$end_time=null,
$rsvp_status=null) {
return $this->call_method('facebook.events.get',
array('uid' => $uid,
'eids' => $eids,
'start_time' => $start_time,
'end_time' => $end_time,
'rsvp_status' => $rsvp_status));
}
/**
* Returns membership list data associated with an event.
*
* @param int $eid event id
*
* @return array An assoc array of four membership lists, with keys
* 'attending', 'unsure', 'declined', and 'not_replied'
*/
public function &events_getMembers($eid) {
return $this->call_method('facebook.events.getMembers',
array('eid' => $eid));
}
/**
* RSVPs the current user to this event.
*
* @param int $eid event id
* @param string $rsvp_status 'attending', 'unsure', or 'declined'
*
* @return bool true if successful
*/
public function &events_rsvp($eid, $rsvp_status) {
return $this->call_method('facebook.events.rsvp',
array(
'eid' => $eid,
'rsvp_status' => $rsvp_status));
}
/**
* Cancels an event. Only works for events where application is the admin.
*
* @param int $eid event id
* @param string $cancel_message (Optional) message to send to members of
* the event about why it is cancelled
*
* @return bool true if successful
*/
public function &events_cancel($eid, $cancel_message='') {
return $this->call_method('facebook.events.cancel',
array('eid' => $eid,
'cancel_message' => $cancel_message));
}
/**
* Creates an event on behalf of the user is there is a session, otherwise on
* behalf of app. Successful creation guarantees app will be admin.
*
* @param assoc array $event_info json encoded event information
* @param string $file (Optional) filename of picture to set
*
* @return int event id
*/
public function events_create($event_info, $file = null) {
if ($file) {
return $this->call_upload_method('facebook.events.create',
array('event_info' => $event_info),
$file,
$this->photo_server_addr);
} else {
return $this->call_method('facebook.events.create',
array('event_info' => $event_info));
}
}
/**
* Edits an existing event. Only works for events where application is admin.
*
* @param int $eid event id
* @param assoc array $event_info json encoded event information
* @param string $file (Optional) filename of new picture to set
*
* @return bool true if successful
*/
public function events_edit($eid, $event_info, $file = null) {
if ($file) {
return $this->call_upload_method('facebook.events.edit',
array('eid' => $eid, 'event_info' => $event_info),
$file,
$this->photo_server_addr);
} else {
return $this->call_method('facebook.events.edit',
array('eid' => $eid,
'event_info' => $event_info));
}
}
/**
* Fetches and re-caches the image stored at the given URL, for use in images
* published to non-canvas pages via the API (for example, to user profiles
* via profile.setFBML, or to News Feed via feed.publishUserAction).
*
* @param string $url The absolute URL from which to refresh the image.
*
* @return bool true on success
*/
public function &fbml_refreshImgSrc($url) {
return $this->call_method('facebook.fbml.refreshImgSrc',
array('url' => $url));
}
/**
* Fetches and re-caches the content stored at the given URL, for use in an
* fb:ref FBML tag.
*
* @param string $url The absolute URL from which to fetch content. This URL
* should be used in a fb:ref FBML tag.
*
* @return bool true on success
*/
public function &fbml_refreshRefUrl($url) {
return $this->call_method('facebook.fbml.refreshRefUrl',
array('url' => $url));
}
/**
* Lets you insert text strings in their native language into the Facebook
* Translations database so they can be translated.
*
* @param array $native_strings An array of maps, where each map has a 'text'
* field and a 'description' field.
*
* @return int Number of strings uploaded.
*/
public function &fbml_uploadNativeStrings($native_strings) {
return $this->call_method('facebook.fbml.uploadNativeStrings',
array('native_strings' => json_encode($native_strings)));
}
/**
* Associates a given "handle" with FBML markup so that the handle can be
* used within the fb:ref FBML tag. A handle is unique within an application
* and allows an application to publish identical FBML to many user profiles
* and do subsequent updates without having to republish FBML on behalf of
* each user.
*
* @param string $handle The handle to associate with the given FBML.
* @param string $fbml The FBML to associate with the given handle.
*
* @return bool true on success
*/
public function &fbml_setRefHandle($handle, $fbml) {
return $this->call_method('facebook.fbml.setRefHandle',
array('handle' => $handle, 'fbml' => $fbml));
}
/**
* Register custom tags for the application. Custom tags can be used
* to extend the set of tags available to applications in FBML
* markup.
*
* Before you call this function,
* make sure you read the full documentation at
*
* http://wiki.developers.facebook.com/index.php/Fbml.RegisterCustomTags
*
* IMPORTANT: This function overwrites the values of
* existing tags if the names match. Use this function with care because
* it may break the FBML of any application that is using the
* existing version of the tags.
*
* @param mixed $tags an array of tag objects (the full description is on the
* wiki page)
*
* @return int the number of tags that were registered
*/
public function &fbml_registerCustomTags($tags) {
$tags = json_encode($tags);
return $this->call_method('facebook.fbml.registerCustomTags',
array('tags' => $tags));
}
/**
* Get the custom tags for an application. If $app_id
* is not specified, the calling app's tags are returned.
* If $app_id is different from the id of the calling app,
* only the app's public tags are returned.
* The return value is an array of the same type as
* the $tags parameter of fbml_registerCustomTags().
*
* @param int $app_id the application's id (optional)
*
* @return mixed an array containing the custom tag objects
*/
public function &fbml_getCustomTags($app_id = null) {
return $this->call_method('facebook.fbml.getCustomTags',
array('app_id' => $app_id));
}
/**
* Delete custom tags the application has registered. If
* $tag_names is null, all the application's custom tags will be
* deleted.
*
* IMPORTANT: If your application has registered public tags
* that other applications may be using, don't delete those tags!
* Doing so can break the FBML ofapplications that are using them.
*
* @param array $tag_names the names of the tags to delete (optinal)
* @return bool true on success
*/
public function &fbml_deleteCustomTags($tag_names = null) {
return $this->call_method('facebook.fbml.deleteCustomTags',
array('tag_names' => json_encode($tag_names)));
}
/**
* Gets the best translations for native strings submitted by an application
* for translation. If $locale is not specified, only native strings and their
* descriptions are returned. If $all is true, then unapproved translations
* are returned as well, otherwise only approved translations are returned.
*
* A mapping of locale codes -> language names is available at
* http://wiki.developers.facebook.com/index.php/Facebook_Locales
*
* @param string $locale the locale to get translations for, or 'all' for all
* locales, or 'en_US' for native strings
* @param bool $all whether to return all or only approved translations
*
* @return array (locale, array(native_strings, array('best translation
* available given enough votes or manual approval', approval
* status)))
* @error API_EC_PARAM
* @error API_EC_PARAM_BAD_LOCALE
*/
public function &intl_getTranslations($locale = 'en_US', $all = false) {
return $this->call_method('facebook.intl.getTranslations',
array('locale' => $locale,
'all' => $all));
}
/**
* This method is deprecated for calls made on behalf of users. This method
* works only for publishing stories on a Facebook Page that has installed
* your application. To publish stories to a user's profile, use
* feed.publishUserAction instead.
*
* For more details on this call, please visit the wiki page:
*
* http://wiki.developers.facebook.com/index.php/Feed.publishTemplatizedAction
*/
public function &feed_publishTemplatizedAction($title_template,
$title_data,
$body_template,
$body_data,
$body_general,
$image_1=null,
$image_1_link=null,
$image_2=null,
$image_2_link=null,
$image_3=null,
$image_3_link=null,
$image_4=null,
$image_4_link=null,
$target_ids='',
$page_actor_id=null) {
return $this->call_method('facebook.feed.publishTemplatizedAction',
array('title_template' => $title_template,
'title_data' => $title_data,
'body_template' => $body_template,
'body_data' => $body_data,
'body_general' => $body_general,
'image_1' => $image_1,
'image_1_link' => $image_1_link,
'image_2' => $image_2,
'image_2_link' => $image_2_link,
'image_3' => $image_3,
'image_3_link' => $image_3_link,
'image_4' => $image_4,
'image_4_link' => $image_4_link,
'target_ids' => $target_ids,
'page_actor_id' => $page_actor_id));
}
/**
* Registers a template bundle. Template bundles are somewhat involved, so
* it's recommended you check out the wiki for more details:
*
* http://wiki.developers.facebook.com/index.php/Feed.registerTemplateBundle
*
* @return string A template bundle id
*/
public function &feed_registerTemplateBundle($one_line_story_templates,
$short_story_templates = array(),
$full_story_template = null,
$action_links = array()) {
$one_line_story_templates = json_encode($one_line_story_templates);
if (!empty($short_story_templates)) {
$short_story_templates = json_encode($short_story_templates);
}
if (isset($full_story_template)) {
$full_story_template = json_encode($full_story_template);
}
if (isset($action_links)) {
$action_links = json_encode($action_links);
}
return $this->call_method('facebook.feed.registerTemplateBundle',
array('one_line_story_templates' => $one_line_story_templates,
'short_story_templates' => $short_story_templates,
'full_story_template' => $full_story_template,
'action_links' => $action_links));
}
/**
* Retrieves the full list of active template bundles registered by the
* requesting application.
*
* @return array An array of template bundles
*/
public function &feed_getRegisteredTemplateBundles() {
return $this->call_method('facebook.feed.getRegisteredTemplateBundles',
array());
}
/**
* Retrieves information about a specified template bundle previously
* registered by the requesting application.
*
* @param string $template_bundle_id The template bundle id
*
* @return array Template bundle
*/
public function &feed_getRegisteredTemplateBundleByID($template_bundle_id) {
return $this->call_method('facebook.feed.getRegisteredTemplateBundleByID',
array('template_bundle_id' => $template_bundle_id));
}
/**
* Deactivates a previously registered template bundle.
*
* @param string $template_bundle_id The template bundle id
*
* @return bool true on success
*/
public function &feed_deactivateTemplateBundleByID($template_bundle_id) {
return $this->call_method('facebook.feed.deactivateTemplateBundleByID',
array('template_bundle_id' => $template_bundle_id));
}
const STORY_SIZE_ONE_LINE = 1;
const STORY_SIZE_SHORT = 2;
const STORY_SIZE_FULL = 4;
/**
* Publishes a story on behalf of the user owning the session, using the
* specified template bundle. This method requires an active session key in
* order to be called.
*
* The parameters to this method ($templata_data in particular) are somewhat
* involved. It's recommended you visit the wiki for details:
*
* http://wiki.developers.facebook.com/index.php/Feed.publishUserAction
*
* @param int $template_bundle_id A template bundle id previously registered
* @param array $template_data See wiki article for syntax
* @param array $target_ids (Optional) An array of friend uids of the
* user who shared in this action.
* @param string $body_general (Optional) Additional markup that extends
* the body of a short story.
* @param int $story_size (Optional) A story size (see above)
* @param string $user_message (Optional) A user message for a short
* story.
*
* @return bool true on success
*/
public function &feed_publishUserAction(
$template_bundle_id, $template_data, $target_ids='', $body_general='',
$story_size=FacebookRestClient::STORY_SIZE_ONE_LINE,
$user_message='') {
if (is_array($template_data)) {
$template_data = json_encode($template_data);
} // allow client to either pass in JSON or an assoc that we JSON for them
if (is_array($target_ids)) {
$target_ids = json_encode($target_ids);
$target_ids = trim($target_ids, "[]"); // we don't want square brackets
}
return $this->call_method('facebook.feed.publishUserAction',
array('template_bundle_id' => $template_bundle_id,
'template_data' => $template_data,
'target_ids' => $target_ids,
'body_general' => $body_general,
'story_size' => $story_size,
'user_message' => $user_message));
}
/**
* Publish a post to the user's stream.
*
* @param $message the user's message
* @param $attachment the post's attachment (optional)
* @param $action links the post's action links (optional)
* @param $target_id the user on whose wall the post will be posted
* (optional)
* @param $uid the actor (defaults to session user)
* @return string the post id
*/
public function stream_publish(
$message, $attachment = null, $action_links = null, $target_id = null,
$uid = null) {
return $this->call_method(
'facebook.stream.publish',
array('message' => $message,
'attachment' => $attachment,
'action_links' => $action_links,
'target_id' => $target_id,
'uid' => $this->get_uid($uid)));
}
/**
* Remove a post from the user's stream.
* Currently, you may only remove stories you application created.
*
* @param $post_id the post id
* @param $uid the actor (defaults to session user)
* @return bool
*/
public function stream_remove($post_id, $uid = null) {
return $this->call_method(
'facebook.stream.remove',
array('post_id' => $post_id,
'uid' => $this->get_uid($uid)));
}
/**
* Add a comment to a stream post
*
* @param $post_id the post id
* @param $comment the comment text
* @param $uid the actor (defaults to session user)
* @return string the id of the created comment
*/
public function stream_addComment($post_id, $comment, $uid = null) {
return $this->call_method(
'facebook.stream.addComment',
array('post_id' => $post_id,
'comment' => $comment,
'uid' => $this->get_uid($uid)));
}
/**
* Remove a comment from a stream post
*
* @param $comment_id the comment id
* @param $uid the actor (defaults to session user)
* @return bool
*/
public function stream_removeComment($comment_id, $uid = null) {
return $this->call_method(
'facebook.stream.removeComment',
array('comment_id' => $comment_id,
'uid' => $this->get_uid($uid)));
}
/**
* Add a like to a stream post
*
* @param $post_id the post id
* @param $uid the actor (defaults to session user)
* @return bool
*/
public function stream_addLike($post_id, $uid = null) {
return $this->call_method(
'facebook.stream.addLike',
array('post_id' => $post_id,
'uid' => $this->get_uid($uid)));
}
/**
* Remove a like from a stream post
*
* @param $post_id the post id
* @param $uid the actor (defaults to session user)
* @return bool
*/
public function stream_removeLike($post_id, $uid = null) {
return $this->call_method(
'facebook.stream.removeLike',
array('post_id' => $post_id,
'uid' => $this->get_uid($uid)));
}
/**
* For the current user, retrieves stories generated by the user's friends
* while using this application. This can be used to easily create a
* "News Feed" like experience.
*
* @return array An array of feed story objects.
*/
public function &feed_getAppFriendStories() {
return $this->call_method('facebook.feed.getAppFriendStories');
}
/**
* Makes an FQL query. This is a generalized way of accessing all the data
* in the API, as an alternative to most of the other method calls. More
* info at http://wiki.developers.facebook.com/index.php/FQL
*
* @param string $query the query to evaluate
*
* @return array generalized array representing the results
*/
public function &fql_query($query) {
return $this->call_method('facebook.fql.query',
array('query' => $query));
}
/**
* Makes a set of FQL queries in parallel. This method takes a dictionary
* of FQL queries where the keys are names for the queries. Results from
* one query can be used within another query to fetch additional data. More