In reference to:
http://rubydoc.info/github/arsduo/koala/master/Koala/Facebook/GraphAPIMethods#graph_call-instance_method
http://developers.facebook.com/roadmap/offline-access-removal/#extend_token
My code looks something like this:
fb = Koala::Facebook::API.new(access_token)
fb.graph_call("/oauth/access_token", {"client_id" => app_id, "client_secret" => app_secret, "grant_type" => "fb_exchange_token", "fb_exchange_token" => access_token })
Although the return value contains the extended token but it is throwing MultiJson::DecodeError
MultiJson::DecodeError: 387: unexpected token at 'access_token=long-lived_token&expires=5184000]'
from /usr/local/rvm/gems/ruby-1.9.2-p136@dotcloud/gems/json-1.6.1/lib/json/common.rb:148:in `parse'
from /usr/local/rvm/gems/ruby-1.9.2-p136@dotcloud/gems/json-1.6.1/lib/json/common.rb:148:in `parse'
from /usr/local/rvm/gems/ruby-1.9.2-p136@dotcloud/gems/multi_json-1.0.3/lib/multi_json/engines/json_gem.rb:13:in `decode'
from /usr/local/rvm/gems/ruby-1.9.2-p136@dotcloud/gems/multi_json-1.0.3/lib/multi_json.rb:65:in `decode'
from /usr/local/rvm/gems/ruby-1.9.2-p136@dotcloud/gems/koala-1.3.0/lib/koala/api.rb:61:in `api'
from /usr/local/rvm/gems/ruby-1.9.2-p136@dotcloud/gems/koala-1.3.0/lib/koala/api/graph_api.rb:421:in `graph_call'
from (irb):7
from /usr/local/rvm/gems/ruby-1.9.2-p136@dotcloud/gems/railties-3.1.3/lib/rails/commands/console.rb:45:in `start'
from /usr/local/rvm/gems/ruby-1.9.2-p136@dotcloud/gems/railties-3.1.3/lib/rails/commands/console.rb:8:in `start'
from /usr/local/rvm/gems/ruby-1.9.2-p136@dotcloud/gems/railties-3.1.3/lib/rails/commands.rb:40:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'
I suspect the ending ]
that is causing the error. Not sure if this is a Facebook error or mis-handling on my part. Appreciate if someone could help me out. Thank!
I also tried using Net::HTTP.get(uri) instead. But got the below error.
Errno::ECONNRESET: Connection reset by peer
from /usr/local/rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/protocol.rb:135:in `read_nonblock'
from /usr/local/rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/protocol.rb:135:in `rbuf_fill'
from /usr/local/rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/protocol.rb:116:in `readuntil'
from /usr/local/rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/protocol.rb:126:in `readline'
from /usr/local/rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:2211:in `read_status_line'
from /usr/local/rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:2200:in `read_new'
from /usr/local/rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:1183:in `transport_request'
from /usr/local/rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:1169:in `request'
from /usr/local/rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:1073:in `request_get'
from /usr/local/rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:394:in `block in get_response'
from /usr/local/rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:627:in `start'
from /usr/local/rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:393:in `get_response'
from /usr/local/rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/net/http.rb:370:in `get'
from (irb):11
from /usr/local/rvm/gems/ruby-1.9.2-p136@dotcloud/gems/railties-3.1.3/lib/rails/commands/console.rb:45:in `start'
from /usr/local/rvm/gems/ruby-1.9.2-p136@dotcloud/gems/railties-3.1.3/lib/rails/commands/console.rb:8:in `start'
from /usr/local/rvm/gems/ruby-1.9.2-p136@dotcloud/gems/railties-3.1.3/lib/rails/commands.rb:40:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'
Not sure if it's a firewall or something?
Use the OAuth exchange_access_token_info
method:
oauth = Koala::Facebook::OAuth.new("consumer_token", "consumer_secret")
oauth.exchange_access_token_info("auth_token")
P.S. I also got the error you did doing it your way. The problem is that Koala expects the body of the response to be in JSON format, but in this special case it's actually name/value pairs in URL (query string) format, e.g.:
access_token=[...]&expires=[...]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With