Загрузка файла в Facebook с использованием Koala на Ruby on Rails - PullRequest
4 голосов
/ 05 августа 2011

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

    @graph = Koala::Facebook::GraphAPI.new(@token)  
    picture = Koala::UploadableIO.new(@event.photo.url(:small))
    params = {
        :picture => picture,
        :name => 'Event name',
        :description => 'Event descriptio
        :start_time => datetime,
       }

- это следующий код, который я сейчас использую для отправки фотографий в Facebook, когда в моем приложении создаются события Facebook.Проблема, однако, в том, что Rails выдает ошибку: нет такого файла или каталога - http://s3.amazonaws.com/ColumbiaEventsApp/photos/21/small.jpeg?1312521889.

Кто-нибудь, кто более опытен в разработке на Rails, знает, есть ли способ для меня обработатьURL как путь к файлу?Класс UploadableIO ожидает путь к файлу, и я изо всех сил пытаюсь выяснить, есть ли в Ruby способ обрабатывать URL как пути к файлам.Фотографии, хранящиеся в приложении, можно загружать в Facebook следующим образом:

picture = Koala :: UploadableIO.new (File.open («ПУТЬ К ВАШЕМУ ИЗОБРАЖЕНИЮ СОБЫТИЙ»))

, если это поможет.

Я ценю любые новые идеи по этому вопросу.

Ответы [ 4 ]

9 голосов
/ 25 августа 2011

Хорошо, так что я поиграл и понял, как публиковать фотографии.

В основном я использовал библиотеку 'open-uri' для преобразования ссылок на изображения в файловые объекты, которые затем можно было передать в UploadableIO и отправить в Facebook.Вот код, который работал:

require 'open-uri'
OpenURI::Buffer.send :remove_const, 'StringMax' if OpenURI::Buffer.const_defined?('StringMax')
OpenURI::Buffer.const_set 'StringMax', 0
picture = Koala::UploadableIO.new(open(@event.photo.url(:small)).path, 'image')
params = {
  picture:     picture,
  name:        @event.name,
  description: @event.description,
  location:    @event.location,
  start_time:  datetime
}
@graph.put_object('me', 'events', params )

Необходимо изменить константу OpenURI StringMax, потому что файлы изображений, которые я использовал, были достаточно малы, чтобы файлы обрабатывались как строки, а не как файловые объекты.

Надеюсь, это поможет любому, кто попытается это исправить!

4 голосов
/ 07 октября 2011

С Koala 1.2.1 это очень элегантное решение. Вот пример кода для создания альбома и его загрузки по удаленной ссылке AWS (кстати, это заняло около 30 строк в PHP с PHP SDK!

@foo = Foo.find(params[:foo_id])        
albuminfo = @graph.put_object('me','albums', :name=>@foo.title)
album_id = albuminfo["id"]    
@graph.put_picture(@foo.remote_image_path,{}, album_id)
1 голос
/ 06 декабря 2017

Для Facebook Рекламные изображения , к сожалению, в настоящее время вы не можете сделать это по URL, таким образом:

require 'open-uri'
img_data = open(my_post.image.url :medium).read
img = graph.put_connections('act_X', 'adimages', bytes: Base64.encode64(img_data))
1 голос
/ 31 августа 2011

Facebook недавно выпустила обновление, позволяющее публиковать изображения с использованием общедоступных URL-адресов (http://developers.facebook.com/blog/post/526/). Используемая вами библиотека Koala поддерживает это (https://github.com/arsduo/koala/blob/master/lib/koala/graph_api.rb#L102),), поэтому вы сможете публиковать фотографии, которые выхостинг на S3 без использования OpenURI :: Buffer.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...