Переключение на использование фонового изображения без фонового изображения через публикацию из нескольких частей в API Twitter с Ruby и OAuth - PullRequest
2 голосов
/ 29 сентября 2011

Я хотел бы изменить фон моего профиля с фонового изображения на фоновое изображение, которое я загружаю через API Twitter с использованием Ruby. У меня нет проблем с загрузкой новых фоновых изображений, когда мой профиль уже настроен на использование изображения в качестве фона. Однако, когда мой профиль не использует изображение в качестве фона, и я пытаюсь загрузить изображение с добавленным параметром «use = 1», чтобы сообщить Twitter, что я хочу использовать загружаемое фоновое изображение, Twitter отвечает это:

{"error":"You tried to turn on your background, but don't have one selected.",
    "request":"\/1\/account\/update_profile_background_image.json"}

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

{"error":"You tried to turn off your background while also uploading a new one.",
    "request":"\/1\/account\/update_profile_background_image.json"}

показывает, что Twitter полностью может обнаружить, что я загружаю изображение.

Я что-то упустил?

Вот код:

require 'oauth'
require 'net/http/post/multipart'

consumer = OAuth::Consumer.new(APP_CONSUMER_KEY, APP_CONSUMER_SECRET,
    {:site => "http://api.twitter.com", :scheme => :header})
access_token = OAuth::AccessToken.from_hash(consumer,
    {:oauth_token => OAUTH_TOKEN, :oauth_token_secret => OAUTH_TOKEN_SECRET})

image_file = File.new(image_file_path)
url = URI.parse('http://api.twitter.com/1/account/update_profile_background_image.json')

req = Net::HTTP::Post::Multipart.new url.path, {
  "use" => "1",
  "image" => UploadIO.new(image_file, image_mime_type, image_file_name)
}

consumer.sign!(req, access_token)

Net::HTTP.new(url.host, url.port).start do |http|
  puts http.request(req)
end
...