facebook_graph_api 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/facebook_graph_api.rb +132 -0
  2. metadata +61 -0
@@ -0,0 +1,132 @@
1
+ require 'mechanize'
2
+
3
+ class FacebookGraphAPI
4
+ @graph_url = nil
5
+ @access_token = nil
6
+ @feed = nil
7
+ @account_info = nil
8
+
9
+ def initialize(access_token)
10
+ @graph_url = 'https://graph.facebook.com'
11
+ @access_token = access_token
12
+ if @access_token.blank? && !Rails.nil?
13
+ Rails.logger.info 'An access token is required for this class to work'
14
+ end
15
+ end
16
+
17
+ def get_account_info
18
+ @account_info ||= get_request('/me')
19
+ end
20
+
21
+ def get_feed
22
+ @feed ||= get_request('/me/feed')
23
+ # I have no idea why sometimes it uses the data index and sometimes it doesn't....
24
+ begin
25
+ return @feed['data']
26
+ rescue
27
+ return @feed
28
+ end
29
+ end
30
+
31
+ def post_status(message)
32
+ post_request('/me/feed', {message: message})
33
+ end
34
+
35
+ def post_picture(picture_path, message, post_to_feed=true)
36
+ File.open(picture_path.to_s.gsub('%20', '\ ').gsub('(', '\(').gsub(')', '\)'), 'rb') do |binary_image|
37
+ if post_to_feed
38
+ post_request('/me/photos', {source: binary_image, message: message})
39
+ else
40
+ post_request('/me/photos', {source: binary_image, message: message, no_story: 'true'})
41
+ end
42
+ end
43
+ end
44
+
45
+ def set_as_cover_image(picture_id)
46
+ post_request('/me', {cover: picture_id, no_feed_story: 'true'})
47
+ end
48
+
49
+ def post_link(link, message)
50
+ post_request('/me/feed', {link: link, message: message})
51
+ end
52
+
53
+ def reply_to_status(status_id, message)
54
+ post_request('/' + status_id + '/comments', {message: message})
55
+ end
56
+
57
+ def delete_status(status_id)
58
+ delete_request('/' + status_id)
59
+ end
60
+
61
+ def get_statuses
62
+ @statuses ||= get_request('/me/statuses')
63
+ end
64
+
65
+ def get_insights
66
+ @insights ||= get_request('/me/insights')
67
+ begin
68
+ return @insights['data']
69
+ rescue
70
+ return @insights
71
+ end
72
+ end
73
+
74
+ # Fql cannot be cached since it might be used more than once to gather different data
75
+ # without creating a new facebook api class
76
+ def get_fql(fql)
77
+ get_request('/fql?q=' + CGI.escape(fql))['data']
78
+ end
79
+
80
+ def get_pages
81
+ @page ||= get_request('/me/accounts')['data']
82
+ end
83
+
84
+ private
85
+ def get_request(end_point)
86
+ execute_request(end_point, 'get')
87
+ end
88
+
89
+ def post_request(end_point, parameters)
90
+ execute_request(end_point, 'post', parameters)
91
+ end
92
+
93
+ def delete_request(end_point)
94
+ execute_request(end_point, 'delete')
95
+ end
96
+
97
+ def execute_request(end_point, method, parameters = {})
98
+ begin
99
+ agent = Mechanize.new
100
+ if end_point.include? '?'
101
+ url = @graph_url + end_point + '&access_token=' + @access_token
102
+ else
103
+ url = @graph_url + end_point + '?access_token=' + @access_token
104
+ end
105
+ if method == 'get'
106
+ response = agent.get(url)
107
+ elsif method == 'delete'
108
+ response = agent.get(url + '&method=delete')
109
+ elsif method == 'post'
110
+ response = agent.post(url, parameters)
111
+ end
112
+ if !Rails.nil?
113
+ # Echo the response if we are in development mode
114
+ if Rails.env.development?
115
+ Rails.logger.info 'FB: ' + method.capitalize + end_point
116
+ # Rails.logger.info 'FB Response: ' + response.body
117
+ end
118
+ end
119
+ return (JSON.parse response.body)
120
+ rescue Exception => e
121
+ if !Rails.nil?
122
+ if !(method == 'post')
123
+ Rails.logger.info 'FB: Error executing ' + method + ' request for "' + end_point + '"'
124
+ else
125
+ Rails.logger.info 'FB: Error executing ' + method + ' request for "' + end_point + '" with parameters: ' + parameters.inspect
126
+ end
127
+ Rails.logger.info 'Raw exception: ' + e.message
128
+ end
129
+ return []
130
+ end
131
+ end
132
+ end
metadata ADDED
@@ -0,0 +1,61 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: facebook_graph_api
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.5
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Brennon Loveless
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-06-15 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: mechanize
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '2.3'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '2.3'
30
+ description: A quick simple api to work with the facebook graph api
31
+ email: brennon@fritzandandre.com
32
+ executables: []
33
+ extensions: []
34
+ extra_rdoc_files: []
35
+ files:
36
+ - lib/facebook_graph_api.rb
37
+ homepage: http://rubygems.org/gems/facebook_graph_api
38
+ licenses: []
39
+ post_install_message:
40
+ rdoc_options: []
41
+ require_paths:
42
+ - lib
43
+ required_ruby_version: !ruby/object:Gem::Requirement
44
+ none: false
45
+ requirements:
46
+ - - ! '>='
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ required_rubygems_version: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ requirements: []
56
+ rubyforge_project:
57
+ rubygems_version: 1.8.24
58
+ signing_key:
59
+ specification_version: 3
60
+ summary: Oh my simple facebook graph api
61
+ test_files: []