2011-04-01 74 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

相關問題