簡體   English   中英

您是否可以使用Graph API獲取公共Facebook頁面的訂閱源而無需要求用戶允許?

[英]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中基於這個線程來完成它;

處理PHP JSON對象中的數據

$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

除非我手動重置密碼,否則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-idapp-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

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

如果您想在應用中使用頁面Feed(例如您自己的頁面Feed)來向其他人展示。 只需使用您自己的access_token即可獲得它。
但! 因為它不被視為一種好的做法,您也可以使用頁面或應用程序登錄並使用他們的access_token。

有關更多信息,請閱讀有關身份驗證官方文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM