34

我從未使用Facebook的Graph API或OAuth。我只是試圖使用Graph API獲取公共Facebook頁面的提要,但它需要一個訪問令牌。我不想麻煩用戶登錄並允許訪問獲取他們的令牌。 Facebook應用程序訪問令牌可用於獲取公共提要,但我試圖完全使用Javascript完成此操作,因此我無法使用應用程序密鑰來執行此操作。我在某處閱讀Facebook應用訪問令牌不會過期或更改,除非我手動重置密鑰。這是真的?在Access Token中硬編碼是否安全?如果沒有,有沒有什麼辦法可以驗證應用程序以獲取令牌而不必涉及用戶?是否有某種類型的我可以使用的通用應用程序令牌?您是否可以在不詢問用戶允許的情況下使用Graph API獲取公共Facebook頁面的Feed?

+0

如果你可以拉動那個技巧,那麼FB就不安全了,對嗎? ;) – alfasin 2012-02-21 07:25:44

+5

我只是想讀取公開的信息。沒有帖子,只能閱讀。我聽說用舊系統是可以的。 編輯:「它」是的API訪問公共頁面供稿沒有令牌 – xtkoeller 2012-02-21 07:34:55

+0

頁面憑證可以用來做,但我不能說這是多麼安全,以將其暴露在前端。 – 2012-02-21 07:38:53

回答

0

如果您想在應用中使用頁面供稿(如自己的頁面供稿)以向其他人展示該頁面供稿。只需使用您自己的access_token即可獲取它。
但是!,因爲它不被認爲是一種好的做法,您還可以使用頁面或應用程序登錄並使用其access_token。

欲瞭解更多信息,請閱讀official documentation on authentication

78

如果你喜歡我什麼你的客戶不希望一個標準的Facebook likebox插件,他們會想這一切的風格和定製自己的路。

你不需要花一整天的時間去閱讀官方文檔,想知道它是否適用於你這樣簡單的事情,這很容易。出現這種混淆的原因是,你認爲使用所有這些密鑰和祕密ID,你必須從Facebook頁面獲得許可或認證,才能從中提取信息 - 你不需要。所有你需要的是一個有效的應用程序,你可以得到任何公共頁面的飼料。

在Facebook上設置你的應用程序,它會給你一個應用程序ID和一個API密鑰。獲取您想要的公共頁面供稿的配置文件ID,這就是您所需要的。然後,您可以使用以下代碼來檢索身份驗證令牌,然後使用該代碼作爲JSON對象返回提要數據。

<?php 

function fetchUrl($url){ 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_TIMEOUT, 20); 
// You may need to add the line below 
// curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); 

$feedData = curl_exec($ch); 
curl_close($ch); 

return $feedData; 

} 

$profile_id = "the_profile_id_of_the_page_you_want"; 

//App Info, needed for Auth 
$app_id = "your_app_id_in_here"; 
$app_secret = "your_app_secret_in_here"; 

//Retrieve auth token 
$authToken = fetchUrl("https://graph.facebook.com/oauth/access_token?grant_type=client_credentials&client_id={$app_id}&client_secret={$app_secret}"); 

$json_object = fetchUrl("https://graph.facebook.com/{$profile_id}/feed?{$authToken}"); 

感謝編輯有人建議我認爲這個代碼從here出來(看起來很熟悉反正:)),並有在評論中有可能會幫助一些更多的信息。

然後你可以解析這個對象,這裏有一些代碼是基於這個線程在PHP中完成的;

Handling data in a PHP JSON Object

$feedarray = json_decode($json_object); 

foreach ($feedarray->data as $feed_data) 
{ 
    echo "<h2>{$feed_data->name}</h2><br />"; 
    echo "{$feed_data->message}<br /><br />"; 
} 

要了解在JSON對象可以輸出的URL在瀏覽器和副本的提供給你/粘貼到這個有用的JSON的可視化工具;

http://chris.photobooks.com/json/default.htm

+0

當我嘗試檢索$ authToken時,收到響應:「缺少redirect_uri參數。」有任何想法嗎? – 2012-06-13 14:31:00

+0

當你只需將authToken部分的URL(減去花括號,用你的鍵替換變量名)直接放入瀏覽器地址欄時,就會得到什麼結果? – McNab 2012-06-13 15:16:48

+0

對不起,想通了...我翻譯了你的例子,網址缺少'?' access_token和type之間。 – 2012-06-13 15:21:28

0

我認爲,爲了做到這一點,你必須使用FQL不是單純的圖形API。這是我在做什麼(與你的頁面的ID代替PAGE_ID,保持引號):

SELECT post_id, created_time, type, message, attachment 
FROM stream 
WHERE source_id = 'PAGE_ID' 
AND actor_id = source_id 

https://developers.facebook.com/docs/reference/fql/stream/

+0

https://s3.amazonaws.com/f.cl.ly/items/2G0q0y3Z2s32311U1s40/Screen%20Shot%202015-03-16%20at%2010.11.50.png – 2015-03-16 10:13:04

1

針對@Psyked和@James_David_Low的消息,不建議使用FQL是因爲已被棄用。

「...在Facebook上也有兩個低級HTTP API用於訪問圖:FQL和Legacy REST API。這些API包含類似和重疊的功能,但不推薦使用。

新功能一般只有在Graph API可用。 爲了確保您的應用程序能夠面向未來,如果可以的話,應該在您的應用程序中使用Graph API。

+1

這不是事實,FQL本身不被棄用。不推薦使用RestAPI和其他一些較舊的方法 - 但_making_ FQL查詢__絕對不推薦使用.__ – CBroe 2012-12-18 14:15:25

+1

Diego's Right,CBroe錯誤:FQL和REST API在v2.1中不再可用:以前隨着v2.0宣佈,應用程序必須遷移到從v2.1開始的版本化Graph API調用。 HTTPS://developers.facebook。com/docs/apps/changelog – Prozi 2015-06-26 14:44:35

6

的Facebook應用程序訪問令牌不會永遠到期或改變,除非我手動重置密

這是正確的。

除非重設App Secret,否則App令牌不會過期。應用訪問令牌對於每個應用都是唯一的。

由於公共訂閱需要使用任何有效訪問令牌,因此可以使用應用令牌。

轉到https://developers.facebook.com/tools/access_token,你不會需要一個流程。然後你可以將它硬編碼。當你重置密鑰時,這個方法是無效的。

$access_token = '1111111111|2Cha_1-n5' 
$graph_url = "https://graph.facebook.com/Boo/posts?access_token=" 
    . $access_token; 
$page_posts = json_decode(file_get_contents($graph_url), true); 

然後通過網頁遍歷

foreach($page_posts['data'] as $post){ 
    $post_link = $post['actions'][0]['link']; 
    $page_id = $post['from']['id']; 
    $page_name = $post['from']['name']; 
    $message = ($post['message']) ? $post['message'] : " "; 
    $name = ($post['name']) ? $post['name'] : " "; 
    $story = ($post['story']) ? $post['story'] : " "; 
    $post_time = $post['updated_time']; 
} 

來源:http://philippeharewood.com/facebook/how-to-get-facebook-access-tokens-in-php-for-public-posts-the-basic-sauce/

+0

那個小小的access_token url是個寶石! – 2013-01-16 22:57:57

1

接受的答案不提供檢索簡檔/ PAGEID甚至解釋如何找回它的動態方式。看看我的answer/question。根據我的經驗,接受的答案在要求圍繞app-idapp-secret的花括號時也是錯誤的。當我收錄這些內容時,我遇到了一個錯誤,並且與它們一起工作。

它沒有比這更簡單。

相關問題