我希望将公开的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
}
}
获取此数据的最简单方法是什么?
答案 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
}
}