0

我正在製作一個Web應用程序,它從我們的Facebook頁面中提取最新帖子並處理它們。 這一切都工作正常,從this頁面生成的硬編碼訪問令牌。Facebook API - 訪問Web應用程序的令牌

問題是,這個令牌過期了,所以我正在尋找一個解決方案來生成一個新的令牌,每次頁面加載或一個非到期的令牌 - (我已經讀過某處,不過期的令牌不再存在了)。

所以當然我做了一些研究,hereherehere

但這些例子中沒有一個似乎有效。

的一些代碼,我至今沒有嘗試過任何投訴之前,這是我工作的例子 - 與到期的訪問令牌:

var Facebook = function() { 
    this.token = 'MYTOKEN'; 
    this.lastPost = parseInt((new Date().getTime())/1000); 
    this.posts = []; 
}; 

Facebook.prototype.GetPosts = function() { 
    var self = this; 
    var deffered = $q.defer(); 
    var url = 'https://graph.facebook.com/fql?q=SELECT created_time, message, attachment FROM stream WHERE created_time < ' + self.lastPost + ' AND source_id = 437526302958567 ORDER BY created_time desc LIMIT 5&?access_token=' + this.token + ''; 
    $http.get(url) 
     .success(function (response) { 
      angular.forEach(response.data, function (post) { 
       self.posts.push(new Post(post.message, post.attachment.media, post.attachment.media[0].src, post.created_time, 'facebook')); 
      }); 
      self.lastPost = response.data[response.data.length -1].created_time; 
      deffered.resolve(self.posts); 
      self.posts = []; 
     }); 
    return deffered.promise; 
}; 
return Facebook; 

任何幫助/建議將不勝感激。

+0

您提供的第二個鏈接是我用於獲取非過期訪問令牌的解決方案,該解決方案適用於我,但僅限於在v1.0而不是v2.0版本中使用圖形瀏覽器。 我不喜歡你的方法是你將Access Token存儲在前端,這意味着每個人都可以看到它。 – Tobi

回答

1

首先,重要的是要記住Facebook剛推出Graph API的第2版。從2014年4月起,如果您的應用出現問題,您需要告訴我們您在Facebook Developers上創建時的情況(新應用默認使用版本2)。

爲了管理頁面,您的應用需要有manage_pages權限。確保您想要管理粉絲頁面的用戶已授權您。如果您的應用程序使用版本2,請確保Facebook(Facebook員工)已授權您詢問用戶該類型的權限,否則您的應用程序將無法工作。

一旦你得到你的令牌,交換一個永久令牌(或具有很長的到期日的令牌)。確保使用粉絲頁面的標記,而不是用戶的標記。

如果您想要閱讀公共粉絲頁面流,則需要具有read_stream權限的訪問令牌。如果您使用的是Graph API的第2版,則此權限需要由Facebook批准(請參閱上文),並且此特定類型的權限需要時間才能批准。如果您使用的是舊API(版本1),那麼您仍然可以在未經Facebook事先批准的情況下執行此操作。 要求讀取流的權限的URL如下:https://www.facebook.com/dialog/oauth?client_id=$YOUR_APP_ID&redirect_uri=$YOUR_URL&scope=read_stream,manage_pages(我在這種情況下添加了manage_pages,您可能不需要它)。 該網址將提示授權。一旦用戶授權該應用程序,您將被重定向到您選擇的URL,其中包含code=變量。 在這一點上,調用這個其他網址:

https://graph.facebook.com/oauth/access_token?client_id={$app_id}&redirect_uri=$someurl&client_secret={$app_secret}&code={$code} 

你會得到具有access_token=變量在它的響應。抓鬥訪問令牌,換取一個漫長的,具有以下網址:

https://graph.facebook.com/oauth/access_token?grant_type=fb_exchange_token&client_id={$app_id}&client_secret={$app_secret}&fb_exchange_token={$token_you_have_just_grabbed} 

響應會給你持續一段時間的令牌。此前,Facebook決定讓這些「長期代幣」在一個月後過期。不過,我發現他們可能已經改變了主意:如果您將用戶令牌放入調試器中,您會發現它永不過期。 這是使用瀏覽器訪問的用戶的授權流程。還有應用授權流程。如果您需要的只是來自您自己的粉絲頁面的流,則需要執行以下操作(使用圖形API V1):

  • 使用下面的URL發出HTTP GET請求: https://graph.facebook.com/oauth/access_token?type=client_cred&client_id={$app_id}&client_secret={$app_secret}

  • 使用所得令牌再拍HTTP GET呼叫,像這樣: https://graph.facebook.com/{$your_page_id}/feed?{$authToken}&limit=10 //ten posts

  • 解碼的json對象

你完成了。

+0

真棒回答! –

相關問題