Facebook: постоянный токен доступа к странице?
Я работаю над проектом, который имеет страницы facebook как один из его источников данных. Он периодически импортирует некоторые данные из него без участия графического интерфейса. Затем мы используем веб-приложение для отображения данных, которые у нас уже есть.
Не вся информация является общедоступной. Это означает, что я должен получить доступ к данным один раз, а затем сохранить его. Тем не менее, я не знаю этого процесса, и пока не нашел хорошего учебника. Думаю, мне нужен access_token
, как я могу получить его от пользователя, шаг за шагом? Пользователь является администратором страницы facebook, нужно ли ему добавить на страницу какое-нибудь приложение FB на странице?
EDIT: Спасибо @phwd за подсказку. Я сделал учебник о том, как получить токен доступа к постоянной странице, даже если offline_access
больше не существует.
EDIT: я только что узнал, что он ответил здесь: Долгосрочный токен FB для сервера, чтобы вытащить информацию о странице FB
Ответы
Ответ 1
Следуя инструкциям, изложенным в расширении документации к токенам страниц, я смог получить токен доступа к странице, который не истекает.
Я предлагаю использовать 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}
введите идентификатор вашего приложения и секретный код и кратковременный токен, сгенерированный на предыдущем шаге.
Вы не можете использовать API-интерфейс Graph API. По какой-то причине он застревает по этому запросу. Я думаю, потому что ответ не JSON, а строка запроса. Поскольку это запрос GET, вы можете просто перейти к URL-адресу в своем браузере.
Ответ должен выглядеть следующим образом:
{ "access_token": " ABC123", "token_type": "носителем", "expires_in": 5183791}
"ABC123" будет вашим долговременным токеном доступа. Вы можете поместить его в Access Token Debugger для проверки. В разделе "Истекает" он должен иметь что-то вроде "2 месяца".
3. Получить идентификатор пользователя
Используя долгоживущий токен доступа, сделайте запрос GET для
https://graph.facebook.com/v2.10/me?access_token= {long_lived_access_token}
Поле id
- это идентификатор вашей учетной записи. Это понадобится вам для следующего шага.
4. Получить постоянный токен доступа к странице
Сделайте запрос GET для
https://graph.facebook.com/v2.10/ {account_id}/accounts? access_token = {long_lived_access_token}
Ответ JSON должен иметь поле data
, под которым находится массив элементов, к которым пользователь имеет доступ. Найдите элемент для страницы, на которой вы хотите использовать токен постоянного доступа. Поле access_token
должно иметь ваш токен постоянного доступа. Скопируйте его и протестируйте в Access Token Debugger. В разделе "Истекает" он должен сказать "Никогда".
Ответ 2
Вот мое решение, использующее только Graph API Explorer и Access Token Debugger:
- Graph API Explorer:
- Выберите ваше приложение в правом верхнем раскрывающемся меню
- В раскрывающемся списке "Получить токен доступа пользователя" (поле справа от маркера доступа) выберите необходимые разрешения.
- Скопировать токен доступа пользователя
- Отладчик токена доступа:
- Вставьте скопированный токен и нажмите "Отладка"
- Нажмите "Расширить токен доступа" и скопируйте сгенерированный долгосрочный токен доступа пользователя.
- Graph API Explorer:
- Вставьте скопированный токен в поле "Токен доступа"
- Сделайте запрос GET с "PAGE_ID? Fields = access_token"
- Найти постоянный токен доступа к странице в ответе (узел "access_token")
- (Необязательно) Access Token Debugger:
- Вставьте постоянный токен и нажмите "Отладка"
- "Истекает" должно быть "Никогда"
(Протестировано с API версии 2.9-2.11, 3.0-3.1)
Ответ 3
В дополнение к рекомендуемым шагам в ответе Vlasec вы можете использовать:
- Graph API explorer, чтобы сделать запросы, например.
/{pageId}?fields=access_token&access_token=THE_ACCESS_TOKEN_PROVIDED_BY_GRAPH_EXPLORER
- Отключить токен отклика, чтобы получить информацию о токене доступа.
Ответ 4
Я сделал скрипт PHP, чтобы сделать его проще. Создать приложение. В Graph API Explorer выберите ваше приложение и получите токен пользователя с разрешения manage_pages и publish_pages. Найдите идентификатор своей страницы в нижней части страницы "О программе". Заполните конфигурационные переменные и запустите скрипт.
<?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;
}
Ответ 5
Другой ответ 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, вы можете пропустить большую часть проблем с получением токена доступа, просто нажав Расширить токен доступа внизу "Инструмент отладки токена" , после отладки маркера доступа. Вооружившись информацией о 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. Второй код не будет работать, если вы выберете пользовательский токен по ошибке.
Благодаря dw1 и Rob
Ответ 6
Я попробовал эти шаги: https://developers.facebook.com/docs/marketing-api/access#graph-api-explorer
Получить постоянный токен доступа к странице
- Перейти к Graph API Explorer
- Выберите приложение в приложении
- Вставьте долгосрочный токен доступа в Access Token
- Рядом с токеном доступа выберите страницу, для которой требуется токен доступа. Маркер доступа отображается в виде новой строки.
- Нажмите i, чтобы увидеть свойства этого токена доступа
- Нажмите кнопку "Открыть в Access Token Tool" еще раз, чтобы открыть "Access Token Debugger" инструмент для проверки свойств
Один совет, он работал только для меня, когда язык страницы английский.
Ответ 7
Если вы запрашиваете только данные страницы, вы можете использовать токен доступа к странице. Вам нужно будет только один раз разрешить пользователю, чтобы получить токен доступа пользователя; продлить его до двухмесячного срока, а затем запросить маркер для страницы. Все это объясняется в Сценарий 5. Обратите внимание, что полученный токен доступа к странице действителен только до тех пор, пока токен доступа пользователя действителен.
Ответ 8
При получении токена постоянного доступа я следовал за 5 шагами в качестве Donut. Однако на 5-м шаге при создании маркера постоянного доступа он возвращает долгоживущий токен доступа (который действителен в течение 2 месяцев), а не постоянный токен доступа (который никогда не истекает). я заметил, что текущая версия Graph API - это V2.5. Если вы пытаетесь получить токен постоянного доступа с V2.5, он предоставляет долговременный токен доступа. Попробуйте сделать API-вызов с V2.2 (если вы не можете изменить версию в графическом api explorer, нажмите на вызов API https://graph.facebook.com/v2.2/ {account_id}/accounts? access_token = {long_lived_access_token} на новой вкладке с V2.2), тогда вы получить токен постоянного доступа (который никогда не истекает)
Ответ 9
В дополнение к упомянутым методам стоит упомянуть, что для приложений сервер-сервер вы также можете использовать эту форму токена постоянного доступа:
app_id | app_secret
Этот токен доступа называется App Token. Обычно его можно использовать для вызова Graph API и запроса для общедоступных узлов в вашем приложении.
Здесь упоминается: https://developers.facebook.com/docs/facebook-login/access-tokens
Ответ 10
Достигнут предел запроса приложения (# 4) - FB API v2.1 и выше
Этот ответ привел меня к "окончательному ответу для нас", и поэтому он очень сильно связан, поэтому я добавляю его здесь. Хотя это связано с вышеизложенным, оно отличается, и кажется, что FB упростил процесс.
Наш общий счет на нашем сайте прекратил работу, когда FB перевернул api до версии 2.1. В нашем случае у нас уже был FB APP, и мы НЕ использовали логин FB. Так что нам нужно было сделать токен FB APP, чтобы сделать новые запросы. Это по состоянию на 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 и сгенерированной вами HB App HASH.
-
Далее выполните проверку нового токена доступа APP: Тестер токена доступа 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, чтобы подтвердить, что мы должны начать делать токенизированные запросы в FB api. В стороне я попросил, чтобы они (FB) добавили ключ к коду ошибки (# 4), в котором упоминается токенированный запрос.
Я только что получил еще один отчет от одного из наших разработчиков о том, что наш счетчик комментариев FB также нарушен из-за новой потребности в токенизированных запросах, поэтому я буду обновлять его соответствующим образом.
Ответ 11
Следуйте https://www.youtube.com/watch?v=FtboHvg3HtY (который ссылается на этот вопрос) дословно. Используйте свой браузер, где он/она, используя только графический проводник, не даст вам постоянного токена.
Ответ 12
Многие из этих примеров не работают, не уверен, что из-за выхода 2.9v, но я ударился головой. В любом случае я взял версию @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;
}
Ответ 13
Благодаря @donut мне удалось получить бесконечный токен доступа в JavaScript.
// 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);
})
а потом я использовал сохраненный токен доступа, как это
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))
Я надеюсь, что кто-то может обрезать этот код, потому что он немного грязный, но это был единственный способ, о котором я мог подумать.
Ответ 14
Я нашел этот ответ, который относится к этому инструменту, который действительно очень помог.
Я надеюсь, что этот ответ остается в силе, когда вы читаете это.
Ответ 15
Если у вас есть приложение для Facebook, вы можете попробовать использовать app-id & app-secret.
Подобно:
access_token={your-app_id}|{your-app_secret}
не требуется часто менять токен.