2011-04-01 114 views
6

我为我的Rails应用做了一个Facebook粉丝页面,我希望能够将Rails应用中的数据发布到该粉丝页面的墙上。发布到Facebook粉丝页面墙从Rails

经过大量的网络挖掘,我发现我很困惑很多术语。我发现的大多数解决方案,包括fb_graph gem都需要一个ACCESS_TOKEN,这需要一个APP_SECRET和一个APP_ID。我可以找到页面的ID,但我不认为我可以只为普通粉丝页面获得APP_SECRET。

宝石医生说我可以只使用这个片段张贴到饲料:

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' 
) 

这是伟大的,但我不知道如果我能得到一个ACCESS_TOKEN没有APP_SECRET和APP_ID。

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

这只是一个网页,我不认为需要通过OAUTH来验证用户身份。我不想他们张贴在页面的墙壁,只是网页上发布它的自己墙。但我希望它是自动的。

我该怎么做?

回答

2

简短的回答是,是的,你需要一个Facebook应用程序。看到这个答案结束时的警告。

与Facebook的所有外部交互都通过访问令牌的用户发生,如您所发现的。要获得用户的访问令牌,应用程序必须根据您的应用程序的用户转发到一个特殊的URL 应用程序ID应用秘密,这是他们将与权限对话框,提示:

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

一旦用户批准该应用程序,Facebook将它们发送回回调URL并附上一个特殊代码。此代码可用于为用户获取访问令牌,然后可以以该用户的身份(根据您的Facbook应用程序请求的权限)在Facebook上执行操作。

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

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!(...)作为页面所有者而不是页面本身。

+0

所以这将在控制器的创建操作?你如何获得访问令牌? – rugbert 2011-10-22 19:39:29

+0

可以在控制器中,但我更喜欢它在模型中。 – 2011-11-08 03:34:36

+0

access_token包含在“owner.accounts”调用的响应中。 – 2011-11-08 03:36:06

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

没有离线访问,您的令牌将到期,您的应用程序将有定期跟踪整个认证过程。使用上面的网址,您将获得一个未到期的令牌来启动流程。

  • 请求 “发布流” 权限

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权限步骤生成的永久标记概述的步骤。

1
:picture => 'https://graph.facebook.com/matake/picture', 
  • 是错误的,因为如果接在你的 域名托管
  • 加OG Facebook是检查: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

2

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