通过考拉发布到我自己的Facebook墙

时间:2015-01-08 21:04:02

标签: facebook-graph-api koala

我想发布到我自己的Facebook墙上。所以我创建了一个" app"在我的 个人脸书页面,并获得app_id,app_secret等。

然后我做了这段代码:

@oauth = Koala::Facebook::OAuth.new(app_id, app_secret, callback_url)
@token = @oauth.get_app_access_token
@graph = Koala::Facebook::API.new(@token)
foo = @graph.get_object('me')

然而,我收到此错误:

  

必须使用活动访问令牌来查询有关的信息   当前用户。 [HTTP 400]   (考拉:: ::实AuthenticationError)

令牌有效,我查了一下。我需要张贴到我的OWN墙上,而不是 不同的用户。根据我在文档中阅读的内容,我需要一个"应用程序 访问密钥",而不是"用户访问密钥"去做这个。我有点新鲜 facebook api列表,所以我想我错过了一些非常基本的东西。

2 个答案:

答案 0 :(得分:1)

只要用户已经为您的应用授予了适当的权限,您就可以使用应用令牌而不是用户令牌发布到墙上。

即在时间轴

  • 用户使用publish_actions
  • 授予对帖子的应用访问权限
  • 图形登录流程提供的用户访问令牌
  • 此时,您可以使用用户访问令牌或应用程序访问令牌

此外,

foo = @graph.get_object('me')

不是POST请求。它说,从名为me的图中获取对象。如果您使用的是应用程序令牌,则me将无法解析任何内容,因为应用程序无法告知您所指向的应用程序中的所有用户中的“我”。因此,您需要引用用户的应用范围ID。

e.g

foo = @graph.get_object('4')

其中4是数字应用范围ID(在您的情况下4将不起作用,您需要为您的应用找出正确的ID)。考拉中的正确呼叫将类似于

foo = @graph.put_connections("4", "feed", :message => "I am writing on my wall!")

答案 1 :(得分:1)

我的问题是用户(在这种情况下是我自己)必须允许访问我的应用程序才能发布到我的墙上。

http://developers.facebook.com/docs/authentication/

详细介绍了完整的OAuth流程

但具体来说,我需要获取一个我必须访问的网址,然后说“#34;是"到authnetication问题。代码在这里:

@oauth = Koala::Facebook::OAuth.new(app_id, app_secret, callback_url)
@oauth.url_for_oauth_code(:permissions => "publish_actions")

网址如下所示:

https://www.facebook.com/dialog/oauth?
    client_id={app_id}&
    redirect_uri={redirect-uri}&scope=publish_actions

注意,URL必须指定您要从用户请求的权限(在这种情况下,是发布到墙上的权限)。此权限请求在"范围"下指定。变量。注意某些版本的facebook api允许通过" publish_stream"范围和其他版本需要" publish_actions"范围。有关范围变量下可用权限的更多信息,请访问:https://developers.facebook.com/docs/facebook-login/permissions/v2.0

当您访问从上述声明生成的网址时,Facebook会向您显示一条消息,询问该特定应用是否有权发布到您的留言板。当然,你说"是"。之后,您的Facebook应用程序可以使用" app访问令牌#34;

发布到Facebook墙上

之后,使用您的应用访问令牌轻松发布到墙上。适合我的代码是:

@oauth = Koala::Facebook::OAuth.new(app_id, app_secret, callback_url)
@app_access_token = @oauth.get_app_access_token
@graph = Koala::Facebook::API.new(@app_access_token)
foo = @graph.put_connections(facebook_user_id, "feed", :message => "Test message")