Pracuję nad projektem, który ma strony na Facebooku jako jedno ze źródeł danych. Okresowo importuje z niego niektóre dane bez graficznego interfejsu użytkownika. Następnie używamy aplikacji internetowej do wyświetlania danych, które już mamy.
Nie wszystkie informacje są jawne. Oznacza to, że muszę raz uzyskać dostęp do danych, a następnie je zachować. Jednak nie znam tego procesu i nie znalazłem jeszcze dobrego samouczka na ten temat. Chyba potrzebuję access_token
, w jaki sposób mogę uzyskać od użytkownika, krok po kroku? Użytkownik jest administratorem strony na Facebooku, czy będzie musiał dodać naszą aplikację FB do strony?
EDYCJA: Dzięki @phwd za wskazówkę. Zrobiłem samouczek, jak uzyskać stały token dostępu do strony, nawet jeśli offline_access
już nie istnieje.
EDYCJA: Właśnie dowiedziałem się, że odpowiedź tutaj: Długotrwały token dostępu FB dla serwera, aby pobrać informacje o stronie FB
Odpowiedzi:
Postępując zgodnie z instrukcjami zawartymi w dokumentacji rozszerzającej tokeny stron Facebooka, udało mi się uzyskać token dostępu do strony, który nie wygasa.
Sugeruję użycie Eksploratora API Graph dla wszystkich tych kroków, chyba że zaznaczono inaczej.
0. Utwórz aplikację Facebook
Jeśli masz już aplikację , przejdź do kroku 1.
Nie musisz zmieniać jego uprawnień ani nic. Potrzebujesz tylko aplikacji, która nie zniknie, zanim skończysz korzystać z tokena dostępu.
1. Zdobądź token dostępu krótkoterminowego użytkownika
Token pojawiający się w polu „Token dostępu” jest tokenem dostępu krótkotrwałego.
2. Wygeneruj Token Długiego Życia
Postępuj zgodnie z instrukcjami z dokumentów Facebooka, zgłoś prośbę GET na adres
wpisanie identyfikatora i hasła aplikacji oraz krótkotrwałego tokena wygenerowanego w poprzednim kroku.
Nie można używać Eksploratora API Graph . Z jakiegoś powodu utknął na tej prośbie. Myślę, że dzieje się tak, ponieważ odpowiedzią nie jest JSON, ale ciąg zapytania. Ponieważ jest to żądanie GET, możesz po prostu przejść do adresu URL w przeglądarce.
Odpowiedź powinna wyglądać następująco:
„ABC123” będzie Twoim długowiecznym tokenem dostępu. Możesz go umieścić w narzędziu Debuger tokenu dostępu w celu weryfikacji. W sekcji „Wygasa” powinno być coś w stylu „2 miesiące”.
3. Uzyskaj identyfikator użytkownika
Korzystając z tokena dostępnego przez długi czas, wykonaj polecenie GET na adres
id
Pole jest Twój identyfikator konta. Będziesz go potrzebować do następnego kroku.4. Uzyskaj token stałego dostępu do strony
Złóż wniosek GET na adres
Odpowiedź JSON powinna zawierać
data
pole, w którym znajduje się tablica elementów, do których użytkownik ma dostęp. Znajdź element strony, z której chcesz uzyskać token stałego dostępu. Toaccess_token
pole powinno mieć token stałego dostępu. Skopiuj i przetestuj w Debugerze tokena dostępu . W polu „Wygasa” powinno być napisane „Nigdy”.źródło
message: "(#100) Tried accessing nonexisting field (accounts) on node type (Page)", type: "OAuthException", code: 100
przejdzie do ostatniego kroku, a przeglądarka właśnie wróci: przejdź do debugera tokena dostępu FB i przetestuj swój długo-żywy_token_dostępu. Konsekwentnie zauważyłem, że po kilku minutach, jeśli wrócisz i ponownie sprawdzisz long_lived_access_token, debuger tokenu dostępu FB wskaże, że ten token jest trwały (wygasa: nigdy)(#100) Tried accessing nonexisting field (accounts) on node type (Page)
błąd ... Nie mogę przejść do kroku 5 ... Mimo to dziękuję ... LE: Sprawdź ostatnią część odpowiedzi udzielonej przez @Vlasec. Możesz uzyskać token stałego dostępu, wysyłając zapytanie / {pageId}? Fields = access_token & access_token = {long_lived_access_token}, więc problem został rozwiązany.https://graph.facebook.com/v2.7/{page_id}?fields=access_token&access_token={long_lived_access_token}
Oto moje rozwiązanie wykorzystujące tylko Graph API Explorer i Access Token Debugger :
(Testowane z API w wersji 2.9-2.11, 3.0-3.1)
źródło
Oprócz zalecanych kroków w odpowiedzi Vlasec możesz także użyć:
/{pageId}?fields=access_token&access_token=THE_ACCESS_TOKEN_PROVIDED_BY_GRAPH_EXPLORER
źródło
Zrobiłem skrypt PHP, aby to ułatwić. Utwórz aplikację . W Graph API Explorer wybierz swoją aplikację i uzyskaj token użytkownika z uprawnieniami manage_pages i public_pages. Znajdź identyfikator swojej strony u dołu strony Informacje. Wypełnij zmienne konfiguracji i uruchom skrypt.
źródło
Kolejna odpowiedź PHP, aby ułatwić życie. Zaktualizowano dla Facebook Graph API 2.9 . Wystarczy wypełnić i załadować.
Dodatek: (alternatywnie)
Wykres 2.9 i następne, możesz pominąć wiele problemów związanych z uzyskaniem tokena o długim dostępie, po prostu klikając polecenie Rozszerz token dostępu na dole narzędzia Debuger tokenu dostępu , po debugowaniu tokena o krótkim dostępie. Uzbrojony w informacje o
pageid
ilonglivedtoken
, uruchom php poniżej, aby uzyskać token stałego dostępu.Chociaż drugi kod pozwala zaoszczędzić wiele kłopotów, zalecam uruchomienie pierwszego kodu php, chyba że się spieszysz, ponieważ sprawdza on pageid i identyfikator użytkownika. Drugi kod nie zadziała, jeśli przez pomyłkę wybierzesz token użytkownika.
źródło
Graph API Explorer
w polu Aplikacja, zanim będziesz mógł poprosić o token.v2.9
drugi telefon i to zadziałało dla mnie. WierdPróbowałem tych kroków: https://developers.facebook.com/docs/marketing-api/access#graph-api-explorer
Uzyskaj token stałego dostępu do strony
Jedna wskazówka, działało to tylko dla mnie, gdy językiem strony jest angielski .
źródło
Jeśli żądasz tylko danych strony, możesz użyć tokena dostępu do strony. Musisz tylko raz autoryzować użytkownika, aby uzyskać token dostępu; przedłuż go do dwóch miesięcy, a następnie poproś o token strony. Wszystko to wyjaśniono w scenariuszu 5 . Zauważ, że uzyskany token dostępu do strony jest ważny tylko tak długo, jak długo token dostępu użytkownika jest ważny.
źródło
Otrzymując token stałego dostępu wykonałem ponad 5 kroków, o których wspomniał Donut . Jednak w 5. kroku podczas generowania tokena stałego dostępu zwraca on token długoterminowego dostępu (który jest ważny przez 2 miesiące), a nie token stałego dostępu (który nigdy nie wygasa). Zauważyłem, że obecna wersja Graph API to V2.5. Jeśli próbujesz uzyskać token stałego dostępu za pomocą V2.5, daje to token dostępu długowiecznego. Spróbuj wykonać wywołanie API za pomocą V2.2 (jeśli nie możesz zmienić wersji w eksploratorze graficznym interfejsu API, naciśnij wywołanie API https: //graph.facebook.com/v2.2/ { account_id } / account? access_token = {long_lived_access_token} w nowej karcie z V2.2) wtedy dostaniesz token stałego dostępu (który nigdy nie wygasa)
źródło
Oprócz wspomnianych metod warto wspomnieć, że w przypadku aplikacji serwer-serwer można również użyć tej formy tokena stałego dostępu: app_id | app_secret Ten typ tokenu dostępu nazywa się tokenem aplikacji. Zasadniczo można go używać do wywoływania interfejsu API Graph i zapytania o publiczne węzły w zapleczu aplikacji. Wspomniano tutaj: https://developers.facebook.com/docs/facebook-login/access-tokens
źródło
Dzięki @donut udało mi się zdobyć nigdy nie wygasający token dostępu w JavaScript.
a następnie użyłem zapisanego tokena dostępu w ten sposób
Mam nadzieję, że ktoś może przyciąć ten kod, ponieważ jest trochę niechlujny, ale był to jedyny sposób, w jaki mogłem wymyślić.
źródło
Jeśli masz aplikację na Facebooku, możesz spróbować z app-id i app-secret.
Lubić :
nie będzie wymagać częstej zmiany tokena.
źródło
Osiągnięto limit żądań aplikacji (# 4) - FB API v2.1 i wyższy
Ta odpowiedź doprowadziła mnie do „ostatecznej odpowiedzi dla nas”, więc jest bardzo powiązana, dlatego dołączam ją tutaj. Chociaż jest to związane z powyższym, jest inne i wydaje się, że FB uprościło ten proces.
Nasze liczenie udostępniania w naszej witrynie przestało działać, gdy FB przerzuciło interfejs API do wersji 2.1. W naszym przypadku mieliśmy już aplikację FB i NIE korzystaliśmy z logowania FB. Musieliśmy więc zdobyć token FB APP, aby wysyłać nowe żądania. To jest na 23 sierpnia 2016.
Wybierz wersję interfejsu API, a następnie użyj polecenia GET i wklej następujące elementy:
Będziesz chciał pobrać identyfikator aplikacji i sekret aplikacji ze strony aplikacji. Główna strona programisty FB Apps
Uruchom zapytanie dotyczące wykresu, a zobaczysz:
Gdzie
i będzie Twoim identyfikatorem aplikacji ze strony aplikacji FB i wygenerowaną właśnie otrzymaną funkcją HASH aplikacji FB.Następnie przetestuj swój nowy token dostępu do aplikacji: tester tokenów dostępu FB
Powinieneś zobaczyć, wklejając
do testera tokenów, token oparty na jednej aplikacji bez daty / godziny wygaśnięcia.W naszym przypadku korzystamy z FB js sdk, więc zmieniliśmy nasze wywołanie, aby było tak (pamiętaj, że TYLKO pobiera liczbę udziałów, a nie łączoną liczbę udziałów i komentarzy, tak jak kiedyś) :
To działa teraz poprawnie. Wymagało to wielu poszukiwań i oficjalnego zgłoszenia błędu z FB, aby potwierdzić, że musimy zacząć wysyłać tokeny do interfejsu API FB. Na marginesie poprosiłem, aby (FB) dodali wskazówkę do kodu błędu (# 4), który wspomina o tokenizowanym żądaniu.
Właśnie dostałem kolejny raport od jednego z naszych deweloperów, że liczba komentarzy FB jest również zepsuta z powodu nowej potrzeby tokenizowanych żądań, więc odpowiednio go zaktualizuję.
źródło
Wiele z tych przykładów nie działa, nie jestem pewien, czy to z powodu wyjścia 2.9v, ale waliłem głową. W każdym razie wziąłem wersję @ dw1 i trochę ją zmodyfikowałem przy pomocy wideo @KFunk i sprawiłem, że działała dla mnie w wersji 2.9. Mam nadzieję że to pomoże.
źródło
Od kwietnia 2020 r. Moje dotychczasowe stałe tokeny stron zaczęły wygasać od 1 do 12 godzin. Zacząłem używać tokenów użytkownika z
manage_pages
uprawnieniami do osiągnięcia poprzedniego celu (odpytywanie o zdarzenia strony). Te tokeny wydają się być trwałe.Stworzyłem skrypt Pythona na podstawie informacji znalezionych w tym poście, hostowany na github.com/k-funk/facebook_permanent_token , aby śledzić, jakie parametry są wymagane i jakie metody uzyskania stałego tokena działają.
źródło
Znalazłem odpowiedź, która odnosi się do tego narzędzia, które naprawdę bardzo pomogło.
Mam nadzieję, że ta odpowiedź będzie nadal aktualna podczas czytania.
źródło