2

我正在尝试让用户朋友签到,我正在使用omniauth 和koala gem。

当用户被保存时,此方法会命中:

def add_friends
 friends_data = facebook.get_connections("me", "friends", :fields => "id, name, link, picture, gender, checkins")
     friends_data.map do |h|
        friend = Friend.new
        friend.uid = h["id"]
        friend.name = h["name"]
        friend.image = h["picture"]
        friend.gender = h["gender"]
        friend.urls = h["link"]
        friend.user_id = self.id
        friend.save!

        if (!h["checkins"].blank?)
           checkin = Checkin.new
           checkin.checkin_id = h["id"]
           checkin.user_id = h["checkins"]["data"]["from"]["id"] 
           checkin.user_name = h["checkins"]["data"]["from"]["name"] 
           checkin.tags = h["checkins"]["tags"]["data"]["name"]
           checkin.place_id = h["checkins"]["place"]["id"]
           checkin.place_name = h["checkins"]["place"]["name"]
           checkin.message = h["checkins"]["message"]
           checkin.created_time = h["checkins"]["created_time"]
           checkin.friend_id = friend.id
           checkin.save!
           end
         end
      end

但我得到这个错误:

Koala::Facebook::APIError: HTTP 500: Response body: {"error_code":1,"error_msg":"An unknown error occurred"}

我真的不知道这意味着什么,有什么想法吗?有人知道如何定义考拉宝石签到的限制吗?我试过这样的事情:

u.facebook.get_connections("me","friends", :fields => "checkins.limit(2)")

但我得到了同样的错误!

4

1 回答 1

0

在字段中,您正在请求有关朋友的信息,但“签到”不是个人资料字段,而是完全不同的连接。

您必须做的是遍历所有朋友 ID 并获取每个 ID:

friend_checkins = []
friend_ids = u.facebook.get_connections("me","friends", :fields => "id")
friend_ids.each do |friend_id|
    friend_checkins << u.facebook.get_connections(friend_id,"checkins")
end

此外,在执行此操作时,这将是使用 Koala 查看批处理请求的好时机,因为您可能会在这里对 API 进行大量调用。

于 2013-01-02T17:39:12.223 回答