facebook-graphclient 0.2 → 0.3
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/facebook-graphclient.gemspec +2 -2
- data/lib/facebook-graphclient.rb +65 -5
- metadata +15 -4
@@ -1,7 +1,7 @@
|
|
1
1
|
spec = Gem::Specification.new do |s|
|
2
2
|
s.name = 'facebook-graphclient'
|
3
|
-
s.version = '0.
|
4
|
-
s.date = '2010-
|
3
|
+
s.version = '0.3'
|
4
|
+
s.date = '2010-12-12'
|
5
5
|
s.summary = "A simple library for Facebook's new Graph API"
|
6
6
|
s.description = "A bare-bones implementation of Facebook's new Graph API"
|
7
7
|
|
data/lib/facebook-graphclient.rb
CHANGED
@@ -9,6 +9,7 @@ require 'rack'
|
|
9
9
|
|
10
10
|
module Facebook
|
11
11
|
GRAPH_URL = 'https://graph.facebook.com'
|
12
|
+
API_URL = 'https://api.facebook.com/method/'
|
12
13
|
|
13
14
|
class GraphClient
|
14
15
|
|
@@ -21,14 +22,13 @@ module Facebook
|
|
21
22
|
@secret = facebook_settings[:secret]
|
22
23
|
|
23
24
|
@cookie = get_user_cookie facebook_settings[:cookies]
|
24
|
-
|
25
25
|
@access_token = facebook_settings[:access_token] || @cookie['access_token']
|
26
|
-
|
27
26
|
@session = Patron::Session.new
|
28
27
|
end
|
29
28
|
|
30
29
|
def get_user_cookie cookies
|
31
30
|
if cookies and cookie = cookies["fbs_#{@app_id}"]
|
31
|
+
cookie = cookie[1..-2] if cookie[0..0] == '"'
|
32
32
|
Rack::Utils.parse_nested_query(cookie)
|
33
33
|
else
|
34
34
|
{}
|
@@ -43,10 +43,10 @@ module Facebook
|
|
43
43
|
]
|
44
44
|
end
|
45
45
|
|
46
|
-
def api action, method, query_params =
|
46
|
+
def api action, method, query_params = {}
|
47
47
|
query_params[:access_token] ||= @access_token
|
48
|
-
|
49
48
|
query_string = '?' + query_params.map { |k,v| "#{k}=#{v}" }.join("&") unless query_params.empty?
|
49
|
+
query_string ||= ''
|
50
50
|
|
51
51
|
tries = 0
|
52
52
|
begin
|
@@ -105,7 +105,7 @@ module Facebook
|
|
105
105
|
def valid?
|
106
106
|
return false if @cookie.nil?
|
107
107
|
|
108
|
-
|
108
|
+
if @is_valid.nil?
|
109
109
|
vars = @cookie.dup
|
110
110
|
|
111
111
|
good_sig = vars.delete 'sig'
|
@@ -128,5 +128,65 @@ module Facebook
|
|
128
128
|
def params
|
129
129
|
valid? ? @params : {}
|
130
130
|
end
|
131
|
+
|
132
|
+
def rest(method, opts = {})
|
133
|
+
if method == 'photos.upload'
|
134
|
+
image = opts.delete :image
|
135
|
+
end
|
136
|
+
|
137
|
+
opts = { :api_key => self.api_key,
|
138
|
+
:call_id => Time.now.to_f,
|
139
|
+
:format => 'JSON',
|
140
|
+
:v => '1.0',
|
141
|
+
:access_token => @access_token,
|
142
|
+
:session_key => %w[ photos.upload ].include?(method) ? nil : params[:session_key],
|
143
|
+
:method => method }.merge(opts)
|
144
|
+
|
145
|
+
args = opts.map{ |k,v|
|
146
|
+
next nil unless v
|
147
|
+
|
148
|
+
"#{k}=" + case v
|
149
|
+
when Hash
|
150
|
+
Yajl::Encoder.encode(v)
|
151
|
+
when Array
|
152
|
+
if k == :tags
|
153
|
+
Yajl::Encoder.encode(v)
|
154
|
+
else
|
155
|
+
v.join(',')
|
156
|
+
end
|
157
|
+
else
|
158
|
+
v.to_s
|
159
|
+
end
|
160
|
+
}.compact.sort
|
161
|
+
|
162
|
+
sig = Digest::MD5.hexdigest(args.join+self.secret)
|
163
|
+
|
164
|
+
if method == 'photos.upload'
|
165
|
+
data = MimeBoundary
|
166
|
+
data += opts.merge(:sig => sig).inject('') do |buf, (key, val)|
|
167
|
+
if val
|
168
|
+
buf << (MimePart % [key, val])
|
169
|
+
else
|
170
|
+
buf
|
171
|
+
end
|
172
|
+
end
|
173
|
+
data += MimeImage % ['upload.jpg', 'jpg', image.respond_to?(:read) ? image.read : image]
|
174
|
+
else
|
175
|
+
data = Array["sig=#{sig}", *args.map{|a| a.gsub('&','%26').gsub('+','%2B') }].join('&')
|
176
|
+
end
|
177
|
+
|
178
|
+
raw_response = @session.post(API_URL + method, data)
|
179
|
+
|
180
|
+
json = ["false", '', nil].include?(raw_response.body) ? '{}' : raw_response.body
|
181
|
+
response = Yajl::Parser.parse(json)
|
182
|
+
|
183
|
+
if response.is_a?(Hash) and response.has_key?('error_code')
|
184
|
+
error = FacebookError.new(response['error_msg'])
|
185
|
+
error.data = response
|
186
|
+
raise error
|
187
|
+
else
|
188
|
+
response
|
189
|
+
end
|
190
|
+
end
|
131
191
|
end
|
132
192
|
end
|
metadata
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: facebook-graphclient
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 13
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
7
|
- 0
|
7
|
-
-
|
8
|
-
version: "0.
|
8
|
+
- 3
|
9
|
+
version: "0.3"
|
9
10
|
platform: ruby
|
10
11
|
authors:
|
11
12
|
- Jesse Farmer
|
@@ -13,16 +14,18 @@ autorequire:
|
|
13
14
|
bindir: bin
|
14
15
|
cert_chain: []
|
15
16
|
|
16
|
-
date: 2010-
|
17
|
+
date: 2010-12-12 00:00:00 -08:00
|
17
18
|
default_executable:
|
18
19
|
dependencies:
|
19
20
|
- !ruby/object:Gem::Dependency
|
20
21
|
name: yajl-ruby
|
21
22
|
prerelease: false
|
22
23
|
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
23
25
|
requirements:
|
24
26
|
- - ">="
|
25
27
|
- !ruby/object:Gem::Version
|
28
|
+
hash: 3
|
26
29
|
segments:
|
27
30
|
- 0
|
28
31
|
version: "0"
|
@@ -32,9 +35,11 @@ dependencies:
|
|
32
35
|
name: patron
|
33
36
|
prerelease: false
|
34
37
|
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
none: false
|
35
39
|
requirements:
|
36
40
|
- - ">="
|
37
41
|
- !ruby/object:Gem::Version
|
42
|
+
hash: 3
|
38
43
|
segments:
|
39
44
|
- 0
|
40
45
|
version: "0"
|
@@ -44,9 +49,11 @@ dependencies:
|
|
44
49
|
name: rack
|
45
50
|
prerelease: false
|
46
51
|
requirement: &id003 !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
47
53
|
requirements:
|
48
54
|
- - ">="
|
49
55
|
- !ruby/object:Gem::Version
|
56
|
+
hash: 3
|
50
57
|
segments:
|
51
58
|
- 0
|
52
59
|
version: "0"
|
@@ -75,23 +82,27 @@ rdoc_options: []
|
|
75
82
|
require_paths:
|
76
83
|
- lib
|
77
84
|
required_ruby_version: !ruby/object:Gem::Requirement
|
85
|
+
none: false
|
78
86
|
requirements:
|
79
87
|
- - ">="
|
80
88
|
- !ruby/object:Gem::Version
|
89
|
+
hash: 3
|
81
90
|
segments:
|
82
91
|
- 0
|
83
92
|
version: "0"
|
84
93
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
85
95
|
requirements:
|
86
96
|
- - ">="
|
87
97
|
- !ruby/object:Gem::Version
|
98
|
+
hash: 3
|
88
99
|
segments:
|
89
100
|
- 0
|
90
101
|
version: "0"
|
91
102
|
requirements: []
|
92
103
|
|
93
104
|
rubyforge_project:
|
94
|
-
rubygems_version: 1.3.
|
105
|
+
rubygems_version: 1.3.7
|
95
106
|
signing_key:
|
96
107
|
specification_version: 3
|
97
108
|
summary: A simple library for Facebook's new Graph API
|