14. MVC
Model Controller View
Data Presentation
get ‘/profile/:id’ do
# request data for :id from FB API
# pass to view
end
{
"id": "2902652",
"name": "Al Shaw",
15. MVC
Model Controller View
Data Presentation
post ‘/profile’ do
# pass new values from user input
# to Model
end
{
"id": "2902652",
"name": "Al Shaw",
16. Let’s do it!
require ‘rubygems’
require ‘sinatra’
require ‘open-uri’
require ‘json’
get ‘/profile/:id’ do
user = params[:id]
profile = open(“http://graph.facebook.com/#{user}”).read
profile = JSON.parse(profile)
“<h2>” + profile[‘name’] + “</h2>”
end
22. 4. Call & Parse FB API
get ‘/profile/:id’ do
user = params[:id]
profile = open(“http://graph.facebook.com/#{user}”).read
profile = JSON.parse(profile)
end
http://graph.facebook.com/ashaw
{ {"name"=>"Al Shaw",
"id": "2902652", "username"=>"ashaw",
"name": "Al Shaw",
"first_name": "Al", "gender"=>"male",
"last_name": "Shaw", "id"=>"2902652",
"link": "https://www.facebook.com/ashaw", "last_name"=>"Shaw",
"username": "ashaw", "locale"=>"en_US",
"gender": "male",
"locale": "en_US"
"link"=>"http://www.facebook.com/ashaw",
} "first_name"=>"Al"}
23. 5. Show what you want
get ‘/profile/:id’ do
user = params[:id]
profile = open(“http://graph.facebook.com/#{user}”).read
profile = JSON.parse(profile)
“<h2>” + profile[‘name’] + “</h2>”
end
By default, last line in a block
is an implicit view
“<h2>” + profile[‘name’] + “</h2>”
39. Actions
‘/follows‘ Show following status
get '/follows' do
@user1 = params[:user1]
@user2 = params[:user2]
#not implemented yet
@following = is_following?(@user1, @user2)
erb :follows
end
41. is_following?
• Get user IDs for usernames
def twitter_id(screen_name)
user = open(“http://api.twitter.com/1/users/show.json?screen_name=#{screen_name}”).read
user = JSON.parse(user)
user['id']
end
42. is_following?
• Get user IDs for usernames
def twitter_id(screen_name)
user = open(“http://api.twitter.com/1/users/show.json?screen_name=#{screen_name}”).read
user = JSON.parse(user)
user['id']
end
twitter_id(‘a_l’) #=> 7865282
43. is_following?
• Check if user ID 1 is in user 2’s follower array
def twitter_id(screen_name)
user = open(“http://api.twitter.com/1/users/show.json?screen_name=#{screen_name}”).read
user = JSON.parse(user)
user['id']
end
def is_following?(a,b)
followers = open("http://api.twitter.com/1/followers/ids.json?screen_name=#{b}").read
followers = JSON.parse(followers)
followers.include?(twitter_id(a))
end
44. is_following?
• Check if user ID 1 is in user 2’s follower array
def twitter_id(screen_name)
user = open(“http://api.twitter.com/1/users/show.json?screen_name=#{screen_name}”).read
user = JSON.parse(user)
user['id']
end
def is_following?(a,b)
followers = open("http://api.twitter.com/1/followers/ids.json?screen_name=#{b}").read
followers = JSON.parse(followers)
followers.include?(twitter_id(a))
end
is_following?('barackobama', 'a_l')
#=> true
45. Putting it together
def twitter_id(screen_name)
user = open(“http://api.twitter.com/1/users/show.json?screen_name=#{screen_name}”).read
user = JSON.parse(user)
user['id']
end
def is_following?(a,b)
followers = open("http://api.twitter.com/1/followers/ids.json?screen_name=#{b}").read
followers = JSON.parse(followers)
followers.include?(twitter_id(a))
end
get '/follows' do
@user1 = params[:user1]
@user2 = params[:user2]
@following = is_following?(@user1, @user2)
erb :follows
end