Использование пакетного API Facebook для публикации одной и той же фотографии на нескольких страницах Facebook

Вот что я пытаюсь сделать. Я пытаюсь использовать пакетный API Facebook, чтобы опубликовать одну фотографию на нескольких страницах Facebook одновременно. Сначала я помещаю все в массив (fb_batch), а затем кодирую его с помощью JSON. Этот метод прекрасно работает для размещения сообщений и ссылок. В приведенном ниже примере массив @pages представляет собой массив страниц facebook, который содержит информацию о странице facebook, включая действительный токен доступа. Я знаю, что токен доступа действителен, потому что в другом месте программы я могу опубликовать отдельную фотографию, используя этот же токен доступа.

fb_batch = []
top_access_token = nil
@pages.each do |page|
  top_access_token = page.access_token if top_access_token.nil?
  if image.nil?
    fb_batch << {method: 'POST', relative_url: 'me/feed?access_token=' + page.access_token, body: body}
  else
    fb_batch << {method: 'POST', relative_url: 'me/photos?access_token=' + page.access_token, body: body, attached_files: 'file1'}
  end
end

c = Curl::Easy.new('https://graph.facebook.com')
c.multipart_form_post = true
c.verbose = true
post_data = [Curl::PostField.content('access_token', top_access_token), Curl::PostField.content('batch', fb_batch.to_json)]
post_data << Curl::PostField.file('file1', image.image.current_path) if !image.nil?
c.http_post(post_data)

Обратите внимание, как я могу добавить файл, только если есть изображение. Так что этот же код работает, когда я публикую сообщения или ссылки на несколько учетных записей.

Ошибка возникает, когда я публикую изображение в нескольких аккаунтах. Он будет применять изображение к первой учетной записи в массиве fb_batch, но все остальные учетные записи имеют ошибку. Нужно ли прикреплять изображение отдельно для каждой учетной записи, которую я хочу опубликовать для каждого изображения, имеющего другое имя attach_file? Для меня это означает, что запрос будет огромным, поскольку мне, возможно, придется прикрепить одно и то же изображение 50 раз, если я буду публиковать в 50 аккаунтах.

Вот ответ, который я получаю с Facebook:

[{ "Код":200,"заголовки":[{"Имя":"Access--Allow-Origin Control", "значение":"*"},{"имя": значение "Cache-Control"," ":"private, no-cache, no-store, must-revalidate"},{"name":"Connection","value":"close"},{"name":"Content-Type","value":"text/javascript; charset=UTF-8"},{"name":"Expires","value":"Sat, 01 Jan 2000 00:00:00 GMT"},{"name":"Pragma" "значение": "нет кэша"}],"тело":"{\" идентификатор \":\"416193168426655\",\"post_id\":\"159594100753231_416193185093320\"}"},{" код ":400," заголовки ": [{" имя ":"Access-Control-Allow-Origin" "значение":"*"},{"имя":"Cache-Control","значение":" нет -store"},{"name":"Connection","value":"close"},{"name":"Content-Type","value":"text/javascript; charset=UTF-8"},{"name":"Expires","value":"Sat, 01.01.2000 00:00:00 GMT"},{"name":"Pragma","value":"no-cache"},{"name":"WWW-Authenticate","value":"OAuth \" Платформа Facebook \" \"invalid_request\" \"(#1) Произошла неизвестная ошибка \""}],"body":"{\"error\":{\"message\":\"(#1) Произошла неизвестная ошибка \",\"type\":\"OAuthException\",\"code\":1}}"}]

Извините, это грязно. Вы можете видеть, что первый код 200, который успешно отправляет изображение и возвращает идентификатор изображения. Второй код - 400, говорящий, что произошла неизвестная ошибка. Я предполагаю, что это означает, что он не мог найти изображение или что-то в этом роде. Если я переключу две учетные записи в массиве, он будет успешно отправлен на другую учетную запись и потерпит неудачу на только что успешной учетной записи.

Спасибо, что дочитали до конца! Вот твой горшок с золотом...

1 ответ

Решение

Мой ответ несколько отлаживает вашу проблему и предлагает возможную альтернативу. Еще в прошлом году Facebook запустил возможность загружать фотографии, указав исходный URL-адрес, вместо того, чтобы указывать составные данные. Поэтому я рекомендую следующий обходной путь:

  1. Загрузите изображение, которое вы хотите использовать, куда-нибудь за пределами CDN Facebook (могут быть проблемы с использованием CDN-медиа для загрузки в Facebook)
  2. Захватите URL указанного изображения
  3. Вместо того, чтобы делать текущий вызов, упростите его до PAGEID/photos? Access_token=PAGETOKEN&url=URLOFPHOTO

Это разместит фотографию непосредственно на временной шкале страницы. Пакетирование этого вызова не должно иметь никакого значения. Надеюсь это поможет!

Другие вопросы по тегам