it-swarm.com.de

facebook: permanentes Seitenzugriffstoken

Ich arbeite an einem Projekt, das eine Facebook-Seite als Datenquelle enthält. Es importiert einige Daten regelmäßig, ohne dass eine GUI beteiligt ist. Dann verwenden wir eine Web-App, um die Daten anzuzeigen, die wir bereits haben.

Nicht alle Informationen sind öffentlich. Das heißt, ich muss einmal auf die Daten zugreifen und sie dann behalten. Ich kenne den Prozess jedoch nicht und habe noch keine gute Anleitung dazu gefunden. Ich denke, ich brauche einen access_token, wie kann ich ihn Schritt für Schritt vom Benutzer erhalten? Der Benutzer ist Administrator einer Facebook-Seite. Muss er unserer Seite eine FB-App hinzufügen?

EDIT: Danke @phwd für den Tipp. Ich habe ein Tutorial gemacht, wie man ein permanentes Seitenzugriffstoken erhält, auch wenn offline_access nicht mehr vorhanden ist.

BEARBEITEN: Ich habe gerade herausgefunden, dass es hier beantwortet wurde: Langlebiges FB-Zugriffstoken für Server, um FB-Seiteninformationen abzurufen

161
Vlasec

Befolgen Sie die Anweisungen in der erweiterbaren Dokumentation von Facebook-Token von Facebook . Ich konnte einen Seitenzugriffstoken erhalten, der nicht abläuft.

Ich empfehle die Verwendung des Graph API Explorer für alle diese Schritte, sofern nicht anders angegeben.

0. Erstellen Sie eine Facebook App

Wenn Sie bereits eine App haben, fahren Sie mit Schritt 1 fort.

  1. Gehen Sie zu Meine Apps .
  2. Klicken Sie auf "+ Neue App hinzufügen".
  3. Richten Sie eine Website-App ein.

Sie müssen weder die Berechtigungen noch irgendetwas ändern. Sie benötigen nur eine App, die nicht erlischt, bevor Sie mit Ihrem Zugriffstoken fertig sind.

1. Holen Sie sich den Token für den kurzlebigen Benutzerzugriff

  1. Gehen Sie zum Graph API Explorer .
  2. Wählen Sie die Anwendung aus, für die Sie das Zugriffstoken erhalten möchten (im Dropdown-Menü "Anwendung", nicht im Menü "Meine Apps").
  3. Klicken Sie auf "Get Token"> "Get User Access Token".
  4. Aktivieren Sie im Popup auf der Registerkarte "Erweiterte Berechtigungen" die Option "manage_pages".
  5. Klicken Sie auf "Get Access Token".
  6. Gewähren Sie den Zugriff von einem Facebook-Konto, das Zugriff hat, um die Zielseite zu verwalten. Beachten Sie, dass, wenn dieser Benutzer den Zugriff auf das finale Ende verliert, der Zugriffstoken mit unbegrenztem Zugriff wahrscheinlich nicht mehr funktioniert.

Das Token, das im Feld "Access Token" angezeigt wird, ist Ihr kurzlebiges Access Token.

2. Generieren Sie ein langlebiges Zugriffstoken

Befolgen Sie diese Anweisungen aus den Facebook-Dokumenten und senden Sie eine GET-Anfrage an

https://graph.facebook.com/v2.10/oauth/access_token?grant_type=fb_exchange_token&client_id= _ ​​{app_id} & client_secret = {app_secret} & fb_exchange_token = { short_lived_token}

eingabe der ID und des Geheimnisses Ihrer App sowie des im vorherigen Schritt generierten Token mit kurzer Lebensdauer.

Sie kann den Graph API Explorer nicht verwenden. Aus irgendeinem Grund bleibt es bei dieser Anfrage stecken. Ich denke es liegt daran, dass die Antwort nicht JSON ist, sondern eine Abfragezeichenfolge. Da es sich um eine GET-Anfrage handelt, können Sie einfach die URL in Ihrem Browser aufrufen.

Die Antwort sollte so aussehen:

{"access_token": "ABC123", "token_type": "bearer", "expires_in": 5183791}

"ABC123" ist Ihr langlebiger Zugriffstoken. Sie können es zur Überprüfung in den Access Token Debugger stellen. Unter "Expires" sollte es etwas wie "2 Monate" haben.

3. Holen Sie sich die Benutzer-ID

Stellen Sie mit dem langlebigen Zugriffstoken eine GET-Anforderung an 

https://graph.facebook.com/v2.10/me?access_token= _ ​​{long_lived_access_token}

Das Feld id ist Ihre Konto-ID. Sie werden es für den nächsten Schritt brauchen.

4. Holen Sie sich ein permanentes Seitenzugriffstoken

Stellen Sie eine GET-Anfrage an

https://graph.facebook.com/v2.10/ _ ​​{account_id}/accounts? access_token = {long_lived_access_token}

Die JSON-Antwort sollte ein data-Feld haben, unter dem sich ein Array von Elementen befindet, auf das der Benutzer Zugriff hat. Suchen Sie das Element für die Seite, von der Sie den permanenten Zugriffstoken erhalten möchten. Das Feld access_token sollte über einen permanenten Zugriffstoken verfügen. Kopieren Sie es und testen Sie es im Access Token Debugger . Unter "Expires" sollte "Never" stehen.

574
donut

Hier ist meine Lösung, die nur Graph API Explorer & Access Token Debugger verwendet:

  1. Diagramm-API-Explorer:
    • Wählen Sie Ihre App aus dem oberen rechten Dropdown-Menü
    • Wählen Sie "Benutzerzugriffstoken abrufen" aus dem Dropdown-Feld (Feld für das Zugriffsrechtstoken) und wählen Sie die erforderlichen Berechtigungen aus
    • Benutzerzugriffstoken kopieren
  2. Zugriffstoken-Debugger:
    • Füge kopiertes Token ein und drücke "Debug"
    • Drücken Sie "Zugriffstoken erweitern" und kopieren Sie das generierte, langlebige Benutzerzugriffstoken
  3. Diagramm-API-Explorer:
    • Fügen Sie das kopierte Token in das Feld "Access Token" ein
    • Machen Sie eine GET-Anfrage mit "PAGE_ID? Fields = access_token"
    • Das permanente Seitenzugriffstoken in der Antwort finden (Knoten "access_token")
  4. (Optional) Zugriffstoken-Debugger:
    • Fügen Sie das permanente Token ein und drücken Sie "Debug".
    • "Läuft ab" sollte "Nie" sein

(Getestet mit API-Version 2.9-2.11, 3.0-3.1)

65
Rob

Zusätzlich zu den empfohlenen Schritten in der Antwort " Vlasec " können Sie Folgendes verwenden:

  • Graph API Explorer , um die Abfragen durchzuführen, z. /{pageId}?fields=access_token&access_token=THE_ACCESS_TOKEN_PROVIDED_BY_GRAPH_Explorer
  • Access Token Debugger , um Informationen über das Zugriffstoken zu erhalten.
10
chuycepeda

Ich habe ein PHP Skript gemacht, um es einfacher zu machen. Eine App erstellen . Wählen Sie im Graph API Explorer Ihre App aus, und rufen Sie ein Benutzertoken mit der Berechtigung manage_pages und publish_pages ab. Die ID Ihrer Seite finden Sie am unteren Rand der Info-Seite. Füllen Sie die Konfigurationsvariablen aus und führen Sie das Skript aus.

<?php
$args=[
    'usertoken'=>'',
    'appid'=>'',
    'appsecret'=>'',
    'pageid'=>''
];

echo generate_token($args);

function generate_token($args){
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.8/oauth/access_token?grant_type=fb_exchange_token&client_id={$args['appid']}&client_secret={$args['appsecret']}&fb_exchange_token={$args['usertoken']}")); // get long-lived token
    $longtoken=$r->access_token;
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.8/me?access_token={$longtoken}")); // get user id
    $userid=$r->id;
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.8/{$userid}/accounts?access_token={$longtoken}")); // get permanent token
    foreach($r->data as $d) if($d->id==$args['pageid']) return $d->access_token;
}
9
dw1

Eine weitere PHP Antwort, um das Leben leichter zu machen. Aktualisiert für Facebook Graph API 2.9. Einfach auffüllen und laden.

<?php
$args=[
/*-- Permanent access token generator for Facebook Graph API version 2.9 --*/
//Instructions: Fill Input Area below and then run this php file
/*-- INPUT AREA START --*/
    'usertoken'=>'',
    'appid'=>'',
    'appsecret'=>'',
    'pageid'=>''
/*-- INPUT AREA END --*/
];
echo 'Permanent access token is: <input type="text" value="'.generate_token($args).'"></input>';
function generate_token($args){
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.9/oauth/access_token?grant_type=fb_exchange_token&client_id={$args['appid']}&client_secret={$args['appsecret']}&fb_exchange_token={$args['usertoken']}")); // get long-lived token
    $longtoken=$r->access_token;
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.9/me?access_token={$longtoken}")); // get user id
    $userid=$r->id;
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.9/{$userid}?fields=access_token&access_token={$longtoken}")); // get permanent token
    if($r->id==$args['pageid']) $finaltoken=$r->access_token;
    return $finaltoken;
}
?>

Nachtrag: (alternativ)

In Abbildung 2.9 können Sie einen langen Zugriffstoken überspringen, indem Sie auf Access Token erweitern am unteren Rand des Tools Access Token Debugger klicken, nachdem Sie ein kurzes Zugriffstoken debuggt haben. Führen Sie mit den Informationen zu pageid und longlivedtoken den unten stehenden PHP aus, um permanenten Zugriffstoken zu erhalten.

<?php
$args=[
/*-- Permanent access token generator for Facebook Graph API version 2.9 --*/
//Instructions: Fill Input Area below and then run this php file
/*-- INPUT AREA START --*/
    'longlivedtoken'=>'',
    'pageid'=>''
/*-- INPUT AREA END --*/
];
echo 'Permanent access token is: <input type="text" value="'.generate_token($args).'"></input>';
function generate_token($args){
$r=json_decode(file_get_contents("https://graph.facebook.com/v2.9/{$args['pageid']}?fields=access_token&access_token={$args['longlivedtoken']}"));
return $r->access_token;
}
?>

Obwohl der zweite Code Ihnen viel Ärger erspart, empfehle ich Ihnen, den ersten PHP-Code auszuführen, es sei denn, Sie befinden sich in großer Eile, da Pageid und Userid miteinander verglichen werden. Der zweite Code funktioniert nicht, wenn Sie versehentlich ein Benutzertoken auswählen.

Danke an dw1 und Rob

8
Siddhant Rimal

Ich habe folgende Schritte ausprobiert: https://developers.facebook.com/docs/marketing-api/access#graph-api-Explorer

Dauer-Seitenzugriffstoken abrufen

  • Wechseln Sie zu Graph API Explorer
  • Wählen Sie Ihr app in Anwendung aus.
  • Fügen Sie das langlebige Zugriffstoken in Access Token ein.
  • Wählen Sie neben Zugriffstoken die Seite aus, für die ein Zugriffstoken erstellt werden soll. Das Zugriffstoken wird als neue Zeichenfolge angezeigt.
  • Klicken Sie auf i, um die Eigenschaften dieses Zugriffstokens anzuzeigen
  • Klicken Sie erneut auf die Schaltfläche "In Access Token Tool öffnen", um das Tool "Access Token Debugger" zu öffnen und die Eigenschaften zu überprüfen

Ein Tipp, es hat nur für mich funktioniert, wenn die Seitensprache english ist.

6
Fabian

Während ich das permanente Zugriffstoken erhielt, folgte ich den oben genannten Schritten, die Donut erwähnt. Im fünften Schritt wird jedoch beim Generieren eines permanenten Zugriffstokens das langlebige Zugriffstoken (das für 2 Monate gültig ist) nicht permanentem Zugriffstoken (das niemals abläuft) zurückgegeben. Was mir aufgefallen ist, ist die aktuelle Version von Graph API V2.5. Wenn Sie versuchen, das permanente Zugriffstoken mit V2.5 abzurufen, erhalten Sie einen langlebigen Zugriffstoken. Versuchen Sie, einen API-Aufruf mit V2.2 auszuführen. (Wenn Sie die Version im Graph-API-Explorer nicht ändern können, drücken Sie den API-Aufruf https://graph.facebook.com/v2.2/ {account_id}/accounts? access_token = {long_lived_access_token} in der neuen Registerkarte mit V2.2), erhalten Sie das permanente Zugriffstoken (which läuft nie ab)

4
baji shaik

Wenn Sie nur Seitendaten anfordern, können Sie ein Seitenzugriffstoken verwenden. Sie müssen den Benutzer nur einmal autorisieren, um das Benutzerzugriffstoken zu erhalten. Erweitern Sie die Gültigkeit auf zwei Monate und fordern Sie dann das Token für die Seite an. Dies wird alles in Szenario 5 erklärt. Beachten Sie, dass das erworbene Seitenzugriffstoken nur solange gültig ist, wie das Benutzerzugriffstoken gültig ist.

4
phwd

Neben den genannten Methoden ist es erwähnenswert, dass Sie für Server-zu-Server-Anwendungen auch diese Form eines permanenten Zugriffstokens verwenden können: App_id | app_secret Diese Art von Zugriffstoken wird als App Token bezeichnet. Es kann im Allgemeinen verwendet werden, um die Graph-API aufzurufen und öffentliche Knoten in Ihrem Anwendungs-Back-End abzufragen. __ Es wird hier erwähnt: https://developers.facebook.com/docs/facebook-login/access-tokens

3
ZeKoU

Viele dieser Beispiele funktionieren nicht. Sie sind sich nicht sicher, ob es sich um 2,9 V handelt, aber ich habe mir den Kopf gestoßen. Jedenfalls habe ich die @ dw1-Version mit Hilfe von @KFunk-Video ein wenig modifiziert und diese für 2.9 erhalten. Hoffe das hilft.

$args=[
/*-- Permanent access token generator for Facebook Graph API version 2.9 --*/
//Instructions: Fill Input Area below and then run this php file
/*-- INPUT AREA START --*/
    'usertoken'=>'',
    'appid'=>'',
    'appsecret'=>'',
    'pageid'=>''
/*-- INPUT AREA END --*/
];
echo 'Permanent access token is: <input type="text" value="'.generate_token($args).'"></input>';
function generate_token($args){
    $r = json_decode(file_get_contents("https://graph.facebook.com/v2.9/oauth/access_token?grant_type=fb_exchange_token&client_id={$args['appid']}&client_secret={$args['appsecret']}&fb_exchange_token={$args['usertoken']}")); // get long-lived token
    $longtoken=$r->access_token;
    $r=json_decode(file_get_contents("https://graph.facebook.com/{$args['pageid']}?fields=access_token&access_token={$longtoken}")); // get user id
    $finaltoken=$r->access_token;
    return $finaltoken;
}
1
Cesar Bielich

Dank @donut habe ich es geschafft, das nie ablaufende Zugriffstoken in JavaScript zu erhalten.

// Initialize exchange
fetch('https://graph.facebook.com/v3.2/oauth/access_token?grant_type=fb_exchange_token&client_id={client_id}&client_secret={client_secret}&fb_exchange_token={short_lived_token}')
.then((data) => {
    return data.json();
})
.then((json) => {
    // Get the user data
    fetch(`https://graph.facebook.com/v3.2/me?access_token=${json.access_token}`)
    .then((data) => {
        return data.json();
    })
    .then((userData) => {
        // Get the page token
        fetch(`https://graph.facebook.com/v3.2/${userData.id}/accounts?access_token=${json.access_token}`)
        .then((data) => {
            return data.json();
        })
        .then((pageToken) => {
            // Save the access token somewhere
            // You'll need it at later point
        })
        .catch((err) => console.error(err))
    })
    .catch((err) => console.error(err))
})
.catch((err) => {
    console.error(err);
})

und dann habe ich das gespeicherte Zugriffstoken so verwendet

fetch('https://graph.facebook.com/v3.2/{page_id}?fields=fan_count&access_token={token_from_the_data_array}')
.then((data) => {
    return data.json();
})
.then((json) => {
    // Do stuff
})
.catch((err) => console.error(err))

Ich hoffe, dass jemand diesen Code kürzen kann, weil er irgendwie unordentlich ist, aber es war die einzige Möglichkeit, an die ich denken könnte.

1

Anwendungsanforderungslimit erreicht (# 4) - FB API v2.1 und höher

Diese Antwort hat mich zur "ultimativen Antwort für uns" geführt und ist daher sehr verwandt. Deshalb füge ich sie hier an. Obwohl es mit den oben genannten verwandt ist, ist es anders und es scheint, dass FB den Prozess etwas vereinfacht hat.

Unsere Freigabezählungen auf unserer Website haben aufgehört zu funktionieren, als FB die API auf Version 2.1 umstellte. In unserem Fall hatten wir bereits eine FB APP und benutzten NICHT den FB Login. Also mussten wir uns ein FB APP Token besorgen, um die neuen Anfragen zu stellen. Dies ist der 23. August 2016.

  1. Gehen Sie zu: https://developers.facebook.com/tools/Explorer
  2. Wählen Sie die API-Version aus, verwenden Sie GET und fügen Sie Folgendes ein:

    /oauth/access_token?client_id={app-id}&client_secret={app-secret}&grant_type=client_credentials
    

    Sie werden Ihre App-ID und Ihre App-Geheimnummer von Ihrer App-Seite holen wollen. Hauptentwicklerseite für FB Apps

  3. Führen Sie die Diagrammabfrage aus und Sie werden sehen:

    {
       "access_token": "app-id|app-token",
       "token_type": "bearer"
    }
    

    Wo

    "App-ID"
    und
    "app-token"
    ist Ihre App-ID von Ihrer FB-App-Seite und der generierte FB-App-HASH, den Sie gerade erhalten haben.
  4. Als nächstes testen Sie Ihr neues APP-Zugriffstoken: FB-Zugriffstoken-Tester

  5. Sie sollten sehen, indem Sie das einfügen

    "app-token"
    in den Token-Tester, ein einzelnes app-basiertes Token ohne Ablaufdatum/-zeit.

In unserem Fall verwenden wir die FB js sdk, so dass wir unseren Aufruf so geändert haben (bitte beachten Sie, dass NUR die Anzahl der Freigaben und nicht die Freigabe und Anzahl der Kommentare kombiniert wie früher) :

FB.api(
    '/','GET',{
    // this is our FB app token for our FB app 
        access_token: FBAppToken,
        "id":"{$shareUrl}","fields":"id,og_object{ engagement }"
}

Das funktioniert jetzt einwandfrei. Dies erforderte viel Suche und einen offiziellen Fehlerbericht mit FB, um zu bestätigen, dass wir anfangen müssen, tokenisierte Anfragen an die FB-API zu richten. Nebenbei habe ich darum gebeten, dass sie (FB) dem Fehlercode (# 4) einen Hinweis hinzufügen, der die tokenisierte Anfrage erwähnt.

Ich habe gerade einen weiteren Bericht von einem unserer Entwickler erhalten, der besagt, dass die Anzahl unserer FB-Kommentare aufgrund des neuen Bedarfs an tokenisierten Anfragen ebenfalls nicht mehr stimmt. Daher werde ich dies entsprechend aktualisieren.

1
wittmason

Wenn Sie die App von Facebook haben, können Sie es mit der App-ID und dem App-Geheimnis versuchen.

Mögen :

access_token={your-app_id}|{your-app_secret}

es ist nicht erforderlich, das Token häufig zu ändern.

0
Niko Jojo

Ich habe diese Antwort die sich auf dieses Werkzeug bezieht das wirklich sehr geholfen hat.

Ich hoffe, dass diese Antwort noch gültig ist, wenn Sie dies lesen.

0
Bamboomy