【问题标题】:Posting to my own facebook wall via Koala通过考拉发布到我自己的 Facebook 墙上
【发布时间】:2023-03-29 02:55:01
【问题描述】:

我正在尝试发布到我自己的 Facebook 墙上。所以我在我的 个人facebook页面,获取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] (考拉::Facebook::AuthenticationError)

令牌有效,我检查过了。我需要发布到我自己的墙上,而不是 不同的用户。根据我在文档中阅读的内容,我需要一个“应用程序 访问密钥”,而不是执行此操作的“用户访问密钥”。我对 facebook api 列表,所以我想我错过了一些非常基本的东西。

【问题讨论】:

    标签: facebook-graph-api koala


    【解决方案1】:

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

    也就是说,在时间轴上

    • 用户通过publish_actions 授予应用程序访问权限
    • Graph Login Flow 提供的用户访问令牌
    • 此时,您可以使用用户访问令牌或应用程序访问令牌

    另外,

    foo = @graph.get_object('me')
    

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

    例如

    foo = @graph.get_object('4')
    

    4 是一个数字应用范围 ID(4 在您的情况下不起作用,您需要为您的应用找出正确的 ID)。考拉中正确的调用是这样的

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

    【讨论】:

    • 如果我可能会问,当您说“授予应用程序访问权限以使用 publish_actions 发布帖子”时,用户是通过 facebook 还是通过 api 授予访问权限。还是通过脸书网站?我尝试通过developers.facebook.com/apps 并找不到设置权限的地方。我也尝试进入我的主页,在设置 -> 应用下,我也无法在那里设置权限。
    • @SteveQuezadas 用户授予访问权限这在我在第一个问题中给您的链接中进行了解释,您需要在调用登录对话框时添加范围参数。我再次将文档放在这里developers.facebook.com/docs/facebook-login/…
    【解决方案2】:

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

    完整的 OAuth 过程在 http://developers.facebook.com/docs/authentication/ 中有很好的描述

    但具体来说,我需要获取一个我必须访问的 URL,然后对身份验证问题说“是”。代码在这里:

    @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

    当您访问由上述语句生成的 URL 时,Facebook 会向您发送一条消息,询问该特定应用是否有权发布到您的墙上。你当然会说“是”。之后,您的 facebook 应用程序可以使用“应用程序访问令牌”发布到 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")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-12
      • 2013-10-09
      • 2013-10-08
      • 1970-01-01
      • 2013-04-23
      • 2012-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多