Я работаю над проектом, в котором одним из источников данных являются страницы на Facebook. Он импортирует некоторые данные из него периодически, без участия GUI. Затем мы используем веб-приложение, чтобы показать данные, которые у нас уже есть.
Не вся информация является публичной. Это означает, что я должен получить доступ к данным один раз, а затем сохранить их. Тем не менее, я не знаю процесс, и я еще не нашел хороший учебник по этому вопросу. Я думаю, мне нужно access_token
, как я могу получить его от пользователя, шаг за шагом? Пользователь является администратором страницы Facebook, должен ли он добавить какое-нибудь наше приложение FB на страницу?
РЕДАКТИРОВАТЬ: Спасибо @phwd за совет. Я сделал учебник, как получить постоянный токен доступа к странице, даже если он offline_access
больше не существует.
РЕДАКТИРОВАТЬ: Я только что узнал, что он ответил здесь: долгосрочный токен доступа FB для сервера, чтобы получить информацию о странице FB
Ответы:
Следуя инструкциям, изложенным в документации по расширению маркеров страниц Facebook, я смог получить токен доступа к странице, срок действия которого не истек.
Я предлагаю использовать Graph API Explorer для всех этих шагов, если не указано иное.
0. Создать приложение Facebook
Если у вас уже есть приложение , перейдите к шагу 1.
Вам не нужно менять его разрешения или что-то еще. Вам просто нужно приложение, которое не исчезнет, прежде чем вы закончите с вашим токеном доступа.
1. Получить токен доступа для короткоживущего пользователя
Токен, который появляется в поле «Токен доступа», является вашим недолговечным токеном доступа.
2. Сгенерируйте маркер доступа с длительным сроком действия
Следуя этим инструкциям из документации Facebook, сделайте запрос GET
ввод идентификатора и секрета вашего приложения, а также кратковременного токена, созданного на предыдущем шаге.
Вы не можете использовать Graph API Explorer . По какой-то причине он застревает на этом запросе. Я думаю, что это потому, что ответ не JSON, а строка запроса. Поскольку это запрос GET, вы можете просто перейти по URL в вашем браузере.
Ответ должен выглядеть так:
«ABC123» будет вашим долгожданным токеном доступа. Вы можете поместить его в Access Token Debugger для проверки. Под «Истекает» должно быть что-то вроде «2 месяца».
3. Получить идентификатор пользователя
Используя маркер долговременного доступа, сделайте запрос GET для
id
Поле ваш идентификатор учетной записи. Вам понадобится это для следующего шага.4. Получить постоянный токен доступа к странице
Сделать запрос GET
Ответ JSON должен иметь
data
поле, под которым находится массив элементов, к которым у пользователя есть доступ. Найдите элемент для страницы, с которой вы хотите получить токен постоянного доступа.access_token
Поле должно иметь фишку ваш постоянный доступ. Скопируйте его и протестируйте в отладчике токенов доступа . В поле «Срок действия» следует указать «Никогда».источник
message: "(#100) Tried accessing nonexisting field (accounts) on node type (Page)", type: "OAuthException", code: 100
зайдите в FB Access Token Debugger и протестируйте свой long_lived_access_token. Неизменно я видел , что через несколько минут, если вернуться назад и снова проверьте long_lived_access_token ФБ Токен доступа Debugger будет указать , что этот маркер является постоянным (не истекает: никогда)(#100) Tried accessing nonexisting field (accounts) on node type (Page)
ошибку ... Не удалось перейти к шагу 5 ... Еще, спасибо ... LE: ознакомьтесь с последней частью ответа, предоставленной @Vlasec. Вы можете получить маркер постоянного доступа, запросив / {pageId}? Fields = access_token & access_token = {long_lived_access_token}, чтобы устранить проблему.https://graph.facebook.com/v2.7/{page_id}?fields=access_token&access_token={long_lived_access_token}
Вот мое решение, использующее только Graph API Explorer и Access Token Debugger :
(Протестировано с API версии 2.9-2.11, 3.0-3.1)
источник
В дополнение к рекомендуемым шагам в ответе Vlasec , вы можете использовать:
/{pageId}?fields=access_token&access_token=THE_ACCESS_TOKEN_PROVIDED_BY_GRAPH_EXPLORER
источник
Я сделал скрипт PHP, чтобы сделать его проще. Создать приложение . В Graph API Explorer выберите ваше приложение и получите токен пользователя с правами manage_pages и publish_pages. Найдите идентификатор своей страницы в нижней части страницы «О программе». Заполните config vars и запустите скрипт.
источник
Другой ответ PHP, чтобы сделать жизнь проще. Обновлено для Facebook Graph API 2.9 . Просто заполните и загрузите.
Приложение: (альтернатива)
На диаграмме 2.9 и далее вы можете пропустить большую часть хлопот, связанных с получением токена длительного доступа, просто щелкнув Расширить маркер доступа в нижней части средства отладчика токена доступа после отладки токена короткого доступа. Вооружившись информацией о
pageid
иlonglivedtoken
, запустите php ниже, чтобы получить токен постоянного доступа.Хотя второй код избавляет вас от хлопот, я рекомендую запускать первый php-код, если вы не слишком торопитесь, потому что он перепроверяет pageid и userid. Второй код не сработает, если вы ошибочно выберете токен пользователя.
источник
Graph API Explorer
в поле «Приложение», прежде чем вы сможете запросить токен.v2.9
во втором звонке, и это сработало для меня. WierdЯ попробовал эти шаги: https://developers.facebook.com/docs/marketing-api/access#graph-api-explorer
Получить постоянный токен доступа к странице
Один совет, он работал только для меня, когда язык страницы английский .
источник
Если вы запрашиваете только данные страницы, вы можете использовать токен доступа к странице. Вам нужно будет только авторизовать пользователя один раз, чтобы получить токен доступа пользователя; продлите его до двух месяцев, затем запросите токен для страницы. Это все объясняется в сценарии 5 . Обратите внимание, что полученный токен доступа к странице действителен только в течение срока действия токена доступа пользователя.
источник
Получая токен постоянного доступа, я выполнил 5 шагов, как упоминал Donut . Однако на 5-м шаге при создании токена постоянного доступа возвращается токен долгосрочного доступа (действителен в течение 2 месяцев), а не токен постоянного доступа (срок действия которого никогда не истекает). Я заметил, что текущая версия Graph API - V2.5. Если вы пытаетесь получить токен постоянного доступа с V2.5, то он предоставляет долгоживущий токен доступа. Попробуйте выполнить вызов API с помощью V2.2 (если вы не можете изменить версию в проводнике Graph API, нажмите на вызов API https: //graph.facebook.com/v2.2/ {account_id} / accounts? access_token = {long_lived_access_token} в новой вкладке с V2.2), тогда вы получите токен постоянного доступа (который никогда не истекает)
источник
В дополнение к упомянутым методам стоит упомянуть, что для межсерверных приложений вы также можете использовать эту форму токена постоянного доступа: app_id | app_secret Этот тип токена доступа называется App Token. Как правило, его можно использовать для вызова API-интерфейса Graph и запроса общедоступных узлов в бэкэнде вашего приложения. Упоминается здесь: https://developers.facebook.com/docs/facebook-login/access-tokens
источник
Благодаря @donut мне удалось получить бесконечный токен доступа в JavaScript.
а потом я использовал сохраненный токен доступа, как это
Я надеюсь, что кто-то может урезать этот код, потому что он немного грязный, но это был единственный способ, о котором я мог думать.
источник
Если у вас есть приложение Facebook, вы можете попробовать с app-id & app-secret.
Подобно :
не требуется часто менять токен.
источник
Достигнут предел заявки (# 4) - FB API v2.1 и выше
Этот ответ привел меня к «окончательному ответу для нас», и поэтому он очень тесно связан, поэтому я добавляю его здесь. Хотя это связано с вышеизложенным, оно отличается, и, похоже, FB несколько упростило этот процесс.
Наш счет обмена на нашем сайте перестал работать, когда FB перевернул API до версии 2.1. В нашем случае у нас уже было приложение FB, и мы НЕ использовали логин FB. Итак, нам нужно было получить токен FB APP для выполнения новых запросов. Это по состоянию на 23 августа 2016 года.
Выберите версию API и затем используйте GET и вставьте следующее:
Вы хотите пойти захватить ваш идентификатор приложения и ваше приложение в тайне от вашей страницы приложения. Главная страница разработчиков FB Apps
Запустите запрос графа, и вы увидите:
куда
и будет идентификатором вашего приложения на странице приложения FB и сгенерированным хешем приложения FB, который вы только что получили.Далее проверьте ваш новый токен доступа APP: FB Access Token tester
Вы должны увидеть, вставив
в тестер токенов, один токен на основе приложения без даты и времени истечения.В нашем случае мы используем FB js sdk, поэтому мы изменили наш вызов так, чтобы он был таким (обратите внимание, что ТОЛЬКО получает количество акций, а не количество акций и комментариев, объединенных как раньше) :
Теперь это работает правильно. Это потребовало много поиска и официального сообщения об ошибке с FB, чтобы подтвердить, что мы должны начать делать токенизированные запросы к API FB. Кроме того, я попросил, чтобы они (FB) добавили ключ к коду ошибки (# 4), в котором упоминается токенизированный запрос.
Я только что получил еще одно сообщение от одного из наших разработчиков, что наш счетчик комментариев FB также нарушен из-за новой потребности в токенизированных запросах, поэтому я обновлю это соответственно.
источник
Многие из этих примеров не работают, не уверен, что это из-за выхода 2.9v, но я бился головой. В любом случае я взял версию @ dw1 и немного ее изменил с помощью видео @KFunk, и у меня это получилось для 2.9. Надеюсь это поможет.
источник
По состоянию на апрель 2020 года срок действия моих ранее постоянных токенов страниц истекал между 1 и 12 часами. Я начал использовать пользовательские токены с
manage_pages
разрешением для достижения предыдущей цели (опрос событий страницы). Эти токены кажутся постоянными.Я создал скрипт Python на основе информации, найденной в этом посте, размещенной на github.com/k-funk/facebook_permanent_token , чтобы отслеживать, какие параметры требуются, и какие методы получения постоянного токена работают.
источник
Я нашел этот ответ, который относится к этому инструменту, который действительно очень помог.
Я надеюсь, что этот ответ остается в силе, когда вы читаете это.
источник