使用koala和omniauth-facebook检索rails 4中的facebook相册图像

时间:2015-01-11 07:13:42

标签: ruby-on-rails koala

我使用带有omniauth-facebook的rails 4.2来使用facebook注册并计划使用考拉来检索current_user的facebook数据(专辑,朋友列表等)。在用户注册/登录时,我正在创建/更新用户详细信息,如下所示

def self.from_omniauth(auth)
  # Get 60 days auth token
  oauth = Koala::Facebook::OAuth.new(Rails.application.secrets.facebook['app_id'], Rails.application.secrets.facebook['app_secret'])
  new_access_info = oauth.exchange_access_token_info auth.credentials.token

  new_oauth_token = new_access_info['access_token']
  new_oauth_expires_at = DateTime.now + new_access_info['expires'].to_i.seconds

  where(auth.slice(:provider, :uid)).first_or_initialize.tap do |user|                                                                          
    user.provider = auth.provider
    user.uid = auth.uid
    user.name = auth.info.name
    user.password = Devise.friendly_token[0,20]
    #user.image = auth.info.image
    user.email = auth.info.email
    user.oauth_token = new_oauth_token
    user.oauth_expires_at = new_oauth_expires_at
    user.save!
  end
end

根据考拉的Graph API部分,我们需要指定访问令牌,我们可以通过Facebook的Graph API Explorer获取。我为我的应用程序创建了一个访问令牌,其权限可以检索用户详细信息,照片,朋友和照片。

某些控制台输出:

pry(main)> a.class
=> User
pry(main)> a.oauth_token
=> "CAAHTERFDSFSREWrWErwelrinwoerxwerxqw"
pry(main)> graph = Koala::Facebook::API.new a.oauth_token
=> #<Koala::Facebook::API:0x00000008198810 @access_token= "CAAHTERFDSFSREWrWErwelrinwoerxwerxqw", @app_secret=nil>
pry(main)> friends = graph.get_connections("me", "friends")
=> {...}
pry(main)> photos = graph.get_connections("me", "photos")
=> {...}
pry(main)> photos.count
=> 25
pry(main)> p = graph.get_object "me"
=> {"id"=>"10206089",
   "email"=>"prasad@yahoo.co.in",
   "first_name"=>"Prasad",
   "gender"=>"male",
   "last_name"=>"Surase",
   "link"=>"https://www.facebook.com/app_scoped_user_id/10206089/",
   "locale"=>"en_US",
   "name"=>"Prasad Surase",
   "timezone"=>5.5,
   "updated_time"=>"2014-12-14T06:12:07+0000",
   "verified"=>true}

我的问题是,我们可以检索在特定日期范围内创建的current_user的照片吗?这可能吗?我需要每张图片的图片标题,图片赞和图片评论。

1 个答案:

答案 0 :(得分:1)

您可以使用sinceuntil查询参数指定日期范围:

/me/photos/uploaded?since=1402733742&until=1408004142

使用考拉,我想这应该这样做:

photos = graph.get_connections("me", "photos/uploaded", since: 1402733742, until: 1408004142)

这将从14/06/2014到2014年8月14日返回我的所有照片。

小心但是:据我所知,Facebook似乎限制了日期范围。您可能会收到错误消息,说您曾尝试过多次获取数据,因此,请准备好以块的形式分割日期范围以执行请求。 我使用graph explorer进行的测试显示,Facebook对结果进行分页并返回允许分页的游标。您应该可以在Koala返回的集合中使用next_page来查看所有结果。