Публикация на моей собственной стене в Facebook через Koala

Я пытаюсь опубликовать на моей собственной стене Facebook. Итак, я создал «приложение» на своей личной странице в Facebook и получил app_id, app_secret и т. д.

Затем я сделал этот код:

@oauth = Koala::Facebook::OAuth.new(app_id, app_secret, callback_url)
@token = @oauth.get_app_access_token
@graph = Koala::Facebook::API.new(@token)
foo = @graph.get_object('me')

Однако я получаю эту ошибку:

Для запроса информации о текущем пользователе необходимо использовать токен активного доступа. [HTTP 400] (Коала::Facebook::AuthenticationError)

Токен действителен, я проверил. Мне нужно публиковать сообщения на СОБСТВЕННОЙ стене, а не на стене другого пользователя. Из того, что я прочитал в документации, для этого мне нужен «ключ доступа к приложению», а не «ключ доступа пользователя». Я новичок в списке API Facebook, поэтому я думаю, что мне не хватает чего-то очень простого.


person Steve Quezadas    schedule 08.01.2015    source источник


Ответы (2)


Вы можете использовать токен приложения вместо токена пользователя для публикации на стене, если пользователь уже предоставил соответствующие разрешения для вашего приложения.

То есть во временной шкале

  • Пользователь предоставляет приложению доступ к публикации с помощью publish_actions
  • Токен доступа пользователя, предоставленный Graph Login Flow
  • На этом этапе вы можете либо использовать токен доступа пользователя, либо токен доступа приложения.

Кроме того,

foo = @graph.get_object('me')

не является POST-запросом. В нем говорится, получить объект из графа с именем me. Кроме того, me ни к чему не приведет, если вы используете токен приложения, потому что приложение не может определить, какой «я» среди всех пользователей в приложении, на которое вы ссылаетесь. Таким образом, вам нужно обратиться к идентификатору области приложения для пользователя.

e.g

foo = @graph.get_object('4')

Где 4 - это числовой идентификатор области приложения (4 не будет работать в вашем случае, вам нужно определить правильный идентификатор для вашего приложения). Правильным вызовом в коале будет что-то вроде

foo = @graph.put_connections("4", "feed", :message => "I am writing on my wall!")

person phwd    schedule 08.01.2015
comment
Если я могу спросить, когда вы говорите, что предоставляет доступ к сообщению с помощью publish_actions , пользователь предоставляет доступ через facebook или через API. Или через сайт facebook? Я попытался просмотреть developers.facebook.com/apps и не смог найти место для установки разрешений. . я также пытался зайти на свою домашнюю страницу, в настройках -> приложения, и я не могу установить там разрешения. - person Steve Quezadas; 09.01.2015
comment
@SteveQuezadas, поскольку пользователь предоставляет доступ, это было объяснено в ссылке, которую я дал вам в вашем первом вопросе, вам нужно добавить параметры области при вызове диалогового окна входа в систему. Я снова размещаю документацию здесь developers.facebook.com/docs/facebook-login/ - person phwd; 09.01.2015

Моя проблема заключалась в том, что пользователь (в данном случае я сам) должен разрешить доступ к моему приложению для публикации на моей стене.

Полный процесс OAuth подробно описан на странице http://developers.facebook.com/docs/authentication/

Но конкретно мне нужно получить URL-адрес, который я должен посетить, а затем сказать «да» на вопрос аутентификации. Код здесь:

@oauth = Koala::Facebook::OAuth.new(app_id, app_secret, callback_url)
@oauth.url_for_oauth_code(:permissions => "publish_actions")

URL-адрес будет выглядеть примерно так:

https://www.facebook.com/dialog/oauth?
    client_id={app_id}&
    redirect_uri={redirect-uri}&scope=publish_actions

Обратите внимание, в URL-адресе должны быть указаны разрешения, которые вы хотите запросить у пользователя (в данном случае — разрешение на публикацию на стене). Этот запрос на разрешение указывается в переменной «scope». Обратите внимание, что некоторые версии facebook API позволяют публиковать сообщения через область «publish_stream», а другие версии требуют области «publish_actions». Дополнительную информацию о разрешениях, доступных для переменной области, можно найти здесь: https://developers.facebook.com/docs/facebook-login/permissions/v2.0

Когда вы посещаете URL-адрес, сгенерированный из приведенного выше утверждения, Facebook выдаст вам сообщение с вопросом, есть ли у этого конкретного приложения разрешение на публикацию на вашей стене. Вы, конечно, скажете «да». После этого ваше приложение facebook может публиковать сообщения на стене facebook, используя «токен доступа к приложению».

После этого легко разместить сообщение на стене с вашим токеном доступа к приложению. Код, который работает для меня:

@oauth = Koala::Facebook::OAuth.new(app_id, app_secret, callback_url)
@app_access_token = @oauth.get_app_access_token
@graph = Koala::Facebook::API.new(@app_access_token)
foo = @graph.put_connections(facebook_user_id, "feed", :message => "Test message")
person Steve Quezadas    schedule 09.01.2015