CS160 Discussion Section David Sun

CS160 Discussion Section
David Sun
Facebook Application
•
•
•
•
•
Architecture
Information repository
Session management
GUI
Privacy
Creating a Facebook Application
• Add “Developer” application on Facebook.
• Click “Set Up New Application”.
• Provide:
– Application name, e.g. myfirstapp
– Support email e.g. [email protected]
– Callback URL (this is the URL to your application code)
http://www.myserver.com/myfirstapp/
– Canvas page URL (the actual facebook url as seen by the users)
http://apps.facebook.com/myfirstapp
• You will get:
– An API Key : 05a5ef15248bb9a4887e5f4154678731
– A Secret Key: 09901d83048d959eaad17228c8c7a95b
– Identify the application to Facebook
Client/Server Interaction
Browser
App
Canvas
1. Browser makes
request
5 . Facebook renders FBML to
HTML
Facebook server
2. FB server calls App
Server through
callback URL
4. App server returns
FBML
3. App calls FB API
Your app server
appinclude.php
<?php
require_once 'facebook.php';
$appapikey = '05a5ef15248bb9a4887e5f4154678731'
$appsecret = '09901d83048d959eaad17228c8c7a95b'
$facebook = new Facebook($appapikey, $appsecret);
$user = $facebook->require_login();
//[todo: change the following url to your callback url]
$appcallbackurl = 'http://pact.eecs.berkeley.edu/davidsun/dstestapp/';
//catch the exception that gets thrown if the cookie has an invalid session_key
in it
try {
if (!$facebook->api_client->users_isAppAdded()) {
$facebook->redirect($facebook->get_add_url());
}
} catch (Exception $ex) {
//this will clear cookies for your application and redirect them to a login
prompt
$facebook->set_user(null, null);
$facebook->redirect($appcallbackurl);
}
?>
Information Management
• Application generic information:
– Information (or a subset of) that users submitted
to Facebook: name, birth-date, relationship status,
interests, education background etc.
– Can be retrieved by SQL queries or Facebook API.
• Application specific information
– Data users submit to or needs to be maintained
for your application.
– MYSQL database.
Facebook Query Language (FQL)
• FQL = subset of SQL
– Only select-statements, no updates/deletes
• Exposed Facebook data/tables:
– User, Friend, Group, Group_member, Event,
Event_member, Photo, AlbumPhoto_tag
• SELECT name, affiliations
FROM user
WHERE uid IN (SELECT uid2
FROM friend
WHERE uid1=211031)
User Table
• user uid*, first_name, last_name, name*,
pic_small, pic_big, pic_square, pic, affiliations,
profile_update_time, timezone, religion,
birthday, sex, hometown_location, meeting_sex,
meeting_for, relationship_status,
significant_other_id, political, current_location,
activities, interests, is_app_user, music, tv,
movies, books, quotes, about_me, hs_info,
education_history, work_history, notes_count,
wall_count, status, has_added_app
Application Specific Information
Repository
• We will be support MYSQL in this class project
• You will be able to run individual MYSQL
servers on your instructional accounts.
• Design a database schemata that matches the
needs of your application.
– will need to be “interoperable” with Facebook
databases.
– should be sound, i.e. correct keys, normalized etc.
Example: Free Gifts
PHP
• “Object oriented” server-side scripting
language.
• Becoming increasingly popular in recent years.
• Mixture of C/Pearl syntax.
• HTML-compliant
• <?php ?>
• Supports external resource: e.g. mysql
PHP/MySQL
<?php
// Connecting, selecting database
$link = mysql_connect('mysql_host', 'mysql_user',
'mysql_password')
or die('Could not connect: ' . mysql_error());
echo 'Connected successfully';
mysql_select_db('my_database') or die('Could not
select database');
?>
Facebook API
• Wrappers for FQL queries.
• Implemented in a variety of scripting languages:
PHP, Python, Ruby, .NET
• Getting session specific information:
– createToken
– getSession
– getLoggedInUser
• Getting Facebook data:
– Users.getInfo
– Photos.get
FBML – Facebook Markup Language
• Subset of HTML + Facebook elements
• Functionalities:
– Enforce uniform/standard look and feel for shared
components: navigation, wall, dashbord, friendselector, buttons, time-dates, dialog, notification.
– Implementing privacy designs: e.g., restrict the
content to be only visible to the current viewer.
• Syntax just like well-formed HTML/XML.
FBML
•
<fb:editor action="?do-it" labelwidth="100">
<fb:editor-text label="Title" name="title" value=""/>
<fb:editor-text label="Author" name="author" value=""/>
<fb:editor-custom label="Status">
<select name="state">
<option value="0" selected>have read</option>
<option value="1">am reading</option>
<option value="2">want to read</option>
</select>
</fb:editor-custom>
<fb:editor-textarea label="Comment" name="comment"/>
<fb:editor-buttonset>
<fb:editor-button value="Add"/>
<fb:editor-button value="Recommend"/>
<fb:editor-cancel />
</fb:editor-buttonset>
</fb:editor>
FBML
•
<fb:tabs>
<fb:tab-item href='http://apps.facebook.com/yourapp/myphotos.php' title='My
Photos' selected='true'/>
<fb:tab-item href='http://apps.facebook.com/yourapp/recentalbums.php'
title='Recent Albums' />
</fb:tabs>
•
<fb:success>
<fb:message>Success message</fb:message>
This is the success message text.
</fb:success>
FBML
• Privacy control is a key design issue in your
project.
• You can enclose GUI elements with privacy
tags to control what other people can see on
your profile.
• <fb:visible-to-owner>
Welcome back to your profile!
</fb:visible-to-owner>
• <fb:is-in-network network="16777229"
uid="1230541">
User 1230541, you are in the Berkeley
network!
</fb:is-in-network>
Other technology
•
•
•
•
JavaScript (beta)
Mock-AJAX
Flash/Action-Script
Ruby/ColdFusion/.NET
Instructional Computing
• We’ll be supporting
– MYSQL
– PHP
– Apache
• If you want to use any other technology then
you will need to run your own server on the
public domain.
Getting Started
• Set up MYSQL.
• Create the first application :
http://developers.facebook.com/step_by_step.p
hp
• Create a project webpage under your
instructional:
– Say a little about who you guys are.
– The title/goal of the project
– You will be uploading documents and code to this
space in the future.
– Send cs160@imail the URL
Resources
• FBML:http://wiki.developers.facebook.com/index.php/F
BML
• API: http://wiki.developers.facebook.com/index.php/API
• FQL:http://wiki.developers.facebook.com/index.php/FQL
• Code Testing: http://developers.facebook.com/tools.php
• MySQL:
http://us.php.net/mysql (manual)
http://www.pantz.org/database/mysql/mysqlcommands.
shtml (quick reference)
• PHP: http://us3.php.net/manual/en/index.php
• Project WIKI
– http://kettle.cs.berkeley.edu/cs160-fall-07 (instructions on
setting up MySQL)