Switch branches/tags
Nothing to show
Find file History
Pull request Compare This branch is 1 commit behind facebookarchive:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Facebook Open Platform
Facebook Copyright 2006 - 2008

  * Common Public Attribution License Version 1.0.
  * The contents of this file are subject to the Common Public Attribution
  * License Version 1.0 (the "License") you may not use this file except in
  * compliance with the License. You may obtain a copy of the License at
  * http://developers.facebook.com/fbopen/cpal.html. The License is based
  * on the Mozilla Public License Version 1.1 but Sections 14 and 15 have
  * been added to cover use of software over a computer network and provide
  * for limited attribution for the Original Developer. In addition, Exhibit A
  * has been modified to be consistent with Exhibit B.
  * Software distributed under the License is distributed on an "AS IS" basis,
  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  * for the specific language governing rights and limitations under the License.
  * The Original Code is Facebook Open Platform.
  * The Original Developer is the Initial Developer.
  * The Initial Developer of the Original Code is Facebook, Inc.  All portions
  * of the code written by Facebook, Inc are
  * Copyright 2006-2008 Facebook, Inc. All Rights Reserved.
  ********END LICENSE BLOCK*********/


This package contains the basic functionality needed to implement and expose
the Facebook platform, including support for the Facebook API, FQL, and FBML.
This package is designed to be used in conjunction with the libfbml for Apache
2.x package.

This README contains the installation instructions for Facebook Open Platform.
After following the install instructions, you should have:
  * a working API server under YOUR_PLATFORM_SERVER_URL/api/resterver.php which responds to
    all API calls in the documentation.
  * a working application under YOUR_APP_SERVER_URL/fbopentest which tests each API call
    in the documentation.
  * a set of data in a dummy database which backs the return values of each API
    call in the documentation.


To run this setup, you will need:

A. PHP 5 (downloadable from www.php.net)

The PHP 5 code makes use of the following extensions, many of which come
installed in the standard build or binary.  Check 'php -m' on your system to
make sure they exist.

Required standard PHP extensions: ctype, curl, date, iconv, json, mysql, pcre,
simplexml, standard, xmlwriter

Facebook PHP extensions:  fbml (from this release)

Optional standard PHP extensions: The apc extension is referenced in lib/thrift
but is not required.

B. The Apache 1.3 web server (downloadable from http://www.apache.org/), or some
web server which supports PHP 5, and inserts data similarly into these

C. MySQL version 4.1 or greater (downloadable from dev.mysql.com).

D. [Optional] The Facebook Thrift binary (available at

This allows you to easily set up new APIs, autogenerating much of the API
request-handling code from an interface definition file.


To configure this package, first install the Facebook Open Platform PHP tree code
under your intended server document root.

Second, grep the codebase for any instances of "FBOPEN:SETUP".  These are mostly
items like your URLs, database IPs, and so forth that you must edit for the
code to run for the first time.  Instructions are provided at each instance.
The main locations are the files:

There are also a number of FBJS test files under html/fbopentest that make AJAX
calls and require you to enter your server URL there as well.

Third, insert your dummy database content.  Run from this directory:
   mysql -u root -h YOUR_DB_IP -p < fbopen_data_dump

Running the Sample:

Once you have followed the configuration steps above, you shoudl be able to run
the application 'fbopentest' installed under your html root.  The file apitest.php
runs all available API methods, and the file fbml.php outputs some FBML to be
rendered by your system.  Both of these are run using the same data set up in
step 4, as test user 1240077.

A. Testing the API:

To test the API, load the following URL from a browser:


This URL represents the expanded form of an URL like

If you want to support the shorter form of an application URL, Apache rewriting
rules (or similar mechanisms) can be used to redirect this this to the canvas.php
URL with the following arguments:
  * fb_app_name -- a unique, human-readable name of the app.  Equivalent to
    SOME_APP in the example above.
  * fb_user_id -- the user id of a verified user on your site, authenticated
    through some external mechanisms (e.g., cookies, etc.)
  * fb_url_suffix -- a url_encoded version of SOME_PATH?SOME_GET_STRING in the
    above example.  In the sample above, the string maps to query string

B. Testing FBML:

To test FBML, load the following URL from a browser:


C. Testing the API, FBML, and FBJS all at once:

To test the API, FMBL, and FBJS all at once, you may load fbopentest/testall.php (http://apps.example.com/fbopentest/testall.php).

This opens iframes to your canvas pages for the API (html/fbopentest/apitest.php), pages featuring FBML (html/fbopentest/fbml.php), and many pages featuring FBJS (the rest of html/fbopentest/, including fbmlplusfbjs.php, a simple FBML page augmented by a simple bit of FBJS).

--- Notes ---

Note that there are many occurrences of FBOPEN:NOTE in the tree.  These indicate decisions made here in moving Facebook's implementation to
an open source implementation.  There are a number of omissions of functionality and assumptions NOT made about the uses to which the open 
source API, FBML, and FBJS implementation can be put.  For instance:

- Much of the JS normally returned with a Facebook Platform (apps.facebook.com) page is omitted, as it is domain-specific.
- On the other hand, much of the JS returned may not be entirely relevant, or may be unreachable.
- Image and static content caching is not implemented.  Normally, on encountering includes of external CSS and JS,
  Facebook prefetches the content, sanitizes it, and stores that output under a link internal to the system.
  This is not implenented in the open source version.
  Thus, sanitizing FBJS and CSS only occurs if it is under an inline <script> or <style> tag, respectively.
- No assumptions are made about the persistent login implementation of another platform.  www.facebook.com implements
  persistent, verified login of a user using cookies.  However, cookies are not available on all platforms (think mobile),
  so we do not rely on the ability to set browser cookies in the implementation.  Instances of this (e.g. html/fbml/fbjs_ajax_proxy.php)
  are noted, and can be replaced with your own functionality.
- Note that CSS is not included here, so styling is up to you.

Happy hacking!