[英]Auto-follow Facebook friends
我試圖讓用戶自動在我的應用程序中關注他們的FB朋友。 我可以獲取用戶的FB朋友的ID,但是我不知道如何進行自動關注。
我得到了他們朋友的uid(fb id),所以我想我需要在我的應用中找到其uid與用戶fb朋友列表的uid匹配的用戶,然后使用戶自動關注這些用戶。 你會怎么做?
user.rb
has_many :relationships, foreign_key: "follower_id", dependent: :destroy
has_many :followed_users, through: :relationships, source: :followed
has_many :reverse_relationships, foreign_key: "followed_id",
class_name: "Relationship",
dependent: :destroy
has_many :followers, through: :reverse_relationships, source: :follower
def self.from_omniauth(auth)
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.first_name = auth.info.first_name
user.last_name = auth.info.last_name
user.email = auth.info.email
user.image = auth.info.image
user.oauth_token = auth.credentials.token
user.oauth_expires_at = Time.at(auth.credentials.expires_at)
user.save!
end
end
#gets uid of user's fb friends
def fbfriends
@graph = Koala::Facebook::API.new(oauth_token)
begin
@fbfriends = @graph.get_connections("me", "friends", fields: "id")
@uids = @fbfriends.map{ |v| v.values }.flatten
rescue Koala::Facebook::AuthenticationError => e
redirect_to '/auth/facebook'
end
@friends = User.where(uid: @uids)
end
def fb_user_id
self.fbfriends.map{ |v| v.id }
end
after_create :follow_fbfriends!
def follow_fbfriends!
relationships.create!(followed_id: fb_user_id)
end
用戶展示
<%= @user.fb_user_id %>
瀏覽器輸出
[1]
可能的步驟:
@fbfriends
,獲取用戶朋友的UID
。 @friends = User.where(uid: @fbfriends)
將為所有這些UID提供所有存在的用戶配置文件。 @friends
該用戶和好友的@friends
和建立關系b / w以便followers
。 編輯 :
可以看出,代碼中的@fbfriends
返回的是散列數組,而不僅僅是UID。 因此,首先,將UID提取為:
@uids = @fbfriends.map{ |v| v.values }.flatten
#=> ['1654449181']
現在,將此新數組與User.where(uid: @uids)
一起使用,以檢索具有這些UID(如果存在)的用戶。 對於與用戶建立黑白關系,您可能需要閱讀Michael Hartl的指南章節 。
編輯2 :在follow_friends!
,您必須遍歷所獲得的朋友ID,並為每個朋友ID建立關系,如下所示:
def follow_fbfriends!
fb_user_id.each do |friend_id|
relationships.create!(followed_id: friend_id)
end
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.