Как публиковать пользовательские фотографии на Facebook с помощью Koala?

Я использую драгоценный камень Koala в приложении Rails 3.2.

Я пытаюсь опубликовать действие, которое включает фотографию, созданную пользователем, в приложение Facebook. Согласно документам FB, URL-адрес, по которому мне нужно опубликовать сообщение:

https://graph.facebook.com/uid/namespace:action?object=http://path/to/page&image[0][url]=http://path/to/image.jpg&image[0][user_generated]=true

Если я проверю это вручную с помощью отладчика Facebook, все будет работать отлично. Но у меня проблемы с достижением этого с Koala.

Я использую следующий метод:

Koala::Facebook::API.new(app_token).put_connections( uid, namepsace:action, url )

Если я использую:

url = "http://path/to/page"

тогда действие публикуется в Facebook правильно, но без сгенерированного пользователем фото.

Если я использую:

url = "http://path/to/page&image[0][url]=http://path/to/image.jpgimage[0][user_generated]=true"

Я получаю ошибку в журналах

#<Koala::Facebook::APIError: OAuthException: (#3502) Object at URL http://path/to/page&image[0][url]=http://path/to/image.jpg&image[0][user_generated]=true has og:type of 'website'. The property 'object' requires an object of og:type 'namespace:object'.  (http response code: 404)>

Как правильно создать требуемый URL-адрес публикации с помощью Koala? Или как лучше начать отладку текущего кода? Или я совсем не на том пути?


person Andy Harvey    schedule 11.07.2012    source источник


Ответы (3)


Я тоже много боролся с этим, как из-за документации Facebook, так и из-за документации Koala, которая, на мой взгляд, не очень ясна:

Koala::Facebook::API.new(access_token).put_connections(
  uid,
  "namespace:action",
  "product" => "[URL_TO_PRODUCT]",
  "image[0][user_generated]" => true,
  "image[0][url]" => "[URL_TO_USER_GENERATED_IMAGE]",
  "fb:explicitly_shared" => true,
  "message" => "[DESCRIPTION]"
)

Другое дело, что целевой URL должен был иметь og:type="namespace:product"

Надеюсь это поможет

person Ruy Diaz    schedule 04.12.2012
comment
Я согласен с вами, документы не очень ясны. Я столкнулся с трудностями при разработке правильного формата (ваш выше правильный). У меня также были проблемы, потому что я пытался поставить метод в очередь, используя queue_classic. Первоначально я использовал символы, например. :product, что не нравится queue_classic. Переключение на строки, как в вашем примере, все исправило! - person Andy Harvey; 11.06.2013
comment
Этот ответ больше не работает. Возможно, они внесли изменения в API. - person Daniel Bonnell; 28.07.2016

Вы проверили свой URL-адрес в отладчике Facebook? http://developers.facebook.com/tools/debug

Из полученного вами сообщения об ошибке видно, что вы должны установить для og:type значение namespace:object, а для получения пользовательского изображения вы должны установить og:image. на http://your.domain.com/path/to/user/generated/image

person Vlado Cingel    schedule 12.07.2012
comment
спасибо владо. да, я проверил URL-адрес в отладчике. Если я создам URL-адрес вручную, он отлично работает, и я могу опубликовать его на временной шкале. Проблема, с которой я сталкиваюсь, заключается в том, как воссоздать этот URL-адрес с помощью Koala. Я могу заставить нормальный пост работать, но если я попытаюсь изменить URL-адрес, чтобы добавить &image[0][url]=http://path/to/image&image[0][user_generated]=true, я получаю сообщение об ошибке. Любая идея, как построить этот URL-адрес с коалой? - person Andy Harvey; 12.07.2012
comment
Я бы начал с здесь. Попробуйте вызвать Koala.make_request(...) непосредственно из консоли rails и/или открыть гем koala (связать открытую коалу) и добавить здесь некоторую отладку, чтобы увидеть точный вызов, отправленный в Facebook, когда вы запускаете метод put_connections - person Vlado Cingel; 13.07.2012
comment
спасибо, Владо, я копался в исходниках, чтобы попытаться понять, как работает драгоценный камень, но отладка и пошаговое выполнение — хорошее предложение. Спасибо. Я дам вам знать, что я найду - person Andy Harvey; 13.07.2012

Я использовал put_connections, как и вы, но это не обязательно, вы можете использовать метод put_wall_post.

Я запросил разрешение: publish_actions.

И в моем методе контроллера у меня есть:

api = Koala::Facebook::API.new(@oauth_token)
api.put_wall_post("Testing post on Timeline", {
    :name => "Im a wall post",
    :link => "http://www.example.com",
    :caption => "Im a caption",
    :description => "Im a long description of an attachment",
    :picture => "http://www.example.com/picture.jpg" 
}, @users_facebook_id)

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

person Luis Ortega Araneda    schedule 02.05.2013