2013-02-11 170 views
0

我想從外部網頁檢索facebook的最新粉絲頁更新。facebook graph-api

似乎有兩個問題...

一個,它似乎像訪問令牌一個小時後過期,有沒有辦法讓一個永久的訪問令牌?

其次,我想得到頁面所有者(包含「消息」字段的帖子)最後10個帖子的json字符串。

例如,如果我使用「https://graph.facebook.com/stackexchange/posts?fields=message&limit=10」,它將返回不包含消息字段的行。有沒有辦法來過濾這些?

也許有一種方法使用FQL查詢檢索?

+0

你不能得到永久的訪問令牌,那麼失敗的OAuth的(和安全性一般)的目的。 – ecbrodie 2013-02-11 05:54:41

回答

0

關於永久訪問令牌:我認爲你正在尋找應用訪問令牌。更多信息:https://developers.facebook.com/docs/technical-guides/opengraph/publishing-with-app-token/

關於第二個問題:從輸出中,檢查是否存在「消息」鍵。如果不排除該條目。在PHP中有一個函數array_key_exists來完成這件事。

+0

這非常適合獲得永久密鑰。這是一個客戶端應用程序 - 我使用了類似的js函數(hasOwnProperty),但是我寧願查詢我想要的最後10個項目,而不是在返回後修剪所有帖子。 – energee 2013-02-17 05:33:21

0

那麼,你可以嘗試讓Facebook頁面($pageId)授權您的應用程序的管理員之一($fbAppId):

<script> 
    var oauth_url = 'https://www.facebook.com/dialog/oauth/'; 
    oauth_url += '?client_id=<?php echo $fbAppId; ?>'; 
    oauth_url += '&redirect_uri=' + encodeURIComponent('https://www.facebook.com/pages/null/<?php echo $pageId; ?>/?sk=app_<?php echo $fbAppId; ?>'); 
    oauth_url += '&scope=manage_pages' 

    window.top.location = oauth_url; 
</script> 

當他們認可它,你可以申請一個持久的象徵與簽約請求($signedRequest = $facebook->getSignedRequest();)你:

$url = 'https://graph.facebook.com/oauth/access_token?client_id=' . $fbAppId . '&client_secret=' . $appSecret . '&grant_type=fb_exchange_token&fb_exchange_token=' . $signedRequest['oauth_token']; 

捲曲這個URL,並得到所產生的access_token:

$access_token = substr($response, strlen('access_token=')); 

將它保存到您的數據庫中。有了這個,你可以得到的帖子:

$graphUrl = '/' . $pageId . '/posts?access_token=' . $accessToken; 
$posts = $this->facebook->api($graphUrl, 'GET'); 

我不知道,直到這access_token過期多久。

1

如果您的網頁沒有任何限制,可以使用永久應用訪問令牌獲取此數據。如果您使用的是其中一個服務器端SDK,它們會自動爲您提供一個。

如果您沒有使用SDK,或者您正在使用JavaScript編寫文檔的Login as an App部分,將指導您完成此任務。

通過此方法獲得的訪問令牌將一直存在,直到您更改應用程序密鑰。

如果您的頁面存在年齡和/或國家/地區限制,則需要用戶訪問令牌才能通過API獲取數據。根據TOS,您應該對每個用戶進行身份驗證,並且只有在滿足頁面所有者設置的限制時才顯示結果。

獲取頁面最後10個帖子最好通過FQL完成。試試這個查詢:

SELECT created_time, message, attachment FROM stream WHERE 
    source_id = YOUR_PAGE_ID AND filter_key = "owner" AND message != "" LIMIT 10 
+0

這種SQL風格的查詢運行良好,但似乎沒有返回7個結果,無論我是否包含LIMIT或不包含。有沒有與此相當的圖表? – energee 2013-02-17 05:57:03

+0

您無法使用Graph API進行過濾。你所能做的就是得到一切,並在你的最後過濾它。 – cpilko 2013-02-17 12:39:55

相關問題