【问题标题】:Post to Facebook Fan Page Wall from Rails从 Rails 发布到 Facebook 粉丝专页墙
【发布时间】:2011-04-01 17:35:04
【问题描述】:

我为我的 rails 应用程序创建了一个 facebook 粉丝专页,我希望能够将 rails 应用程序中的数据发布到该 facebook fanpage 的墙上。

在网络上进行了大量挖掘之后,我发现我对很多术语感到非常困惑。我发现的大多数解决方案,包括fb_graph gem 都要求一个 ACCESS_TOKEN,它需要一个 APP_SECRET 和一个 APP_ID。我可以找到该页面的 ID,但我认为我无法获得一个普通粉丝页面的 APP_SECRET。

gem 文档说我可以使用这个 sn-p 发布到提要:

me = FbGraph::User.me(ACCESS_TOKEN)
me.feed!(
    :message => 'Updating via FbGraph',
    :picture => 'https://graph.facebook.com/matake/picture',
    :link => 'http://github.com/nov/fb_graph',
    :name => 'FbGraph',
    :description => 'A Ruby wrapper for Facebook Graph API'
)

这很好,除了我不知道我是否可以在没有 APP_SECRET 和 APP_ID 的情况下获得 ACCESS_TOKEN。

我需要创建 Facebook 应用吗? (我认为这与普通的粉丝页面不同......)我希望用户能够“喜欢”该页面,以便我在我的新闻提要中发布的内容也会显示在他们的新闻提要中。

这只是一页,我不认为我需要通过 OAUTH 对用户进行身份验证...我不希望 他们 在页面的墙上发帖,只是要在其自己的墙上发布的页面。但我希望它是自动化的。

我该怎么做?

【问题讨论】:

    标签: ruby-on-rails facebook facebook-graph-api gem


    【解决方案1】:

    是的,要获得访问令牌,您需要 client_id 和 client_secret。 获得它们后,此示例应用程序将为您提供您自己的访问令牌。 (在 config/facebook.yml 中编辑 client_id、client_secret 和权限。您至少需要“manage_pages”权限)

    https://github.com/nov/fb_graph_sample

    在 fb_graph 的情况下,您可以使用此代码将消息作为页面本身发布。

    所有者 = FbGraph::User.me(USER_ACCESS_TOKEN) pages = owner.accounts page = pages.detect 做 |page| page.identifier == '117513961602338' 结尾 page.feed!(:message => 'test')

    您可以存储page.access_token 以备将来使用 如果您已经拥有页面访问令牌,则可以像这样简单地调用。

    page = FbGraph::Page.new(PAGE_ID, :access_token => PAGE_ACCESS_TOKEN) page.feed!(:message => 'test')

    ps。 me.feed!(...) 作为页面所有者而不是页面本身发布。

    【讨论】:

    • 所以这会进入控制器的创建动作?以及如何获得访问令牌?
    • 可以在控制器中,不过我更喜欢在模型中。
    • access_token 包含在“owner.accounts”调用的响应中。
    【解决方案2】:

    简短的回答是是的,您需要一个 Facebook 应用程序。请参阅此答案末尾的警告。

    如您所见,与 Facebook 的所有外部交互都是通过 访问令牌 的用户进行的。要为用户获取访问令牌,应用程序必须根据您的应用程序 App IDApp Secret 将用户转发到一个特殊的 URL,这是他们将被呈现的地方使用权限对话框:

    Facebook Connect http://s3.amazonaws.com/files.posterous.com/mockupstogo/AIcVc2qmfB9qDwOBuQp4vdylKkM2wZiWhjQezBjTO1L0qym0agkSWQFNNobe/Facebook_Connect.png?AWSAccessKeyId=AKIAJFZAE65UYRT34AOQ&Expires=1301690929&Signature=cwibcaeH6GGbVA3gC2AAyvcEco0%3D

    一旦用户批准了应用程序,Facebook 就会将他们发送回一个带有特殊代码的回调 URL。此代码可用于获取用户的访问令牌,然后该用户可以作为该用户在 Facebook 上执行操作(基于您的 Facbook 应用程序请求的权限)。

    由于您只希望自己的帐户/应用能够发布到墙上,一个好主意是获取永久访问令牌并将该令牌存储在您的应用中的某个位置。虽然 OAuth 2 确实支持非 Web 应用程序的“用户代理流程”,但 Facebook 并不直接支持它。请参阅https://developers.facebook.com/docs/authentication/ 的“桌面应用程序”部分了解更多信息。

    【讨论】:

      【解决方案3】:

      如果您的应用程序已经将更新发布到 Twitter,您可以使用 Twitter 自动将这些推文发布到您的 Facebook 粉丝页面的墙上。以下 Twitter 支持文章概述了如何链接您的帐户:https://support.twitter.com/articles/31113

      【讨论】:

        【解决方案4】:

        我真的很喜欢 gem nov matake 创建的,我想我会改用它而不是其他的。让我试着扩展一下这个答案。

        facebook 的文档很好,但我认为在撰写本文时它仍然留下了很多漏洞。

        我发现,如果您想使用应用程序代表页面本身在页面上发布墙贴,则需要三个权限。

        • 请求“离线访问”权限

        https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=YOUR_APP_URL&scope=offline_access&response_type=token

        如果没有离线访问,您的令牌将过期,您的应用将不得不定期遵循整个身份验证过程。使用上面的 url,您将获得一个不会过期的令牌来启动该过程。

        • 请求“发布流”权限

        https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=YOUR_APP_URL&scope=publish_stream&response_type=token

        没有此权限,我根本无法在页面上发帖。

        • 请求“管理页面”权限

        https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=YOUR_APP_URL&scope=manage_pages&response_type=token

        在没有管理页面权限的情况下,我可以在页面上发布墙贴,但它们显示为来自我的个人帐户,而不是代表页面本身。

        以上所有权限都必须手动授予您的帐户。在该权限过程之后,我就可以使用fb_graph gem 和 nov mtake 概述的步骤,使用从 offline_access 权限步骤生成的永恒令牌。

        【讨论】:

          【解决方案5】:
          :picture => 'https://graph.facebook.com/matake/picture',
          
          • 错了,因为 facebook 正在检查您的选择是否托管在 域
          • 在页面中添加 og: 元标记

            <meta property="og:title" content="App.Name title"/>
            <meta property="og:type" content="website"/>
            <meta property="og:image" content="YOUR_URL/images/image.png"/>
            <meta property="og:site_name" content="App.Name"/>
            <meta property="og:url" content="YOUR_URL"/>
            <meta property="og:description" content="description"/>
            
          • 也可以使用the facebook debugger

          【讨论】:

            猜你喜欢
            • 2010-11-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多