webentwicklung-frage-antwort-db.com.de

Können Sie den Feed einer öffentlichen Facebook-Seite mithilfe der Graph API abrufen, ohne einen Benutzer zu bitten, dies zuzulassen?

Ich habe noch nie die Grafik-API von Facebook oder OAuth verwendet. Ich versuche einfach, den Feed einer öffentlichen Facebook-Seite mithilfe der Graph-API abzurufen, aber dafür ist ein Zugriffstoken erforderlich. Ich möchte den Benutzern nicht die Mühe machen, sich anzumelden und den Zugriff auf ihr Token zu ermöglichen. Ein Facebook-App-Zugriffstoken könnte zum Abrufen eines öffentlichen Feeds verwendet werden. Ich versuche dies jedoch vollständig in JavaScript. Daher kann ich das App-Geheimnis nicht dazu verwenden. Ich habe irgendwo gelesen, dass ein Facebook-App-Zugriffstoken niemals abläuft oder sich ändert, es sei denn, ich habe das Geheimnis manuell zurückgesetzt. Ist das wahr? Wäre es sicher, nur harten Code im Access Token zu speichern? Wenn nicht, gibt es eine Möglichkeit, eine App zu authentifizieren, um das Token zu erhalten, ohne dass ein Benutzer involviert werden muss? Gibt es einen generischen App-Token, den ich verwenden könnte?

35
xtkoeller

Wenn Sie wie ich sind, möchten Ihre Kunden kein standardmäßiges Facebook-Likebox-Plugin, sondern möchten, dass alles auf ihre eigene Art und Weise gestaltet und angepasst wird.

Sie müssen nicht den ganzen Tag in der offiziellen Dokumentation stöbern und sich fragen, ob etwas für Sie zutrifft, es ist ganz einfach. Die Verwirrung entsteht, weil Sie annehmen würden, dass Sie mit all diesen Schlüsseln und geheimen IDs die Erlaubnis oder Authentifizierung von der Facebook-Seite erhalten müssten, von der Sie den Feed abrufen wollten - das tun Sie nicht. Sie benötigen lediglich eine gültige App und können den Feed für jede öffentliche Seite abrufen.

Richten Sie Ihre App in Facebook ein und Sie erhalten eine App-ID und einen API-Schlüssel. Rufen Sie die Profil-ID für den gewünschten öffentlichen Seiten-Feed ab, und das ist alles, was Sie brauchen. Sie können dann den folgenden Code verwenden, um das Authentifizierungstoken abzurufen, und diesen dann verwenden, um die Feeddaten als JSON-Objekt zurückzugeben.

<?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}");

Dank einer Änderung schlug jemand vor, dass ich davon ausgehe, dass dieser Code von hier (kommt mir sowieso bekannt vor :)) stammt, und es gibt einige weitere Informationen in den Kommentaren, die helfen könnten.

Sie können das Objekt dann analysieren. Hier ist ein Code, mit dem Sie es in PHP basierend auf diesem Thread ausführen können.

mgang mit Daten in einem PHP JSON-Objekt

$feedarray = json_decode($json_object);

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

Um herauszufinden, was Ihnen im json-Objekt zur Verfügung steht, können Sie die URL in einem Browser ausgeben und in dieses nützliche json-Visualisierungstool kopieren/einfügen.

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

78
McNab

Das Zugriffstoken für die Facebook-App läuft niemals ab oder wird nicht geändert, es sei denn, ich habe das Geheimnis manuell zurückgesetzt

Das ist richtig.

App-Token verfallen erst, wenn das App-Geheimnis zurückgesetzt wurde. App-Zugriffstoken sind für jede App einzigartig.

Da öffentliche Feeds any gültige Zugriffstoken annehmen, können Anwendungstoken verwendet werden.

Gehen Sie zu https://developers.facebook.com/tools/access_token und Sie würden keinen Flow benötigen. Dann können Sie es einfach hart einprogrammieren. Sobald Sie das Geheimnis zurücksetzen, ist diese Methode ungültig.

$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);

Dann durch die Seiten iterieren

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'];
}

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

6
phwd

Die akzeptierte Antwort bietet weder eine dynamische Möglichkeit zum Abrufen der profileId/pageId noch eine Erklärung zum Abrufen der profileId/pageId. Schauen Sie sich meine Antwort/Frage an. Nach meiner Erfahrung ist die akzeptierte Antwort auch falsch, wenn die geschweiften Klammern um das app-id und app-secret. Ich habe eine Fehlermeldung erhalten, als ich diese eingebunden habe, und es hat mit ihnen geklappt.

Einfacher geht es nicht.

1
craned

Als Antwort auf die Nachricht von @Psyked und @James_David_Low wird die Verwendung von FQL nicht empfohlen, da dies veraltet ist.

"... Es gibt zwei Low-Level-HTTP-APIs, die auch bei Facebook verwendet werden, um auf das Diagramm zuzugreifen: FQL und die Legacy REST API. Diese APIs enthalten ähnliche und überlappende Funktionen , sind aber veraltet. "

Neue Funktionen sind generell nur in der Graph API verfügbar. Um Ihre App zukunftssicher zu machen, sollten Sie die Graph-API in Ihrer App verwenden, wenn Sie können.

1
Diego Palomar

Ich denke, um dies zu tun, müssen Sie FQL nicht einfach die Graph-API verwenden. Dies ist, was ich tue (ersetzen PAGE_ID mit der ID Ihrer Seite, halten Sie die Anführungszeichen):

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
James David Low

Wenn Sie einen Seiten-Feed (wie Ihren eigenen Seiten-Feed) in einer App verwenden möchten, um ihn anderen zu zeigen. Verwenden Sie einfach Ihr eigenes access_token, um es zu erhalten.
ABER! da dies nicht als bewährte Methode angesehen wird, können Sie sich auch mit der Seite oder Anwendung anmelden und deren access_token verwenden.

Weitere Informationen finden Sie in der offiziellen Dokumentation zur Authentifizierung

0
Henrik Peinar