通过 Koala 发布到我自己的 facebook 墙上
Posting to my own facebook wall via Koala
我正在尝试 post 我自己的 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')
但是,我得到这个错误:
An active access token must be used to query information about
the current user. [HTTP 400]
(Koala::Facebook::AuthenticationError)
令牌有效,我检查过了。我需要 post 到我自己的墙上,而不是
不同的用户。根据我在文档中阅读的内容,我需要一个“应用程序
访问密钥”,而不是 "user access key" 来执行此操作。我对
facebook api 列表,所以我想我遗漏了一些非常基本的东西。
只要用户已经授予您应用程序适当的权限,您就可以使用应用程序令牌而不是用户令牌post到墙上。
也就是在时间轴上
- 用户通过
publish_actions
授予应用对 post 的访问权限
- Graph 登录流程提供的用户访问令牌
- 此时,您可以使用用户访问令牌或应用程序访问令牌
此外,
foo = @graph.get_object('me')
不是 POST 请求。它说,从名为 me
的图中获取对象。此外,如果您使用应用程序令牌,me
将不会解析任何内容,因为应用程序无法判断您所指的应用程序中所有用户中的哪个 "me"。因此,您需要为用户参考应用范围内的 ID。
例如
foo = @graph.get_object('4')
其中 4
是数字应用范围 ID(4 在您的情况下不起作用,您需要为您的应用找出正确的 ID)。在 koala 中正确的调用应该是
foo = @graph.put_connections("4", "feed", :message => "I am writing on my wall!")
我的问题是用户(在本例中是我自己)必须允许访问我的应用程序才能 post 到我的墙上。
完整的 OAuth 过程在 http://developers.facebook.com/docs/authentication/
中有很好的描述
但具体来说,我需要得到一个我必须访问的 URL,然后对身份验证问题说 "yes"。代码在这里:
@oauth = Koala::Facebook::OAuth.new(app_id, app_secret, callback_url)
@oauth.url_for_oauth_code(:permissions => "publish_actions")
URL 看起来像这样:
https://www.facebook.com/dialog/oauth?
client_id={app_id}&
redirect_uri={redirect-uri}&scope=publish_actions
请注意,URL 必须指定您要向用户请求哪些权限(在本例中,是 post 的权限)。此权限请求在 "scope" 变量下指定。请注意某些版本的 facebook api 允许 post 通过 "publish_stream" 范围,而其他版本需要 "publish_actions" 范围。有关范围变量下可用权限的更多信息,请参见此处:https://developers.facebook.com/docs/facebook-login/permissions/v2.0
当您访问由上述语句生成的 URL 时,facebook 会向您发送一条消息,询问该特定应用程序是否有权 post 到您的墙上。你当然会说"yes"。之后,您的 Facebook 应用程序可以使用 "app access token"
post 到 Facebook 墙
之后,使用您的应用程序访问令牌很容易 post 上墙。对我有用的代码是:
@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")
我正在尝试 post 我自己的 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')
但是,我得到这个错误:
An active access token must be used to query information about the current user. [HTTP 400] (Koala::Facebook::AuthenticationError)
令牌有效,我检查过了。我需要 post 到我自己的墙上,而不是 不同的用户。根据我在文档中阅读的内容,我需要一个“应用程序 访问密钥”,而不是 "user access key" 来执行此操作。我对 facebook api 列表,所以我想我遗漏了一些非常基本的东西。
只要用户已经授予您应用程序适当的权限,您就可以使用应用程序令牌而不是用户令牌post到墙上。
也就是在时间轴上
- 用户通过
publish_actions
授予应用对 post 的访问权限
- Graph 登录流程提供的用户访问令牌
- 此时,您可以使用用户访问令牌或应用程序访问令牌
此外,
foo = @graph.get_object('me')
不是 POST 请求。它说,从名为 me
的图中获取对象。此外,如果您使用应用程序令牌,me
将不会解析任何内容,因为应用程序无法判断您所指的应用程序中所有用户中的哪个 "me"。因此,您需要为用户参考应用范围内的 ID。
例如
foo = @graph.get_object('4')
其中 4
是数字应用范围 ID(4 在您的情况下不起作用,您需要为您的应用找出正确的 ID)。在 koala 中正确的调用应该是
foo = @graph.put_connections("4", "feed", :message => "I am writing on my wall!")
我的问题是用户(在本例中是我自己)必须允许访问我的应用程序才能 post 到我的墙上。
完整的 OAuth 过程在 http://developers.facebook.com/docs/authentication/
中有很好的描述但具体来说,我需要得到一个我必须访问的 URL,然后对身份验证问题说 "yes"。代码在这里:
@oauth = Koala::Facebook::OAuth.new(app_id, app_secret, callback_url)
@oauth.url_for_oauth_code(:permissions => "publish_actions")
URL 看起来像这样:
https://www.facebook.com/dialog/oauth?
client_id={app_id}&
redirect_uri={redirect-uri}&scope=publish_actions
请注意,URL 必须指定您要向用户请求哪些权限(在本例中,是 post 的权限)。此权限请求在 "scope" 变量下指定。请注意某些版本的 facebook api 允许 post 通过 "publish_stream" 范围,而其他版本需要 "publish_actions" 范围。有关范围变量下可用权限的更多信息,请参见此处:https://developers.facebook.com/docs/facebook-login/permissions/v2.0
当您访问由上述语句生成的 URL 时,facebook 会向您发送一条消息,询问该特定应用程序是否有权 post 到您的墙上。你当然会说"yes"。之后,您的 Facebook 应用程序可以使用 "app access token"
post 到 Facebook 墙之后,使用您的应用程序访问令牌很容易 post 上墙。对我有用的代码是:
@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")