facebook: постоянный токен доступа к странице?
Я работаю над проектом, в котором страницы facebook являются одним из источников данных. Он импортирует некоторые данные из него периодически без участия графического интерфейса. Затем мы используем веб-приложение, чтобы показать данные, которые у нас уже есть.
не вся информация является публичной. Это означает, что я должен получить доступ к данным один раз, а затем сохранить его. Однако я не знаю этого процесса, и я еще не нашел хорошего учебника по этому вопросу. Я думаю, мне нужно access_token
, Как я могу получить его от пользователя, шаг за шагом? Пользователь администратор страницы facebook, ему нужно будет добавить на страницу наше приложение FB?
EDIT: спасибо @phwd за подсказку. Я сделал учебник, Как получить постоянный маркер доступа к странице, даже с offline_access
больше не существует.
EDIT: я только что узнал, что он ответил Здесь:Long-lasting FB access-токен для сервера, чтобы вытащить информацию о странице FB
12 ответов:
следуя инструкциям, изложенным в Facebook расширение документации по маркерам страниц мне удалось получить маркер доступа к странице, который не истекает.
Я предлагаю использовать Graph API Explorer для всех этих шагов, за исключением случаев, когда указано иное.
0. Создать Приложение Facebook
если у вас уже есть приложение перейдите к шагу 1.
- на мой Приложения.
- нажмите "+ Добавить новое приложение".
- настройки приложения веб-сайта.
вам не нужно менять его разрешения или что-нибудь. Вам просто нужно приложение, которое не уйдет, прежде чем вы закончите с вашим маркером доступа.
1. Получить Токен Кратковременного Доступа Пользователя
- перейти к Graph API Explorer.
- выберите приложение, для которого вы хотите получить маркер доступа (в раскрывающемся списке " приложение меню, а не меню "Мои приложения").
- Нажмите "Получить Маркер" > "Получить Маркер Доступа Пользователя".
- во всплывающем окне на вкладке "Расширенные разрешения" установите флажок "manage_pages".
- Нажмите Кнопку "Получить Маркер Доступа".
- предоставить доступ из учетной записи Facebook, которая имеет доступ для управления целевой страницы. Обратите внимание, что если этот пользователь потеряет доступ к окончательному, никогда не истекающий маркер доступа, скорее всего, перестанет работать.
маркер, который появляется в "Доступ Поле "токен" -это ваш кратковременный токен доступа.
2. Создания Долгоживущих Маркер
после эти инструкции из документов Facebook сделайте запрос GET на
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}
ввод идентификатора и секрета вашего приложения и кратковременного токена, созданного на предыдущем шаге.
вы не удается использовать Graph API Explorer. По какой-то причине он застревает на этом запросе. Я думаю это потому, что ответ не JSON, а строка запроса. Поскольку это запрос GET, вы можете просто перейти к URL-адресу в вашем браузере.
ответ должен выглядеть так:
{"access_token":" ABC123", "token_type": "предъявитель", "expires_in": 5183791}
"ABC123" будет вашим долгоживущим маркером доступа. Вы можете положить его в Отладчик Маркеров Доступа чтобы проверить. В разделе "истекает" он должен иметь что-то вроде "2 месяцы."
3. Получить идентификатор пользователя
используя маркер долгосрочного доступа, сделайте запрос GET на
https://graph.facebook.com/v2.10/me?access_token={long_lived_access_token}
The
id
поле-это идентификатор вашей учетной записи. Вам это понадобится для следующего шага.4. Получить Постоянный Маркер Доступа К Странице
сделайте запрос GET на
https://graph.facebook.com/v2.10/{account_id}/accounts?access_token={long_lived_access_token}
ответ JSON должен иметь
data
поле, под которым находится массив элементов, к которым пользователь имеет доступ. Найдите элемент для страницы, с которой вы хотите получить постоянный маркер доступа. Элементaccess_token
поле должно иметь ваш постоянный токен доступа. Скопируйте его и протестируйте в Отладчик Маркеров Доступа. В Разделе " Истекает Срок Действия" он должен сказать "никогда".
вот мое решение, используя только Graph API Explorer & Отладчик Маркеров Доступа:
- Graph API Explorer:
- выберите приложение из верхнего правого выпадающего меню
- выберите "получить маркер доступа пользователя" из выпадающего списка (справа от поля маркер доступа) и выберите необходимые разрешения
- копировать маркер доступа пользователя
- Отладчик Маркеров Доступа:
- Вставить скопированный токен и нажмите "Отладка"
- нажмите "расширить маркер доступа" и скопируйте сгенерированный долгоживущий маркер доступа пользователя
- Graph API Explorer:
- Вставить скопированный токен в поле" токен доступа"
- сделать запрос GET с "PAGE_ID?поля=маркер доступа"
- найти постоянный маркер доступа к странице в ответе (узел "access_token")
- (Необязательно) Отладчик Маркеров Доступа:
- вставьте постоянный токен и нажмите "Debug"
- "истекает" должно быть "не"
(проверено с API версии 2.9-2.11, 3.0)
в дополнение к рекомендуемым шагам в Vlasec ответ, вы можете использовать:
- Graph API explorer для выполнения запросов, например
/{pageId}?fields=access_token&access_token=THE_ACCESS_TOKEN_PROVIDED_BY_GRAPH_EXPLORER
- Отладчик Маркеров Доступа получить информацию о маркере доступа.
Я сделал PHP-скрипт, чтобы сделать его проще. создать приложение. В Graph API Explorer выберите приложение и получите маркер пользователя с разрешением manage_pages и publish_pages. Найти ID вашей страницы в нижней части страницы. Заполните конфигурацию vars и запустите скрипт.
<?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; }
еще один PHP ответ, чтобы сделать жизнь проще. обновлено для Facebook Graph API 2.9 . Просто заполните ее и загрузите.
<?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; } ?>
добавление: (альтернатива)
график 2.9 и далее, вы можете пропустить большую часть хлопот с получением длинного маркера доступа, просто нажав Продлить Маркер Доступа в самом низу Access Token Debugger tool, после отладки короткого маркера доступа. Вооруженный информацией о
pageid
иlonglivedtoken
, запустите php ниже, чтобы получить постоянный токен доступа.<?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; } ?>
хотя второй код экономит вам много хлопот, я рекомендую запустить первый php-код, если вы не очень спешите, потому что он проверяет pageid и userid. Второй код не будет работать, если вы выбрали токен пользователя по ошибке.
Если вы запрашиваете только данные страницы, то вы можете использовать маркер доступа страницы. Вам нужно будет только авторизовать пользователя один раз, чтобы получить маркер доступа пользователя; продлить его до двух месяцев действия, а затем запросить маркер для страницы. Все это объясняется в сценарий 5. Обратите внимание, что приобретенный маркер доступа к странице действителен только до тех пор, пока действителен маркер доступа пользователя.
при получении постоянного маркера доступа я следовал выше 5 шагов как Донат упоминается. Однако на 5-м шаге при создании постоянного токена доступа он возвращает долгоживущий токен доступа(который действителен в течение 2 месяцев), а не постоянный токен доступа(который никогда не истекает). я заметил, что текущая версия Graph API-это V2.5. Если вы пытаетесь получить постоянный токен доступа с V2.5, он дает долгоживущий токен доступа.Попробуйте сделать вызов API с V2. 2(Если вы не являетесь возможность изменить версию в Graph api explorer, нажмите вызов API https://graph.facebook.com/v2.2/{account_id}/accounts?access_token={long_lived_access_token} в новой вкладке с V2. 2) тогда вы получите постоянный токен доступа(который никогда не истекает)
Я пробовал эти шаги: https://developers.facebook.com/docs/marketing-api/access#graph-api-explorer
Получить Постоянный Маркер Доступа К Странице
- перейдите в Graph API Explorer
- выберите app на приложение
- вставьте долгоживущий маркер доступа в Маркер Доступа
- рядом с Маркер Доступа, выберите нужную страницу маркер доступа. Маркер доступа отображается в виде новой строки.
- клик я чтобы увидеть свойства этого маркера доступа
- Нажмите кнопку" Открыть в Access Token Tool "еще раз, чтобы открыть инструмент" Access Token Debugger " для проверки свойств
один совет, он работал только для меня, когда язык этой страницы английский язык.
В дополнение к перечисленным методам стоит отметить, что для сервера-сервер приложений, вы также можете использовать эту форму перманентного маркера доступа: app_id|app_secret Этот Тип маркера доступа называется маркером приложения. Как правило, его можно использовать для вызова Graph API и запроса общедоступных узлов в фоновом режиме приложения. Это упоминается здесь:https://developers.facebook.com/docs/facebook-login/access-tokens
достигнут предел запроса Приложения (#4) - FB API v2.1 и выше
этот ответ привел меня к" окончательному ответу для нас", и поэтому он очень связан, поэтому я добавляю его здесь. Хотя это связано с вышеизложенным, это отличается, и кажется, что FB немного упростил процесс.
наши счетчики обмена на нашем сайте перестали работать, когда FB перевернул api до v 2.1. В нашем случае у нас уже было приложение FB, и мы не использовали логин FB. Ну и что мы нужно было сделать, чтобы получить FB App Token сделать новые запросы. Это по состоянию на август. 23 2016.
- перейти к: https://developers.facebook.com/tools/explorer
выберите версию api, а затем используйте GET и вставьте следующее:
/oauth/access_token?client_id={app-id}&client_secret={app-secret}&grant_type=client_credentials
вы хотите взять свой идентификатор и свой приложения со страницы вашего приложения. главный разработчик приложений FB страница
запустите запрос графика, и вы увидите:
{ "access_token": "app-id|app-token", "token_type": "bearer" }
здесь
"app-id"и"app-token"будет Ваш идентификатор приложения со страницы приложения FB и сгенерированный хэш приложения FB, который вы только что получили.далее проверьте свой новый маркер доступа к приложению:тестер маркеров доступа FB
вы должны увидеть, оклейкой
"app-token"в тестер токенов, один токен на основе приложения без срок годности/время действия.в нашем случае мы используем FB JS sdk, поэтому мы изменили наш вызов, чтобы быть таким (обратите внимание на это получает только количество акций, а не Доля и количество комментариев в сочетании, как это было раньше):
FB.api( '/','GET',{ // this is our FB app token for our FB app access_token: FBAppToken, "id":"{$shareUrl}","fields":"id,og_object{ engagement }" }
теперь это работает правильно. Это потребовало много поиска и официального отчета об ошибке с FB, чтобы подтвердить, что мы должны начать делать маркированные запросы к api FB. В стороне я сделал запрос, что они (FB) добавляют ключ к коду ошибки (#4), который упоминает маркированный запрос.
Я только что получил еще один отчет от одного из наших разработчиков, что наш счетчик комментариев FB также нарушен из-за новой необходимости в маркированных запросах, поэтому я обновлю это соответствующим образом.
многие из этих примеров не работают, не уверен, что это из-за 2.9 v выходит, но я стучал головой. В любом случае я взял версию @dw1 и немного изменил ее с помощью видео @KFunk и получил эту работу для меня за 2.9. Надеюсь, это поможет.
$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; }
нашел ответ что относится к инструмент что действительно очень помогло.
Я надеюсь, что этот ответ все еще действителен, когда вы читаете это.