def get_all_friends(uid, client) friends = client.friendships.friends(uid: uid) total = friends.total_number get_friends(total, 0, uid, client) end
def get_friends(total, cursor, uid, client) left = total count = [200, left].min
friends = client.friendships.friends(uid: uid, count: count, cursor: cursor) left -= count next_cursor = friends.next_cursor
return friends if (left == 0 || next_cursor == 0)
more_firends = get_friends(left, next_cursor, uid, client) more_firends.users << friends.users return more_firends end
get_all_friends(uid, observer.client).users.map do |info| user = User.find_or_create_by_uid_and_name(uid: info.id, name: info.name) follow(user) user end
这段代码实现的是从微博获取所有关注(默认 API 只能根据 cursor 来一页一页的获取)。但是接触 Ruby 不久,不会用 Ruby 的方式( block, do...end )来实现。
然后因为一次获取其他也是靠 cursor 和 count 来定位的东西这种情况很普遍,可以通过将client.friendships.friends(uid: uid, count: count, cursor: cursor)
这个提取出来,以函数的方式传进去(函数式的想法)的方法来抽象。
不知道 Ruby 的方式是怎么样来处理的?Ruby block的思想转不过来。