Автопостинг на страницу в Facebook с помощью api

Автор stascer, 29-07-2015, 23:24:43

« назад - далее »

stascerTopic starter

Добрых суток, форумчане.

При написании автоматической рассылки новых сообщений своего блога в социальные сети возникла проблема только с фейсбуком. В данном случае я хочу постить сообщения на страницу этой соцсети.

Интересуют следующие моменты:
1) Получение долгоживущего access токена, желательно вечного, если возможно, для осуществления запросов из консоли.
2) Получение прав manage_pages для возможности постинга.

Как получить токен без редиректа на callback я не нашел. Но больше всего ужасает процесс получения расширенных прав для приложения. Чтобы получить права, нужно написать пошаговую инструкцию, как будет это использоваться и приложить 4 обязательных скриншота.

Вся проблема в том, что это настраивается в админке, а сам постинг запускается командой под кроном.

Кто-нибудь с этим сталкивался? Как вы получали токен и расширенные права? Подскажите, пожалуйста, фейсбук просто заманал уже)
Обзоры и полезные статьи о веб-сервисах, уязвимостях и о многом другом на blog.yamaker.ru
  •  


mishansaloma

Примерно месяц назад сталкивался с такой проблемой. Токен получаешь сроком (если не ошибаюсь) на месяц и потом его надо ручками продлять и вбивать в настройки сайта. Побороть это ограничение не удалось своими силами, оставлял заявку на фрилансинге - никто не отозвался. По идее на Курле можно попробовать построить автополучение токена, но как-то выглядит это муторно.
С правами не разбирался - нужен был только постинг в свою группу.
Что удивило - сервисы автопостинга умеют делать все эти вещи, но у них (даже у платных) нет АПИ для автодобавления постов.
На текущий момент от постинга в фейсбук отказались пока не разживемся финансами для привлечения к реализации или очень толкового кодера, или договоренности с сервисами автопостинга на автодобавление постов.
  •  


stascerTopic starter

#2
Цитата: mishansaloma от 30-07-2015, 08:32:19
Примерно месяц назад сталкивался с такой проблемой. Токен получаешь сроком (если не ошибаюсь) на месяц и потом его надо ручками продлять и вбивать в настройки сайта. Побороть это ограничение не удалось своими силами, оставлял заявку на фрилансинге - никто не отозвался. По идее на Курле можно попробовать построить автополучение токена, но как-то выглядит это муторно.
С правами не разбирался - нужен был только постинг в свою группу.
Что удивило - сервисы автопостинга умеют делать все эти вещи, но у них (даже у платных) нет АПИ для автодобавления постов.
На текущий момент от постинга в фейсбук отказались пока не разживемся финансами для привлечения к реализации или очень толкового кодера, или договоренности с сервисами автопостинга на автодобавление постов.

Тоже где-то читал, что токен они дают максимум на 60 дней, а как его получить без редректа нет ничего толкового в инете. Нашел у них получение debug токена, но он не работает для внешних приложений, видимо только для эксплорера.

У меня, как раз все запросы идут через курл. Самое  главное получить этот несчастный токен, а далее с помощью рефреша его можно продлевать. Есть еще вариант запросить токен, oauth поддурживает авторизацию логин-пароль, но не хочется светить в коде свою учетку.

Судя по всему большинство, кто сделал автопостинг, сделали его не через апи(  Обидно, настроил автопостинг для Моего мира, Одноклассников, Вконтакте и Твиттера через апи, а с фейсбуком больше проблем, чем со всеми предыдущими.

Сегодня попробую отправить им заявку на доступ, напишу потом о результатах.

Добавлено: 30-07-2015, 11:18:45


Заявку на права manage_pages отправил. Написали, что в течение 5 рабочих дней они проверят "мое творчество" и может быть дадут права)

Ура нашел, как получить рабочий токен на 60 дней. Вот полезная инструкция https://github.com/randyhoyt/facebook-access-token-bookmarklet

Access token для приложения, можно получить здесь - https://developers.facebook.com/tools/access_token/

На зарубежных ресурсах, нашел инфу , о том что, вечные токены (offline_access) фейсбук отменил в 2012 году, теперь нужно обновлять access token постоянно...



Добавлено: 30-07-2015, 17:56:22


Немного разобрался с фуйсбуком. Думаю, эта информация будет полезна для тех, кому предстоит с этим столкнуться.

У фейсбука существует несколько видов токенов:
1) User token - для изменения данных от лица пользователя.
2) Page token  - для управления данными Page, требует получение прав manage_pages
3) App token - для изменения данных приложения.

Пользовательский токен изначально выдается на два часа при авторизации в фейсбуке, и обозначается, как short-term. С помощью него можно получить long-lived token на 60 дней. 

Отправляем запрос на https://graph.facebook.com/oauth/access_token c параметрами:


array(
    'client_id'         =>  'ID app'
    'client_secret' => 'ID secret',
     'grant_type'       => 'fb_exchange_token',
     'fb_exchange_token' => 'short-term-token'
)


В результате получаем нужный нам токен на 60 дней.  К большому сожалению, в фейсбуке нельзя сделать refresh токена без авторизации. Хотя у них есть метод для генерации нового long-lived токена по коду.  Не знаю зачем они это сделали, но время жизни токена оно не изменяет.

Проверить время жизни токена можно, отправив запрос на https://graph.facebook.com/oauth/access_token_info с параметрами:

array(
     'client_id'            => 'ID app',
     'access_token'  => 'current access token'
)


В результате придет информация о токене и время его жизни.

Теперь становится понятно, почему многие сервисы автопостинга не используют api фейсбука)

Пока на этом все...
Обзоры и полезные статьи о веб-сервисах, уязвимостях и о многом другом на blog.yamaker.ru
  •  

stascerTopic starter

Ура, нашел наконец-то толковый мануал, о том, как получить долгоживущий токен для публикаций на странице фейсбука.

http://www.devils-heaven.com/facebook-access-tokens/
Обзоры и полезные статьи о веб-сервисах, уязвимостях и о многом другом на blog.yamaker.ru
  •  

stascerTopic starter

#4
Цитата: mishansaloma от 30-07-2015, 08:32:19
Примерно месяц назад сталкивался с такой проблемой.
На текущий момент от постинга в фейсбук отказались пока не разживемся финансами для привлечения к реализации или очень толкового кодера, или договоренности с сервисами автопостинга на автодобавление постов.

mishansaloma, я нашел решение автоматического постинга сообщений блога через API. Решение очень простое, а путь к нему очень длинный. А все потому, что в инете нет нормальных примеров и мануалов.

Что делал:

Отправил, как полагается запрос на расширение прав manage_pages с пошаговой инструкцией на английском языке и скриншотами и потом понял, что зря).

Обращаю внимание, если Ваше приложение рассчитано на массовую аудиторию(типа сервисы автопостинга), то нужно получить права manage_pages,publish_actions,publish_pages. Эти права нужны для управления страницами пользователей. Если речь идет о публикации на свою страницу, то запрашивать доступ не нужно. В этом случае достаточно получить расширенный токен для публикации.

Как получить токен для публикации:

1) Открываем в новом окне браузера страницу авторизации в Facebook:

https://www.facebook.com/dialog/oauth?client_id={client_id}&scope=manage_pages,publish_actions,publish_pages&redirect_uri={redirect_uri}

2) После авторизации фейсбук у Вас спросит, что Ваше приложение требует доступ на управление Вашими страницами. Даете ему права на это действие.

3) Далее он Вас перекидывает на указанный обратный адрес вызова. Здесь обрабатываете входящий код и получаете User Access Token на 2 часа.

4) Отправляем GET запрос на https://graph.facebook.com/oauth/access_token с параметрами:

array(
     'client_id'                  => '{client_id}',
     'client_secret'           => '{client_secret}',
     'grant_type'              => 'fb_exchange_token',
     'fb_exchange_token' => '{user access token}'
)


В результате получаем Extended User Access Token на 60 дней.

5) Отправляем запрос на https://graph.facebook.com/v2.4/{page-id}?fields=access_token&access_token={extended_user_access_token} в результате которого вернется ответ с access_token - это и есть расширенный, бессрочный токен для публикации.

6) Отправляем POST запрос на адрес https://graph.facebook.com/v2.4/{page-id}/feed c параметрами:

array(
     'access_token' => '{page access token}',
     'message'         => '#автопостинг\n\rHello, world! Yooohhooo :)',
      'link'                => '{адрес на публикуемую статью}'
)


Вот и все ;)

На след неделе постараюсь выложить в свой блог примеры и инструкции по автопостингу в социальные сети: Вконтакте, Twitter, Одноклассники, Мой Мир, Facebook.

Есть готовые классы на php c комментариями для автопостинга в выше описанные социальные сети. Кому интересно пишите на почту stascer@mail.ru, отдам за скромную плату :)
Обзоры и полезные статьи о веб-сервисах, уязвимостях и о многом другом на blog.yamaker.ru
  •