获得Facebook页面评级

时间:2014-05-17 16:24:17

标签: ruby-on-rails ruby facebook

我希望将公开的Facebook页面评级转换为Ruby on Rails应用程序。

基本上我要做的是运行rake任务作为cron作业,在一个特定的Facebook页面上寻找新的评论(我需要的页面不会改变)并拉动他们进入应用程序。我已经探索过Facebook的API和考拉宝石,无法获取页面数据。我只是不确定如何在浏览器外部获取访问令牌。此外,如果我要获取访问令牌,我似乎无法获取评级数据,而不是该页面的所有者。

我采取的一条路线是向页面发送一个简单的GET请求。像https://graph.facebook.com/{page-id}之类的工作正常,但是https://graph.facebook.com/{page-id}/ratings会引发以下情况:

{
  "error": {
    "message": "(#210) Subject must be a page.",
    "type": "OAuthException",
    "code": 210
  }
}

获取此数据的最简单方法是什么?

2 个答案:

答案 0 :(得分:2)

正如问题评论中所提到的,我需要通过Facebook用户进行身份验证,并对Facebook页面感兴趣,因为我需要从中获取令牌。

访问该页面后,我通过Koala gem完成了API调用。我用应用程序初始化了考拉:

<强>配置/初始化/ facebook.rb

$facebook = Koala::Facebook::OAuth.new(
  "my_facebook_app_id", 
  "my_facebook_secret",
  "my_facebook_redirect_url"
)

由于我只需要在一个场景中获取一个用户的令牌,我是通过我的应用程序的管理员端在我的facebook_controller中完成的。

在此控制器操作中,我在路径中查找code参数。如果我们找不到它,我们会发送到授权网址,否则我们会在User模型中处理并存储Facebook用户令牌,并以预先确定的可预测记录存储。

应用/控制器/管理/ facebook_controller.rb

def auth
  if params[:code].present?
    code = params[:code]
    token = $facebook.get_access_token_info(code)
    User.find_by_email('admin@example.com').update(
      :fb_access_token => token['access_token'],
      :fb_token_expires => token['expires'].to_i.seconds.from_now
    )
    redirect_to admin_dashboard_path
  else
    redirect_to $facebook.url_for_oauth_code(:permissions => "manage_pages")
  end
end

一旦我有了一个活动令牌,我就可以像这样获取页面令牌:

user = User.find_by_email('admin@example.com')
user_graph = Koala::Facebook::GraphAPI.new(user.fb_access_token)
accounts = user_graph.get_connections('me', 'accounts')
page_token = accounts[0]['access_token']
page_graph = Koala::Facebook::API.new(page_token)
ratings = page_graph.get_connection('me', 'ratings')

此时,我在ratings变量中存储了评级对象的集合。在这一点上,我可以用这些评级做任何我需要的事情。

注意:在这种特殊情况下,我新建的Facebook页面是用户帐户数组中的第一个account。这需要一些试验和错误,但如果您无法预测所需帐户的索引,则可以通过迭代用户帐户数组(在这种情况下,存储在accounts)来完成。

答案 1 :(得分:0)

这似乎是Facebook Graph API的一个错误。我有完全相同的问题。

我可以获取所有其他对象的列表,但在请求/ {page-id} / rating时我收到错误。 Facebook Graph API返回的JSON有效负载如下:

{
  "error": {
    "message": "(#210) Subject must be a page.", 
    "type": "OAuthException", 
    "code": 210
  }
}