Тривалий FB-маркер доступу для сервера для отримання інформації про сторінку FB


114

Я усвідомлюю, що існує багато запитань щодо маркерів для доступу до Facebook та горя, який вони викликають, але, незважаючи на багато експериментів і читання багатьох розчаровуючих розпливчастих статей у блозі (FB та інше), я все ще намагаюся отримати чітку відповідь на мої потреби . Дозвольте мені лаконічно розбити свій процес:

  • Я створюю веб-сайт, який, на стороні сервера, повинен витягувати публікації / статуси з однієї сторінки у Facebook
  • Я адміністратор цієї сторінки у Facebook
  • Я створив додаток Facebook
  • Використовуючи провідник API API Graph Graph , я створив короткочасний ключ, підключений до свого додатка та облікового запису, який дає дозвіл на мій обліковий запис для перегляду токерів доступу до моїх сторінок
  • Я перетворив свій короткочасний ключ на довговічний ключ (60 днів) за сценарієм 4 з цього

І ось де я застряг. Мій 60-денний ключ добре працює для мого сервера, щоб витягти потрібну інформацію зі сторінки, але, наскільки я можу сказати, немає можливості програматично продовжити цей 60-денний ключ. Я також не знаю, як створити новий недовговічний ключ, не вручну переходячи до провідника API Graph Graph і не створивши його.

Оскільки мій сервер робить запити до API Facebook, а не користувальницька система (де я міг би запросити, щоб користувач знову авторизував додаток Facebook), це створює дуже незграбну систему. Оскільки Facebook застарілий offline_access, чи дійсно немає постійного способу змусити мій сервер витягувати інформацію з моєї власної сторінки? Чи дійсно мені доведеться створювати новий ключ вручну і вручну оновлювати його своїм сервером кожні 60 днів?

Або щось мені не вистачає?

Оновлення:

Покрокове керівництво, яке раніше було знайдено тут, перенесено вниз на власну відповідь .


Це круто. Я опинився в тій же ситуації і шукав інформацію на цю тему. Чи безпечно, що цей маркер не порушує жодної політики платформи FB? Просто просити бути впевненим.
onigunn

2
В власній документації @asrijaal Facebook (погляньте на сценарій 5) сказано, що ці маркери доступу до сторінки не закінчуються. Я б сказав, що можна припустити, що вони відповідають політиці Facebook.
redhotvengeance

"Я думав, що було б добре залишити чіткий покроковий процес" - не дай Бог :) Дякуємо @redhotvengeance
Стів Макгілл

У вас є помилка друку з URL-адресою маркера доступу до вашої сторінки. Повинен бути? не облікові записи та після. Провели час, намагаючись з'ясувати, чому це не працює. : P
Жорен

@Joren Дійсно - це виправлено зараз. Дякую!
redhotvengeance

Відповіді:


188

Це кроки, про які було раніше у запитанні - вони були перенесені на цю відповідь.

Виявивши, що можна створити маркер доступу до сторінки Facebook, який не закінчується (за допомогою @Igy), ось чіткий покроковий посібник для всіх, хто шукає того самого:

  1. Переконайтеся, що ви адміністратор сторінки FB, з якої хочете отримати інформацію
  2. Створіть додаток FB (має бути з тим самим обліковим записом користувача, який є адміністратором сторінки)
  3. Перейдіть до провідника API API Graph Graph
  4. У верхньому правому куті виберіть додаток FB, яке ви створили, зі спадного списку "Застосування"
  5. Натисніть "Отримати маркер доступу"
  6. Обов’язково додайте manage_pagesдозвіл
  7. Перетворіть цей короткотривалий маркер доступу у довготривалий, зробивши цей виклик API API: https://graph.facebook.com/oauth/access_token?client_id=<your FB App ID >&client_secret=<your FB App secret>&grant_type=fb_exchange_token&fb_exchange_token=<your short-lived access token>
  8. Візьміть новий довговічний маркер доступу повернувся назад
  9. Зробіть виклик API API, щоб переглянути свої облікові записи, використовуючи новий довготривалий маркер доступу: https://graph.facebook.com/me/accounts?access_token=<your long-lived access token>
  10. Візьміть access_tokenсторінку, з якої будете тягнути інформацію
  11. Підпишіть маркер, щоб побачити, що він встановлений Expires: Never!

Це повинно це робити. Тепер у вас повинен бути маркер доступу до сторінки Facebook, який не закінчується, якщо:

  • Ви змінюєте пароль свого облікового запису Facebook
  • Ви втрачаєте доступ адміністратора для цільової сторінки
  • Ви видаляєте або скасовуєте авторизацію своєї програми Facebook

Будь-яке з них призведе до недійсності маркера доступу.

Якщо ви отримуєте (#100) Tried accessing nonexisting field (accounts) on node type (Page), перейдіть до налагоджувача Access Token , скопіюйте значення User IDта скористайтеся ним, щоб замінити частину URL-адреси "я" на кроці 9.


2
Як і де робити крок 6?
Стефан Мюллер

5
@ StefanMüller Коли ви натискаєте "Отримати маркер доступу" на сторінці Провідника API API, з'являється діалогове вікно "Вибрати дозволи". manage_pagesВаріант знаходиться під Extended Permissionsвкладкою.
redhotvengeance

2
Чудово! Це працює як шарм, і це опубліковане як PAGE, а не як користувач.
Бенджамін Піет

3
Я вважаю, що це застаріло. і ви отримуєте лише маркер доступу, який закінчується приблизно через два місяці.
Кайзер Валі

7
Я все це зробив зараз, і це працює, за винятком того, що термін дії довготривалої лексеми закінчується через 2 місяці і не є нескінченним. Також налагоджувач Acces Token Debugger має посилання внизу форми для розширення маркера короткочасного доступу до довготривалого маркера доступу.
SlimIT

15

Це висвітлено в документі про зняття доступу до офлайн-доступу

Використовуйте 60-денний маркер адміністратора сторінки, щоб отримати маркер доступу до сторінки (через /PAGE_ID?fields=access_token або /me/accounts) - маркер доступу до сторінки не закінчиться.


5
Зітхнути. Дійсно, це, здається, квиток. Я міг би присягнути, що я намагався будь-якої можливої ​​комбінації цих кроків - мабуть, я пропустив той, який насправді працює. Який абсолютно заплутаний набір необхідних дій. Дякую за велику допомогу!
redhotvengeance

1
Стільки творів по всьому Інтернету, це справді працює.
Ернесто

Чи існує якийсь спосіб отримати ці 60 днів page_access_tokenза кодом у JavaScript? Сподобався спосіб отримання user_access_token> FB.getAuthResponse()['accessToken'];Спасибі!
Тулон

3

Підхід, який працює у 2019 році

Нещодавно я намагався досягти чогось подібного (до випадку використання, описаного в цій темі), але хотів переконатися, що я поважаю поточну політику Facebook, тому я провів невелике дослідження і тут я ділюся тим, що знайшов.

Мій випадок використання

Отже, як я вже говорив, мій випадок використання дуже схожий на описаний тут; це є:

  • Я займаюся деякою роботою для шкільного округу.
  • Вони використовують програмний інструмент для управління майже всім, що стосується шкільного транспорту.
  • Цей інструмент дозволяє їм надсилати сповіщення електронною поштою (абонентам), коли вони публікують сповіщення про затримку автобусів та попередження про закриття школи.
  • Багато людей у ​​спільноті стежать за організацією на своїй сторінці у Facebook, і це єдине місце, де вони шукають ці сповіщення.
  • Тож працівнику організації доводиться вручну публікувати кожне повідомлення на сторінці у Facebook (крім створення в транспортному ПЗ). Більше того, ці сповіщення з часом закінчуються (або просто видаляються до того, як вони закінчуються), тому працівник повинен повернутися пізніше, щоб також видалити їх вручну.
  • Це талія часу, тому те, що ми намагаємось тут зробити, - це розробити як просту систему, яка періодично опитує базу даних програмного засобу для отримання нових (і минулих) сповіщень та оновлює їх (тобто додає та видаляє) на сторінці Facebook.

На мій погляд, це законний випадок використання, але я не був впевнений, як його реалізувати таким чином, що відповідає політиці Facebook.

Прийнята відповідь

Я дотримувався кроків прийнятої відповіді, і вона спрацювала, за винятком того, що речі, здається, змінилися: тепер, навіть якщо створений маркер сторінки не закінчується, access to dataвін закінчується приблизно через 60 днів. Це ви також побачите, якщо дотримуватися процедури та перевірити маркер сторінки в інструменті налагодження FB Token .

Крім того, невдалим є і той факт, що створені жетони сторінки прив’язані до облікового запису користувача, оскільки якщо користувач оновить свій пароль, то маркер сторінки також буде недійсним.

Як це зробити у 2019 році

Після кількох годин досліджень я натрапив на наступну статтю з документацією у Facebook: Вхід для бізнесу для прямого бізнесу .

Виявляється, тепер можна, виконавши кроки, описані у вищевказаній статті, створити маркер сторінки, який не пов’язаний з будь-яким конкретним обліковим записом користувача Facebook і який не закінчиться (якщо тільки не вилучено додаток FB або маркер додатка, що лежить в основі) видаляється, ви знаєте ...)

Ось ось етапи та найважливіші частини:

  • Вам потрібен обліковий запис Business Manager .
    • Потрібна перевірка, і цифровий договір потрібно буде підписати.
  • Вам потрібно додати цільову сторінку Facebook до цього облікового запису.
  • Вам потрібно створити додаток Facebook і перенести цю програму в той самий обліковий запис Business Manager.
  • Додаток повинен буде пройти процес перегляду у Facebook, оскільки знадобляться наступні дозволи: manage_pagesі publish_pages.
    • Важлива примітка Щоб публікації, створені за допомогою маркера сторінки генерування, були видимі для користувачів, окрім адміністраторів додатків, цей додаток потрібно буде опублікувати та затвердити.
    • Ви все ще можете експериментувати з цією концепцією, не надсилаючи її на огляд, але публікації не будуть публічно видимими.
  • У обліковому записі Business Manager (лише після додавання вашої програми та сторінки до облікового запису) потрібно створити те, що називається користувачем системи , і надати цій адміністраторі роль (або дозволи) для цільової сторінки Facebook.
    • Користувач системи належить обліковому запису Business Manager і не прив’язаний до конкретного користувача. На сьогоднішній день я розумію, що одним із головних випадків використання користувачем системи є програмний доступ до Graph API у Facebook (саме те, що нам потрібно).
  • Тоді для цього системного користувача потрібно створити маркер доступу (який не закінчується). Вам буде запропоновано вибрати для якого додатка. Потім ви виберете цільовий додаток.
  • Потім вам потрібно буде скористатись згенерованим маркером програми, щоб створити маркер сторінки, який також не закінчується. У цій статті процедура описана як:
GET /<PAGE_ID>?fields=access_token&access_token=<SYSTEM_USER_ACCESS_TOKEN>
  • Це воно.

Цей маркер ніколи не закінчиться, і він не буде прив’язаний до конкретного користувача Facebook, тому це саме те, що нам потрібно!

Остання частина полягає в тому, щоб переконатися, що ваш додаток Facebook затверджено Facebook. Насправді це найважливіша частина, адже вся процедура марна, якщо люди не бачать наших постів.

Мені хотілося точно знати, що я можу покластися на описану вище процедуру, щоб створити щось для свого клієнта, не відкинувши це в кінцевому підсумку, тому, заздалегідь (тобто перед тим, як почати працювати над проектом мого клієнта), я пройшов весь процес створення сторінки, програми, облікового запису Business Manager тощо. Я підтвердив свою справу. Я надіслав свою заявку на розгляд. У своєму запиті я був дуже конкретним щодо мого випадку використання і підкреслив, що додаток призначений для "самостійного використання" (тобто організація розробляє додаток для себе, а не для інших користувачів Facebook). Мене схвалили не менше ніж за 24 години.

Кілька інших приміток щодо процесу перегляду додатків:

  • Мені довелося вибрати платформу для програми, тому я вибрав веб-сайт .
  • Я повинен був вказати, чому додатку потрібні два дозволи та як він буде ним користуватися.
  • Мені довелося вказати, чому рецензент не зможе увійти в свій додаток і спробувати його (тобто тому, що додаток буде використовуватися робочим процесом).
  • Для обов'язкових екрані я просто представив ручні операції в терміналі за допомогою curl утиліти (для генерації маркера сторінки та розміщення публікацій на сторінці у Facebook). Я також показав, як я використовував Business Manager для прив’язки користувача системи до сторінки та генерування маркера тощо.
  • Знову ж таки, я був дуже конкретним щодо мого використання, і думаю, що це допомогло.

Сподіваюся, ця інформація буде корисна людям із подібними випадками використання.


1

Велике спасибі @redhotvengeance за покрокове керівництво.

Через деякий час у документації Facebook чітко описано:

https://developers.facebook.com/docs/facebook-login/access-tokens/expiration-and-extension

Розширення маркерів доступу до сторінки

Програми можуть отримати маркер доступу до сторінки у користувачів адміністратора сторінки, коли вони автентифікуються з дозволу на управління_сторінок. Якщо маркер доступу користувача, який використовується для отримання цього маркера доступу до сторінки, є короткочасним, маркер доступу до сторінки також буде короткочасним.

Щоб отримати маркер доступу до сторінки, який триває довше, обмініть маркер доступу на довгоживучий, як зазначено вище, а потім запитайте маркер доступу до сторінки. Отриманий маркер доступу до сторінки не закінчується.


0

Ви також можете скопіювати та минуле з інформаційної панелі додатків у facebook. Етапи:

  1. Перейдіть на сторінку https://developers.facebook.com

  2. Виберіть додаток у верхньому правому куті сторінки (малюнок, як він виглядає)

  3. Клацніть на Месенджер із параметрів зліва (він перейде до налаштування автоматично) (малюнок, як це виглядає)
  4. Перейдіть до розділу "Генерація токенів" на сторінці. Виберіть для якої сторінки ви хочете генерувати маркер. (рис. як виглядає цей розділ)
  5. Скопіюйте та проштрирайте маркер своєї сторінки там, де вам це потрібно.

Майте на увазі, що хоча теоретично ваш маркер не закінчується, він прямо пов'язаний з тим, що коли-небудь обліковий запис facebook, на який ви увійшли. Тож скажіть, що ви змінюєте свій пароль або видаляєте дозволи між обліковим записом та додатком, то ваш маркер більше не буде дійсним.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.