首页 文章

从Rails发布到Facebook粉丝页面墙

提问于
浏览
6

我为我的rails应用程序制作了一个facebook粉丝页面,我希望能够将rails应用程序中的数据发布到facebook粉丝专区的墙上 .

经过大量的网络挖掘后,我发现,包括fb_graph gem正在要求一个ACCESS_TOKEN,它需要一个APP_SECRET和一个APP_ID . 我可以找到页面's ID but I don' t我认为我可以获得一个APP_SECRET只是一个正常的fanpage .

gem文档说我可以使用此代码段发布到Feed:

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应用程序吗? (我认为这与普通粉丝页面不同...)我希望用户能够“喜欢”页面,以便我在新闻Feed中发布的内容也会显示在他们的新闻Feed中 .

它's only one page, I don'认为我需要通过OAUTH验证用户...我不希望 them 在页面上发布's wall, just the page to post on it' s own wall . 但我希望它能实现自动化 .

我怎样才能做到这一点?

5 回答

  • 2

    简短的回答是 yes, you will need a Facebook app . 请参阅本答案末尾的警告 .

    正如您所发现的,所有与Facebook的外部互动都是通过 access token 的用户进行的 . 要获取用户的访问令牌,应用程序必须根据您的应用程序 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就会将它们发送回 callback URL ,并附上特殊代码 . 此代码可用于获取用户的访问令牌,然后用户可以在Facebook上以该用户身份执行操作(基于您的Facbook应用程序请求的权限) .

    由于您只希望自己的帐户/应用程序能够发布到墙上,因此一个好主意是获取永久访问令牌并将该令牌存储在您的应用程序的某个位置 . 虽然OAuth 2支持非网络应用程序"user-agent flow",但Facebook不直接支持它 . 有关更多信息,请参见https://developers.facebook.com/docs/authentication/的"Desktop Apps"部分 .

  • 1

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

    https://github.com/nov/fb_graph_sample

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

    owner = FbGraph::User.me(USER_ACCESS_TOKEN)
    pages = owner.accounts
    page = pages.detect do |page|
      page.identifier == '117513961602338'
    end
    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!(...) 作为页面所有者发布而不是页面本身 .

  • 2

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

  • 7

    我真的很喜欢gem nov matake已创建,我想我会转而使用它而不是其他人 . 让我试着稍微扩展一下这个答案 .

    facebook文档很好,但我认为在撰写本文时它仍然存在很多漏洞 .

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

    • 请求"offline access"权限

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

    如果没有离线访问权限,您的令牌将过期,您的应用必须定期遵循整个身份验证过程 . 使用上面的URL,您将获得一个非过期令牌来启动该过程 .

    • 请求"publish stream"权限

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

    未经此许可,我无法发布到页面 .

    • 请求"manage pages"权限

    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 matake概述的步骤使用从中生成的永恒令牌offline_access权限步骤 .

  • 1
    :picture => 'https://graph.facebook.com/matake/picture',
    
    • 错误是因为Facebook正在检查您的域中是否托管了这个选择

    • 在页面中添加og:meta标签

    <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"/>
    

相关问题