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.
- data/lib/facebook_graph_api.rb +132 -0
- 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: []
|