我從未使用Facebook的Graph API或OAuth。我只是試圖使用Graph API獲取公共Facebook頁面的提要,但它需要一個訪問令牌。我不想麻煩用戶登錄並允許訪問獲取他們的令牌。 Facebook應用程序訪問令牌可用於獲取公共提要,但我試圖完全使用Javascript完成此操作,因此我無法使用應用程序密鑰來執行此操作。我在某處閱讀Facebook應用訪問令牌不會過期或更改,除非我手動重置密鑰。這是真的?在Access Token中硬編碼是否安全?如果沒有,有沒有什麼辦法可以驗證應用程序以獲取令牌而不必涉及用戶?是否有某種類型的我可以使用的通用應用程序令牌?您是否可以在不詢問用戶允許的情況下使用Graph API獲取公共Facebook頁面的Feed?
回答
如果您想在應用中使用頁面供稿(如自己的頁面供稿)以向其他人展示該頁面供稿。只需使用您自己的access_token即可獲取它。
但是!,因爲它不被認爲是一種好的做法,您還可以使用頁面或應用程序登錄並使用其access_token。
欲瞭解更多信息,請閱讀official documentation on authentication
如果你喜歡我什麼你的客戶不希望一個標準的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的可視化工具;
當我嘗試檢索$ authToken時,收到響應:「缺少redirect_uri參數。」有任何想法嗎? – 2012-06-13 14:31:00
當你只需將authToken部分的URL(減去花括號,用你的鍵替換變量名)直接放入瀏覽器地址欄時,就會得到什麼結果? – McNab 2012-06-13 15:16:48
對不起,想通了...我翻譯了你的例子,網址缺少'?' access_token和type之間。 – 2012-06-13 15:21:28
我認爲,爲了做到這一點,你必須使用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://s3.amazonaws.com/f.cl.ly/items/2G0q0y3Z2s32311U1s40/Screen%20Shot%202015-03-16%20at%2010.11.50.png – 2015-03-16 10:13:04
針對@Psyked和@James_David_Low的消息,不建議使用FQL是因爲已被棄用。
「...在Facebook上也有兩個低級HTTP API用於訪問圖:FQL和Legacy REST API。這些API包含類似和重疊的功能,但不推薦使用。
新功能一般只有在Graph API可用。 爲了確保您的應用程序能夠面向未來,如果可以的話,應該在您的應用程序中使用Graph API。
的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'];
}
那個小小的access_token url是個寶石! – 2013-01-16 22:57:57
接受的答案不提供檢索簡檔/ PAGEID甚至解釋如何找回它的動態方式。看看我的answer/question。根據我的經驗,接受的答案在要求圍繞app-id
和app-secret
的花括號時也是錯誤的。當我收錄這些內容時,我遇到了一個錯誤,並且與它們一起工作。
它沒有比這更簡單。
- 1. 您是否需要用戶的許可才能獲取Facebook頁面和Twitter Feed?
- 2. 如何使用Graph API獲取公共Facebook頁面的提要?
- 3. 使用Facebook Graph API從公共頁面獲取「發佈計數」
- 4. 您是否可以使用Graph API在Facebook上閱讀羣組Feed?
- 5. Facebook的Graph API可以在不使用任何SDK的情況下使用嗎?
- 6. Facebook Graph API |頁面Feed
- 7. Facebook Graph API - 獲取Facebook用戶的生日(不需要用戶允許)
- 8. 在不使用iOS SDK的情況下使用Facebook Graph API
- 9. Facebook iOS SDK圖形API公共頁面Feed
- 10. Facebook Graph API。如何從公共頁面獲取數據?
- 11. 如何在沒有請求他/她的許可的情況下在Facebook上獲取用戶的公共信息?
- 12. 如何使用Facebook Graph API獲取用戶是否爲管理頁面(isAdmin)?
- 13. 是否可以使用Graph API獲取Facebook登錄狀態?
- 14. Facebook是否允許用戶在沒有對話的情況下從應用中發佈Feed?
- 15. 是否可以在未經同意的情況下使用Active Directory Graph Api?
- 16. 是否可以使用Facebook Graph API查詢過去的事件?
- 17. 我允許在以下情況下使用last.fm API嗎?
- 18. 您可以在不調用GamesClient.connect()的情況下顯示公共排行榜嗎?
- 19. Facebook:在不需要用戶登錄的情況下查詢公共事件?
- 20. 如何驗證Facebook應用使用JavaScript API訪問公共頁面feed?
- 21. 是否可以從Facebook的Graph API獲取用戶的國家代碼?
- 22. 使用Graph API從Facebook獲取公共帖子
- 23. 在沒有用戶登錄Facebook的情況下,在Android應用中從Facebook牆(公共)讀取牆壁(公共)?
- 24. 獲取Facebook Open Graph API查詢的用戶上下文ID
- 25. 是否可以使用Graph API爲Facebook頁面文章設置Facebook webhook?
- 26. iOS - 在沒有用戶身份驗證的情況下獲取Facebook公共頁面帖子
- 27. 是否可以從Facebook Graph API獲取特定用戶的實時視頻?
- 28. 是否可以在不使用網頁瀏覽的情況下通過Android應用程序喜歡Facebook頁面?
- 29. 是否可以在沒有GMS的情況下使用Google API?
- 30. 是否可以在不使用debugfs的情況下使用ftrace?
如果你可以拉動那個技巧,那麼FB就不安全了,對嗎? ;) – alfasin 2012-02-21 07:25:44
我只是想讀取公開的信息。沒有帖子,只能閱讀。我聽說用舊系統是可以的。 編輯:「它」是的API訪問公共頁面供稿沒有令牌 – xtkoeller 2012-02-21 07:34:55
頁面憑證可以用來做,但我不能說這是多麼安全,以將其暴露在前端。 – 2012-02-21 07:38:53