Так что я не смог заставить fb_graph работать должным образом - я все еще нуб, поскольку был разработчиком Ruby On Rails в общей сложности около 8-10 недель, и поэтому у меня нет чутья на то, что должно быть очевидными проблемами. другие люди.
Однако я нашел этот замечательный небольшой пост в блоге, в котором описывается простой клиент facebook и ясно показано, как все это подключается друг к другу. Я обнаружил проблему с получением объекта me/picture, поскольку Facebook возвращает http302, а не http200, но это было легко обойти с помощью автора. Проверьте это: http://bnerd.de/misc/ruby-write-basic-client-for-facebook-graph-api/
Теперь я использую Omniauth для простоты взаимодействия входа/регистрации на основе этого пошагового руководства здесь: blog.railsrumble.com/blog/2010/10/08/intridea-omniauth и с токеном, который я получаю от этого, я использую этот простой FBClient из ссылки bnerd выше, чтобы получить доступ к Graph API. Надеюсь, то, что я нашел, поможет другим.
... вот моя версия кода bnerd, и она у меня сработала:
class FBClient
def initialize(app, access_token = nil)
@app = app
@access_token = access_token
end
# request permission(s) from user
def request(perms)
#create a random verifier to identify user on fb callback
verifier = (0...10).map{65.+(rand(25)).chr}.join
uri = "https://graph.facebook.com/oauth/authorize?client_id=#{@app.app_id}&redirect_uri=#{@app.connect_url}?verifier=#{verifier}&scope=#{perms}"
request = { :verifier => verifier, :uri => uri }
return request
end
def connect(code, verifier)
uri = URI.parse("https://graph.facebook.com/oauth/access_token?client_id=#{@app.app_id}&redirect_uri=#{@app.connect_url}?verifier=#{verifier}&client_secret=#{@app.secret}&code=#{CGI::escape(code)}")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri.path + "?" + uri.query)
response = http.request(request)
data = response.body
return data.split("=")[1]
end
# get, post
def get(path, params = nil)
uri = URI.parse("https://graph.facebook.com/" + path)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
if params.nil?
params = Hash.new
end
if params["access_token"].nil?
params["access_token"] = @access_token unless @access_token.nil?
end
request = Net::HTTP::Get.new(uri.path)
request.set_form_data( params )
request = Net::HTTP::Get.new(uri.path + "?" + request.body)
return response = http.request(request)
end
def post(path, params = nil)
uri = URI.parse("https://graph.facebook.com/" + path)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
if params.nil?
params = Hash.new
end
if params[:access_token].nil?
params[:access_token] = @access_token unless @access_token.nil?
end
request = Net::HTTP::Post.new(uri.path)
request.set_form_data( params )
request = Net::HTTP::Post.new(uri.path + "?" + request.body)
response = http.request(request)
response.code == "200" ? feed = JSON.parse(response.body) : raise("Sorry, an error occured. #{response.body}")
return feed
end
end
Я уверен, что кто-то более опытный, чем я, мог бы улучшить это - я изучал Ruby около 10 недель (и мое первое программирование после Fortran и Pascal в университете в начале 90-х!).
person
Richard Jordan
schedule
26.10.2010