从Rails发布到Facebook粉丝页面墙

时间:2011-04-01 17:35:04

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

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

经过大量的网络挖掘后,我发现我对很多术语感到困惑。我发现的大多数解决方案,包括fb_graph gem都要求ACCESS_TOKEN,它需要APP_SECRET和APP_ID。我可以找到该页面的ID,但我不认为我只能获得正常粉丝页面的APP_SECRET。

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中。

这只是一页,我不我需要通过OAUTH验证用户...我不希望他们在页面墙上发帖,只是要在其拥有墙上发布的页面。但我希望它能实现自动化。

我该怎么做?

5 个答案:

答案 0 :(得分:7)

是的,要获取访问令牌,您需要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!(...)作为网页所有者发布,而不是网页本身。

答案 1 :(得分:2)

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

正如您所发现的,所有与Facebook的外部互动都是通过访问令牌的用户进行的。要获取用户的访问令牌,应用程序必须根据您的应用程序应用程序ID 应用程序密钥将用户转发到特殊URL,这是他们将被呈现的位置使用权限对话框:

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

用户批准该应用程序后,Facebook会将其发送回回调网址,并附上特殊代码。此代码可用于获取用户的访问令牌,然后用户可以在Facebook上以该用户身份执行操作(基于您的Facbook应用程序请求的权限)。

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

答案 2 :(得分:2)

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

答案 3 :(得分:1)

我非常喜欢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 matake概述的步骤,使用offline_access权限步骤生成的永恒令牌。

答案 4 :(得分: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"/>
    
  • 也使用the facebook debugger