Проводка в FB с использованием Graph API
Я хочу делать посты в Facebook один раз в день, используя скрипт ruby и самоцвет Koala. Я хочу иметь возможность настроить его один раз, и мне не нужно постоянно менять токены доступа. После прочтения некоторых постов и документации Facebook о токенах доступа я реализовал следующее:
- Создано приложение для Facebook
- Использовал Graph API Explorer, чтобы получить токен доступа для себя - это длится всего около 2 часов
- Использовал следующий скрипт для обмена краткосрочного токена на долгосрочный токен, который длится 2 месяца
https://graph.facebook.com/oauth/access_token? client_id=APP_ID& client_secret=APP_SECRET& grant_type=fb_exchange_token& fb_exchange_token=EXISTING_ACCESS_TOKEN
- Написал следующее грабли для публикации на моей стене в Facebook
token = "CAAFlZAPhVBO8..." @graph = Koala::Facebook::API.new(токен) @graph.put_connections("me", "feed",:message => "Мое сообщение!")
- Запланировал рейк команды с помощью планировщика heroku
Со всей этой настройкой мой скрипт на самом деле работает! Он пишет в мою стену каждый день на основе планировщика.
Мой вопрос: с этой настройкой мне нужно будет вручную создать новый токен краткосрочного доступа, используя проводник Graph API, а затем использовать его для получения токена долгосрочного доступа каждые два месяца. Кроме того, мне придется войти и вручную изменить оператор token = "бла-бла" в скрипте y. Можно ли вообще этого избежать? Я дал приложению, которое я создал, разрешение на публикацию на стене. Есть ли способ автоматически получить новые токены доступа в скрипте, используя Koala (или другие гемы / библиотеки)?
2 ответа
После того, как пользователь дал разрешение вашему приложению publish_actions, вы также можете использовать свой токен доступа к приложению, чтобы публиковать сообщения на стене от своего имени - вам просто нужно будет обменяться me
для действительного идентификатора пользователя (потому что без маркера доступа пользователя API не может знать, кем должно быть "я").
И комбинация app_id|app_secret
(символ канала в середине) может служить маркером доступа к приложению.
Вы можете автоматизировать, а не жестко закодировать краткосрочный токен. Вы можете использовать камень omniauth-facebook для автоматизации входа в систему omniauth. Ссылайтесь на Github. Добавьте это в свой гемфайл.
gem 'omniauth-facebook', '1.4.0'
В конфигурации маршрутов, сопоставьте обратный вызов
match '/auth/:provider/callback' => '[your controller]#[your function]'
Как только вы успешно войдете в систему и окажетесь в функции обратного вызова, вы получите токен, сохраненный в ответе в request.env["omniauth.auth"]["credentials"]["token"]
Используйте этот токен и обменивайте его с долгоживущим токеном каждый раз, когда пользователь входит в систему. Вы можете смело предполагать, что пользователь входит в систему как минимум дважды в течение 60-дневного срока для получения токена длительного действия.
Я предполагаю, что вы используете Ruby on Rails, потому что вы используете гем Koala.