[英]Can i get all posts from an event's feed using Facebook Graph API?
[英]Can you get a public Facebook page's feed using Graph API without asking a user to allow?
我從未使用Facebook的Graph API或OAuth。 我只是想使用Graph API獲取公共Facebook頁面的源,但它需要訪問令牌。 我不想麻煩用戶登錄並允許訪問獲取他們的令牌。 Facebook應用程序訪問令牌可用於獲取公共提要,但我試圖完全用Javascript完成此操作,因此我無法使用應用程序密鑰來執行此操作。 我在某處讀到Facebook應用程序訪問令牌永遠不會過期或更改,除非我手動重置密碼。 這是真的? 在Access Token中硬編碼是否安全? 如果沒有,有什么方法可以驗證應用程序獲取令牌而不必涉及用戶? 我可以使用某種類型的通用app令牌嗎?
如果你和我一樣,你的客戶不會想要一個標准的Facebook Likebox插件,他們會希望它們都采用自己的方式設計和定制。
你不需要整天花在官方文檔上,想知道是否有任何一個適用於你這樣簡單的事情,這很容易。 之所以產生混淆,是因為您假設所有這些密鑰和秘密ID都必須從Facebook頁面獲得許可或身份驗證,而您需要從中提取 - 您不需要。 您只需要一個有效的應用程序,您就可以獲得任何公共頁面的Feed。
在Facebook上設置您的應用程序,它將為您提供應用程序ID和API密鑰。 獲取所需公共頁面Feed的個人資料ID,這就是您所需要的。 然后,您可以使用以下代碼檢索身份驗證令牌,然后使用該代碼將Feed數據作為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}");
感謝編輯有人建議我認為這些代碼來自這里 (看起來很熟悉:))並且在那里的評論中有更多信息可能有所幫助。
然后你可以解析對象,這里有一些代碼可以在PHP中基於這個線程來完成它;
$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可視化工具中;
除非我手動重置密碼,否則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/
為了響應@Psyked和@James_David_Low的消息,不建議使用FQL,因為不推薦使用。
“... Facebook上還有兩個低級HTTP API用於訪問圖表:FQL和Legacy REST API。這些API包含類似且重疊的功能,但已被棄用。”
新功能通常僅在Graph API中提供 。 為了面向未來的應用,您應該在應用中使用Graph API。
接受的答案不提供檢索profileId / pageId的動態方法,甚至不解釋如何檢索它。 看看我的回答/問題 。 根據我的經驗,接受的答案也是錯誤的,需要圍繞app-id
和app-secret
的花括號。 當我包含這些內容時,我收到了一個錯誤,並且它與它們一起工作。
它沒有比這更簡單。
我認為為了做到這一點,你必須使用FQL而不僅僅是Graph API。 這就是我正在做的事情(將PAGE_ID
替換為您的頁面ID,保留引號):
SELECT post_id, created_time, type, message, attachment
FROM stream
WHERE source_id = 'PAGE_ID'
AND actor_id = source_id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.