jet-facebooker 1.0.64
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.autotest +15 -0
- data/CHANGELOG.rdoc +24 -0
- data/COPYING.rdoc +19 -0
- data/Manifest.txt +152 -0
- data/README.rdoc +119 -0
- data/Rakefile +94 -0
- data/TODO.rdoc +4 -0
- data/examples/desktop_login.rb +14 -0
- data/facebooker.gemspec +42 -0
- data/generators/facebook/facebook_generator.rb +14 -0
- data/generators/facebook/templates/config/facebooker.yml +49 -0
- data/generators/facebook/templates/public/javascripts/facebooker.js +332 -0
- data/generators/facebook_controller/USAGE +33 -0
- data/generators/facebook_controller/facebook_controller_generator.rb +40 -0
- data/generators/facebook_controller/templates/controller.rb +7 -0
- data/generators/facebook_controller/templates/functional_test.rb +11 -0
- data/generators/facebook_controller/templates/helper.rb +2 -0
- data/generators/facebook_controller/templates/view.fbml.erb +2 -0
- data/generators/facebook_controller/templates/view.html.erb +2 -0
- data/generators/facebook_publisher/facebook_publisher_generator.rb +14 -0
- data/generators/facebook_publisher/templates/create_facebook_templates.rb +15 -0
- data/generators/facebook_publisher/templates/publisher.rb +3 -0
- data/generators/facebook_scaffold/USAGE +27 -0
- data/generators/facebook_scaffold/facebook_scaffold_generator.rb +118 -0
- data/generators/facebook_scaffold/templates/controller.rb +93 -0
- data/generators/facebook_scaffold/templates/facebook_style.css +2579 -0
- data/generators/facebook_scaffold/templates/functional_test.rb +89 -0
- data/generators/facebook_scaffold/templates/helper.rb +2 -0
- data/generators/facebook_scaffold/templates/layout.fbml.erb +6 -0
- data/generators/facebook_scaffold/templates/layout.html.erb +17 -0
- data/generators/facebook_scaffold/templates/style.css +74 -0
- data/generators/facebook_scaffold/templates/view_edit.fbml.erb +13 -0
- data/generators/facebook_scaffold/templates/view_edit.html.erb +18 -0
- data/generators/facebook_scaffold/templates/view_index.fbml.erb +24 -0
- data/generators/facebook_scaffold/templates/view_index.html.erb +24 -0
- data/generators/facebook_scaffold/templates/view_new.fbml.erb +12 -0
- data/generators/facebook_scaffold/templates/view_new.html.erb +17 -0
- data/generators/facebook_scaffold/templates/view_show.fbml.erb +10 -0
- data/generators/facebook_scaffold/templates/view_show.html.erb +10 -0
- data/generators/publisher/publisher_generator.rb +14 -0
- data/generators/xd_receiver/templates/xd_receiver.html +10 -0
- data/generators/xd_receiver/templates/xd_receiver_ssl.html +10 -0
- data/generators/xd_receiver/xd_receiver_generator.rb +10 -0
- data/init.rb +26 -0
- data/install.rb +12 -0
- data/lib/facebooker.rb +261 -0
- data/lib/facebooker/adapters/adapter_base.rb +91 -0
- data/lib/facebooker/adapters/bebo_adapter.rb +77 -0
- data/lib/facebooker/adapters/facebook_adapter.rb +60 -0
- data/lib/facebooker/admin.rb +42 -0
- data/lib/facebooker/application.rb +37 -0
- data/lib/facebooker/attachment.rb +51 -0
- data/lib/facebooker/batch_request.rb +45 -0
- data/lib/facebooker/data.rb +57 -0
- data/lib/facebooker/feed.rb +78 -0
- data/lib/facebooker/logging.rb +44 -0
- data/lib/facebooker/mobile.rb +20 -0
- data/lib/facebooker/mock/service.rb +50 -0
- data/lib/facebooker/mock/session.rb +18 -0
- data/lib/facebooker/model.rb +139 -0
- data/lib/facebooker/models/affiliation.rb +10 -0
- data/lib/facebooker/models/album.rb +11 -0
- data/lib/facebooker/models/applicationproperties.rb +39 -0
- data/lib/facebooker/models/applicationrestrictions.rb +10 -0
- data/lib/facebooker/models/comment.rb +9 -0
- data/lib/facebooker/models/cookie.rb +10 -0
- data/lib/facebooker/models/education_info.rb +11 -0
- data/lib/facebooker/models/event.rb +28 -0
- data/lib/facebooker/models/family_relative_info.rb +7 -0
- data/lib/facebooker/models/friend_list.rb +16 -0
- data/lib/facebooker/models/group.rb +36 -0
- data/lib/facebooker/models/info_item.rb +10 -0
- data/lib/facebooker/models/info_section.rb +10 -0
- data/lib/facebooker/models/location.rb +8 -0
- data/lib/facebooker/models/message_thread.rb +89 -0
- data/lib/facebooker/models/notifications.rb +17 -0
- data/lib/facebooker/models/page.rb +46 -0
- data/lib/facebooker/models/photo.rb +19 -0
- data/lib/facebooker/models/tag.rb +12 -0
- data/lib/facebooker/models/user.rb +722 -0
- data/lib/facebooker/models/video.rb +9 -0
- data/lib/facebooker/models/work_info.rb +10 -0
- data/lib/facebooker/parser.rb +951 -0
- data/lib/facebooker/rails/backwards_compatible_param_checks.rb +31 -0
- data/lib/facebooker/rails/controller.rb +353 -0
- data/lib/facebooker/rails/cucumber.rb +28 -0
- data/lib/facebooker/rails/cucumber/world.rb +40 -0
- data/lib/facebooker/rails/extensions/action_controller.rb +48 -0
- data/lib/facebooker/rails/extensions/rack_setup.rb +16 -0
- data/lib/facebooker/rails/extensions/routing.rb +15 -0
- data/lib/facebooker/rails/facebook_form_builder.rb +141 -0
- data/lib/facebooker/rails/facebook_pretty_errors.rb +22 -0
- data/lib/facebooker/rails/facebook_request_fix.rb +28 -0
- data/lib/facebooker/rails/facebook_request_fix_2-3.rb +31 -0
- data/lib/facebooker/rails/facebook_session_handling.rb +68 -0
- data/lib/facebooker/rails/facebook_url_helper.rb +192 -0
- data/lib/facebooker/rails/facebook_url_rewriting.rb +61 -0
- data/lib/facebooker/rails/helpers.rb +835 -0
- data/lib/facebooker/rails/helpers/fb_connect.rb +161 -0
- data/lib/facebooker/rails/helpers/stream_publish.rb +22 -0
- data/lib/facebooker/rails/integration_session.rb +38 -0
- data/lib/facebooker/rails/profile_publisher_extensions.rb +42 -0
- data/lib/facebooker/rails/publisher.rb +600 -0
- data/lib/facebooker/rails/routing.rb +49 -0
- data/lib/facebooker/rails/test_helpers.rb +68 -0
- data/lib/facebooker/rails/utilities.rb +22 -0
- data/lib/facebooker/server_cache.rb +24 -0
- data/lib/facebooker/service.rb +103 -0
- data/lib/facebooker/service/base_service.rb +19 -0
- data/lib/facebooker/service/curl_service.rb +44 -0
- data/lib/facebooker/service/net_http_service.rb +12 -0
- data/lib/facebooker/service/typhoeus_multi_service.rb +27 -0
- data/lib/facebooker/service/typhoeus_service.rb +17 -0
- data/lib/facebooker/session.rb +771 -0
- data/lib/facebooker/stream_post.rb +19 -0
- data/lib/facebooker/version.rb +9 -0
- data/lib/net/http_multipart_post.rb +123 -0
- data/lib/rack/facebook.rb +89 -0
- data/lib/rack/facebook_session.rb +21 -0
- data/lib/tasks/facebooker.rake +19 -0
- data/lib/tasks/facebooker.rb +2 -0
- data/lib/tasks/tunnel.rake +46 -0
- data/rails/init.rb +1 -0
- data/setup.rb +1585 -0
- data/templates/layout.erb +24 -0
- data/test/facebooker/adapters_test.rb +191 -0
- data/test/facebooker/admin_test.rb +102 -0
- data/test/facebooker/application_test.rb +110 -0
- data/test/facebooker/attachment_test.rb +72 -0
- data/test/facebooker/batch_request_test.rb +83 -0
- data/test/facebooker/data_test.rb +86 -0
- data/test/facebooker/logging_test.rb +43 -0
- data/test/facebooker/mobile_test.rb +45 -0
- data/test/facebooker/model_test.rb +133 -0
- data/test/facebooker/models/event_test.rb +15 -0
- data/test/facebooker/models/page_test.rb +56 -0
- data/test/facebooker/models/photo_test.rb +16 -0
- data/test/facebooker/models/user_test.rb +1074 -0
- data/test/facebooker/rails/facebook_request_fix_2-3_test.rb +25 -0
- data/test/facebooker/rails/facebook_url_rewriting_test.rb +76 -0
- data/test/facebooker/rails/integration_session_test.rb +13 -0
- data/test/facebooker/rails/publisher_test.rb +532 -0
- data/test/facebooker/rails_integration_test.rb +1543 -0
- data/test/facebooker/server_cache_test.rb +44 -0
- data/test/facebooker/service_test.rb +58 -0
- data/test/facebooker/session_test.rb +883 -0
- data/test/facebooker_test.rb +1175 -0
- data/test/fixtures/multipart_post_body_with_only_parameters.txt +33 -0
- data/test/fixtures/multipart_post_body_with_single_file.txt +38 -0
- data/test/fixtures/multipart_post_body_with_single_file_that_has_nil_key.txt +38 -0
- data/test/net/http_multipart_post_test.rb +52 -0
- data/test/rack/facebook_session_test.rb +34 -0
- data/test/rack/facebook_test.rb +73 -0
- data/test/rails_test_helper.rb +36 -0
- data/test/test_helper.rb +74 -0
- metadata +289 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
module Facebooker
|
|
2
|
+
|
|
3
|
+
class AdapterBase
|
|
4
|
+
class UnableToLoadAdapter < Exception; end
|
|
5
|
+
require 'active_support/inflector'
|
|
6
|
+
include ActiveSupport::CoreExtensions::String::Inflections
|
|
7
|
+
def facebook_path_prefix
|
|
8
|
+
"/" + (@facebook_path_prefix || canvas_page_name || ENV['FACEBOOK_CANVAS_PATH'] || ENV['FACEBOOKER_RELATIVE_URL_ROOT'])
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def facebook_path_prefix=(prefix)
|
|
12
|
+
@facebook_path_prefix = prefix
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def facebooker_config
|
|
16
|
+
@config
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def api_server_base_url
|
|
20
|
+
"http://" + api_server_base
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def is_for?(application_context)
|
|
24
|
+
raise "SubClassShouldDefine"
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def initialize(config)
|
|
28
|
+
@config = config
|
|
29
|
+
@facebook_path_prefix = nil
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def self.facebooker_config
|
|
33
|
+
Facebooker.facebooker_config
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def self.load_adapter(params)
|
|
38
|
+
|
|
39
|
+
config_key_base = params[:config_key_base] # This allows for loading of a aspecific adapter
|
|
40
|
+
config_key_base += "_" if config_key_base && config_key_base.length > 0
|
|
41
|
+
|
|
42
|
+
unless api_key = (params[:fb_sig_api_key] || facebooker_config["#{config_key_base}api_key"])
|
|
43
|
+
raise Facebooker::AdapterBase::UnableToLoadAdapter
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
unless facebooker_config
|
|
47
|
+
return self.default_adapter(params)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
facebooker_config.each do |key,value|
|
|
51
|
+
next unless value == api_key
|
|
52
|
+
|
|
53
|
+
key_base = key.match(/(.*)[_]?api_key/)[1]
|
|
54
|
+
|
|
55
|
+
adapter_class_name = if !key_base || key_base.length == 0
|
|
56
|
+
"FacebookAdapter"
|
|
57
|
+
else
|
|
58
|
+
facebooker_config[key_base + "adapter"]
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
adapter_class = "Facebooker::#{adapter_class_name}".constantize
|
|
62
|
+
|
|
63
|
+
# Collect the rest of the configuration
|
|
64
|
+
adapter_config = {}
|
|
65
|
+
facebooker_config.each do |key,value|
|
|
66
|
+
if (match = key.match(/#{key_base}[_]?(.*)/))
|
|
67
|
+
adapter_config[match[1]] = value
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
return adapter_class.new(adapter_config)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
return self.default_adapter(params)
|
|
74
|
+
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def self.default_adapter(params = {})
|
|
78
|
+
if facebooker_config.nil? || (facebooker_config.blank? rescue nil)
|
|
79
|
+
config = { "api_key" => ENV['FACEBOOK_API_KEY'], "secret_key" => ENV['FACEBOOK_SECRET_KEY']}
|
|
80
|
+
else
|
|
81
|
+
config = facebooker_config
|
|
82
|
+
end
|
|
83
|
+
FacebookAdapter.new(config)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
[:canvas_page_name, :api_key,:secret_key].each do |key_method|
|
|
87
|
+
define_method(key_method){ return facebooker_config[key_method.to_s]}
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
end
|
|
91
|
+
end
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
module Facebooker
|
|
2
|
+
class BeboAdapter < AdapterBase
|
|
3
|
+
|
|
4
|
+
def canvas_server_base
|
|
5
|
+
"apps.bebo.com"
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def api_server_base
|
|
9
|
+
'apps.bebo.com'
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def api_rest_path
|
|
13
|
+
"/restserver.php"
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def is_for?(application_context)
|
|
17
|
+
application_context == :bebo
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def www_server_base_url
|
|
21
|
+
"www.bebo.com"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def login_url_base
|
|
26
|
+
"http://#{www_server_base_url}/SignIn.jsp?ApiKey=#{api_key}&v=1.0"
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def install_url_base
|
|
30
|
+
"http://#{www_server_base_url}/c/apps/add?ApiKey=#{api_key}&v=1.0"
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Things that don't actually work as expected in BEBO
|
|
36
|
+
module Facebooker
|
|
37
|
+
class User
|
|
38
|
+
def set_profile_fbml_with_bebo_adapter(profile_fbml, mobile_fbml, profile_action_fbml, profile_main = nil)
|
|
39
|
+
if(Facebooker.is_for?(:bebo))
|
|
40
|
+
self.session.post('facebook.profile.setFBML', :uid => @id, :markup => profile_fbml)
|
|
41
|
+
else
|
|
42
|
+
set_profile_fbml_without_bebo_adapter(profile_fbml,mobile_fbml, profile_action_fbml, profile_main)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
alias_method :set_profile_fbml_without_bebo_adapter, :set_profile_fbml
|
|
46
|
+
alias_method :set_profile_fbml, :set_profile_fbml_with_bebo_adapter
|
|
47
|
+
|
|
48
|
+
private
|
|
49
|
+
|
|
50
|
+
BEBO_FIELDS = FIELDS - [:meeting_sex, :wall_count, :meeting_for]
|
|
51
|
+
|
|
52
|
+
remove_method :collect
|
|
53
|
+
|
|
54
|
+
def collect(fields)
|
|
55
|
+
if(Facebooker.is_for?(:bebo) )
|
|
56
|
+
BEBO_FIELDS.reject{|field_name| !fields.empty? && !fields.include?(field_name)}.join(',')
|
|
57
|
+
else
|
|
58
|
+
FIELDS.reject{|field_name| !fields.empty? && !fields.include?(field_name)}.join(',')
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
class PublishTemplatizedAction < Parser#:nodoc:
|
|
65
|
+
class <<self
|
|
66
|
+
def process_with_bebo_adapter(data)
|
|
67
|
+
if(Facebooker.is_for?(:bebo))
|
|
68
|
+
element('feed_publishTemplatizedAction_response', data).content
|
|
69
|
+
else
|
|
70
|
+
process_without_bebo_adapter(data)
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
alias_method :process_without_bebo_adapter, :process
|
|
74
|
+
alias_method :process, :process_with_bebo_adapter
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
module Facebooker
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class FacebookAdapter < AdapterBase
|
|
5
|
+
|
|
6
|
+
def canvas_server_base
|
|
7
|
+
"apps.facebook.com"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def api_server_base
|
|
11
|
+
"api.facebook.com"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def video_server_base
|
|
15
|
+
"api-video.facebook.com"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def www_server_base_url
|
|
19
|
+
"www.facebook.com"
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def api_rest_path
|
|
23
|
+
"/restserver.php"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def api_key
|
|
27
|
+
ENV['FACEBOOK_API_KEY'] || super
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def secret_key
|
|
31
|
+
ENV['FACEBOOK_SECRET_KEY'] || super
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def is_for?(application_context)
|
|
35
|
+
application_context == :facebook
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def login_url_base
|
|
41
|
+
"http://#{www_server_base_url}/login.php?api_key=#{api_key}&v=1.0"
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def install_url_base
|
|
45
|
+
"http://#{www_server_base_url}/install.php?api_key=#{api_key}&v=1.0"
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def connect_permission_url_base
|
|
49
|
+
"http://#{www_server_base_url}/connect/prompt_permissions.php?api_key=#{api_key}&v=1.0"
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def permission_url_base
|
|
53
|
+
"http://#{www_server_base_url}/authorize.php?api_key=#{api_key}&v=1.0"
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
module Facebooker
|
|
2
|
+
class Admin
|
|
3
|
+
def initialize(session)
|
|
4
|
+
@session = session
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
# ** BETA ***
|
|
8
|
+
# +properties+: Hash of properties you want to set
|
|
9
|
+
def set_app_properties(properties)
|
|
10
|
+
properties = properties.respond_to?(:to_json) ? properties.to_json : properties
|
|
11
|
+
(@session.post 'facebook.admin.setAppProperties', :properties => properties) == '1'
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# ** BETA ***
|
|
15
|
+
# +properties+: Hash of properties you want to view.
|
|
16
|
+
def get_app_properties(*properties)
|
|
17
|
+
json = @session.post('facebook.admin.getAppProperties', :properties => properties.to_json)
|
|
18
|
+
hash = Facebooker.json_decode(CGI.unescapeHTML(json))
|
|
19
|
+
@properties = ApplicationProperties.from_hash(hash)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# ** BETA ***
|
|
23
|
+
# +restrictions+: Hash of restrictions you want to set.
|
|
24
|
+
def set_restriction_info(restrictions)
|
|
25
|
+
restrictions = restrictions.respond_to?(:to_json) ? restrictions.to_json : restrictions
|
|
26
|
+
(@session.post 'facebook.admin.setRestrictionInfo', :restriction_str => restrictions) == '1'
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# ** BETA ***
|
|
30
|
+
def get_restriction_info(*restrictions)
|
|
31
|
+
json = @session.post('facebook.admin.getRestrictionInfo')
|
|
32
|
+
hash = Facebooker.json_decode(CGI.unescapeHTML(json))
|
|
33
|
+
@restrictions = ApplicationRestrictions.from_hash(hash)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Integration points include..
|
|
37
|
+
# :notifications_per_day, :requests_per_day, :emails_per_day, :email_disable_message_location
|
|
38
|
+
def get_allocation(integration_point)
|
|
39
|
+
@session.post('facebook.admin.getAllocation', :integration_point_name => integration_point.to_s).to_i
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
module Facebooker
|
|
2
|
+
class Application
|
|
3
|
+
def initialize(session)
|
|
4
|
+
@session = session
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
# +properties+: Hash of properties of the desired application. Specify exactly one of: application_id, application_api_key or application_canvas_name
|
|
8
|
+
# eg: application.get_public_info(:application_canvas_name => ENV['FACEBOOKER_RELATIVE_URL_ROOT'])
|
|
9
|
+
def get_public_info(properties)
|
|
10
|
+
(@session.post 'facebook.application.getPublicInfo', properties)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# facebook_session.application.add_global_news [{ :message => 'Hi all users', :action_link => { :text => "Hi application", :href => 'http://facebook.er/' }}], 'http://facebook.er/icon.png'
|
|
14
|
+
def add_global_news(news, image=nil)
|
|
15
|
+
params = {}
|
|
16
|
+
params[:news] = news
|
|
17
|
+
params[:image] = image if image
|
|
18
|
+
@session.post('facebook.dashboard.addGlobalNews', params)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# currently bugged on Facebook; returns all
|
|
22
|
+
# facebook_session.application.get_global_news '310354202543'
|
|
23
|
+
def get_global_news(*news_ids)
|
|
24
|
+
params = {}
|
|
25
|
+
params[:news_ids] = news_ids.flatten if news_ids
|
|
26
|
+
@session.post('facebook.dashboard.getGlobalNews', params)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# facebook_session.application.clear_global_news '310354202543'
|
|
30
|
+
def clear_global_news(*news_ids)
|
|
31
|
+
params = {}
|
|
32
|
+
params[:news_ids] = news_ids.flatten if news_ids
|
|
33
|
+
@session.post('facebook.dashboard.clearGlobalNews', params)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
class Facebooker::Attachment
|
|
2
|
+
|
|
3
|
+
def initialize
|
|
4
|
+
@storage = {}
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def self.hash_populating_accessor(*names)
|
|
8
|
+
names.each do |name|
|
|
9
|
+
define_method(name) do
|
|
10
|
+
@storage[name]
|
|
11
|
+
end
|
|
12
|
+
define_method("#{name}=") do |val|
|
|
13
|
+
@storage[name]=val
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
hash_populating_accessor :name,:href, :comments_xid, :description, :caption
|
|
19
|
+
|
|
20
|
+
def add_media(hash)
|
|
21
|
+
@storage[:media]||=[]
|
|
22
|
+
@storage[:media] << hash
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def add_image(source,href)
|
|
26
|
+
add_media({:type=>"image",:src=>source,:href=>href})
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def add_mp3(source,title=nil,artist=nil,album=nil)
|
|
30
|
+
params = {:src=>source,:type=>"mp3"}
|
|
31
|
+
params[:title] = title unless title.nil?
|
|
32
|
+
params[:artist] = artist unless artist.nil?
|
|
33
|
+
params[:album] = album unless album.nil?
|
|
34
|
+
add_media(params)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def add_flash(swfsource, imgsource, width=nil, height=nil, expanded_width=nil, expanded_height=nil)
|
|
38
|
+
params={:type=>"flash",:swfsrc=>swfsource,:imgsrc=>imgsource}
|
|
39
|
+
params[:width] = width unless width.nil?
|
|
40
|
+
params[:height] = height unless height.nil?
|
|
41
|
+
params[:expanded_width] = expanded_width unless expanded_width.nil?
|
|
42
|
+
params[:expanded_height] = expanded_height unless expanded_height.nil?
|
|
43
|
+
add_media(params)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def to_hash
|
|
47
|
+
@storage
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
module Facebooker
|
|
2
|
+
class BatchRequest
|
|
3
|
+
instance_methods.each { |m| undef_method m unless m =~ /(^__|^nil\?$|^send$|proxy_|^respond_to\?$|^new|object_id$)/ }
|
|
4
|
+
attr_reader :uri
|
|
5
|
+
attr_reader :method
|
|
6
|
+
class UnexecutedRequest < StandardError; end
|
|
7
|
+
def initialize(params,proc)
|
|
8
|
+
@exception = nil
|
|
9
|
+
@result = nil
|
|
10
|
+
@method = params[:method]
|
|
11
|
+
@uri = params.map{|k,v| "#{k}=#{CGI.escape(v.to_s)}"}.join("&")
|
|
12
|
+
@proc = proc
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def result=(result_object)
|
|
16
|
+
@result = @proc.nil? ? result_object : @proc.call(result_object)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def exception_raised=(ex)
|
|
20
|
+
@exception=ex
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def exception_raised?
|
|
24
|
+
@exception.nil? ? false : raise(@exception)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def respond_to?(name)
|
|
28
|
+
super || @result.respond_to?(name)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def ===(other)
|
|
32
|
+
other === @result
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def method_missing(name,*args,&proc)
|
|
36
|
+
if @exception
|
|
37
|
+
raise @exception
|
|
38
|
+
elsif @result.nil?
|
|
39
|
+
raise UnexecutedRequest.new("You must execute the batch before accessing the result: #{@uri}")
|
|
40
|
+
else
|
|
41
|
+
@result.send(name,*args,&proc)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
module Facebooker
|
|
2
|
+
class Data
|
|
3
|
+
def initialize(session)
|
|
4
|
+
@session = session
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
##
|
|
8
|
+
# ** BETA ***
|
|
9
|
+
# Sets a cookie on Facebook
|
|
10
|
+
# +user+ The user for whom this cookie needs to be set.
|
|
11
|
+
# +name+ Name of the cookie
|
|
12
|
+
# +value+ Value of the cookie
|
|
13
|
+
# Optional:
|
|
14
|
+
# +expires+ Time when the cookie should expire. If not specified, the cookie never expires.
|
|
15
|
+
# +path+ Path relative to the application's callback URL, with which the cookie should be associated. (default value is /?
|
|
16
|
+
def set_cookie(user, name, value, expires=nil, path=nil)
|
|
17
|
+
@session.post('facebook.data.setCookie',
|
|
18
|
+
:uid => User.cast_to_facebook_id(user),
|
|
19
|
+
:name => name,
|
|
20
|
+
:value => value,
|
|
21
|
+
:expires => expires,
|
|
22
|
+
:path => path) {|response| response == '1'}
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
##
|
|
26
|
+
# ** BETA ***
|
|
27
|
+
# Gets a cookie stored on Facebook
|
|
28
|
+
# +user+ The user from whom to get the cookies.
|
|
29
|
+
# Optional:
|
|
30
|
+
# +name+ The name of the cookie. If not specified, all the cookies for the given user get returned.
|
|
31
|
+
def get_cookies(user, name=nil)
|
|
32
|
+
@cookies = @session.post(
|
|
33
|
+
'facebook.data.getCookies', :uid => User.cast_to_facebook_id(user), :name => name) do |response|
|
|
34
|
+
response.map do |hash|
|
|
35
|
+
Cookie.from_hash(hash)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
##
|
|
41
|
+
# ** BETA ***
|
|
42
|
+
# Gets a preference stored on Facebook
|
|
43
|
+
# +pref_id+ The id of the preference to get
|
|
44
|
+
def get_preference(pref_id)
|
|
45
|
+
@session.post('facebook.data.getUserPreference', :pref_id=>pref_id)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
##
|
|
49
|
+
# ** BETA ***
|
|
50
|
+
# Sets a preference on Facebook
|
|
51
|
+
# +pref_id+ The id of the preference to set
|
|
52
|
+
# +value+ The value to set for this preference
|
|
53
|
+
def set_preference(pref_id, value)
|
|
54
|
+
@session.post('facebook.data.setUserPreference', :pref_id=>pref_id, :value=>value)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|