facebook_graph_api 0.0.5

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.
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: []