2011-08-05 102 views
4

I followed the following blogpost了解如何使用我的应用程序远程创建Facebook事件。但是,从我的应用程序加载图像时遇到问题,因为我的应用程序没有本地存储的图像,所以它们存储在AWS中。使用Ruby on Rails上的Koala将文件上传到Facebook

@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("PATH TO YOUR EVENT IMAGE"))

如果有帮助。

我很欣赏对这个问题的任何新见解。

回答

4

随着考拉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) 
+0

您也可以省略album_id,它会创建一个默认相册为您的应用程序,并张贴有: @ graph.put_picture(@ foo.remote_image_path,{}) – Rafael

+0

是 - 它默认的应用程序的名称,让“我的应用”,将创建一个名为“我的应用” –

+0

专辑怎么做ü对事件做同样的事情? – user566245

9

好吧,我玩了一圈,想出了如何发布图片。

基本上我所做的就是使用'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的需要,因为我用的是图像文件是足够小,该文件已被处理字符串而不是文件对象改变。

希望这可以帮助任何人解决这个问题!

+0

我已经在这几个小时你,先生,是男人中的王 – airlok

+0

这是试图找出如何添加视频字幕文件非常有用(.SRT)到视频使用。没有工作,直到我通过'captions_file'参数使用:'Koala :: UploadableIO.new(file_path,'application/octet-stream')' –

1

Facebook最近发布了一个更新,允许您使用可公开访问的URL发布图片(http://developers.facebook.com/blog/post/526/)。您正在使用的考拉图书馆支持(https://github.com/arsduo/koala/blob/master/lib/koala/graph_api.rb#L102),所以您应该可以发布您在S3上托管的图片,而无需使用OpenURI :: Buffer。

+0

here被更新的链接指向此行https://github.com/arsduo/koala/blob/master/lib/koala/api/graph_api.rb#L243 – VelLes

1

对于Facebook来说Ad Images,你不幸目前还无法做到这一点通过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)) 
相关问题