2016-06-19 90 views
-1

我正在嘗試創建一個簡單的網絡應用程序,當有人在應用程序中發佈消息時,會自動在Facebook頁面上發佈關於它的信息。理想情況下,它會使用永久令牌進行發佈。在Facebook頁面上自動登錄

我創建了一個應用程序和一個頁面,並使用應用程序祕密獲得了頁面訪問令牌。然而,當我嘗試發佈消息的頁面這個道理,我得到:

WWW-Authenticate: OAuth "Facebook Platform" "insufficient_scope" "(#200) 
The user hasn't authorized the application to perform this action 

現在我發現關於授權應用頁面上發佈的文件要求用戶提供通過FB登錄的授權。然而,我不希望管理員每次嘗試發佈內容時都要登錄。我想給應用程序一個永久的權限在頁面上發佈。我該怎麼做?

回答

0

我在IRC上找到了一些人的幫助。這是可以使用的流程:

轉到Graph API瀏覽器。從上拉菜單中選擇您的應用程序。從底部下拉菜單中選擇您的頁面(生成頁面訪問令牌)。選擇「請求發佈頁面」選項。 複製訪問令牌。現在將此令牌換成更長壽命的令牌。發出以下GET請求:

https://graph.facebook.com/oauth/access_token?grant_type=fb_exchange_token&fb_exchange_token=<your token>&client_id=<app_id>&client_secret=<app_secret> 

app_idapp_secret可以從應用程序頁面獲得。

您獲得的令牌將存活60天,因此您需要定期刷新它。它可以用於發佈到你的頁面。

0

這不是每次都詢問用戶授權的問題,這只是因爲你沒有指定所需的範圍,能夠publish a new post on a linked page

publish_pages權限的頁面訪問令牌可以用來代表該頁面發佈新帖子。帖子將出現在頁面的聲音中。

所以你需要添加PUBLISH_PAGESperms當你getting your access tokens

UPDATE

  1. 首先需要get the user permission通過將用戶重定向到這個網址(通過鏈接或後端重定向):

    https://www.facebook.com/dialog/oauth 
    ?client_id=<YOUR_APP_ID> 
    &redirect_uri=<URL_TO_WHICH_USER_WILL_BE_REDIRECTED_ONCE_HE_CLICKED_OK_OR_CANCEL> 
    &scope=publish_pages 
    
  2. 在此網址到用戶已被重定向,您將擁有一個GET參數:

    ?code=<AUTHORIZATION_CODE> 
    
  3. 然後,您需要通過調用這個網址使用這個授權碼來獲得令牌(從後端)(FYI當前API版本是v2.6):

    https://graph.facebook.com/<API_VERSION>/oauth/access_token 
    ?client_id=<YOUR_APP_ID> 
    &redirect_uri=<THE_HIDDEN_URL_CALLED_BACK_WITH_JSON_DATA_IN_THE_BODY> 
    &client_secret=<YOUR_APP_SECRET> 
    &code=<AUTHORIZATION_CODE> 
    
  4. 在這種隱藏的網址這就是所謂的回,你會得到在體內的JSON看起來應該是:

    { 
        status: 'connected', 
        authResponse: { 
         accessToken: '...', 
         expiresIn:'...', 
         signedRequest:'...', 
         userID:'...' 
        } 
    } 
    
  5. 您現在可以存儲此訪問令牌(通常在數據庫中)代表該用戶執行動作,你的情況是正在他的網頁牆上發佈帖子。


aiohttp爲您提供了how to call these urlshow to retrieve their content大量的實例。

爲了得到一個真實的例子,你有this nice tutorial,這是使用Flask,但它很容易適應與aiohttp方法。

最後的建議:因爲您似乎沒有使用API​​管理,所以我仍然建議您使用Facebook Python SDK,因爲當您是初學者時會更容易,您將獲得豐富的教程列表如何使用它。

+0

是的,但如何?您鏈接的頁面(我之前已經閱讀過)沒有說明如何在請求訪問令牌時指定燙髮。 – zefciu

+0

你使用哪種語言?哪個框架?你使用SDK嗎? –

+0

我打算使用Python + aiohttp。我希望,我不需要任何SDK,只需要發送http請求到圖形API。可能嗎? – zefciu