2
希望你能幫助我,我在我的機智終結這裏....我正在研究一個Rails應用程序並運行考拉來連接Facebook圖表API。我想維護使用我的應用程序的用戶朋友的最新列表,所以我一直在嘗試實現Koala寶石的實時更新功能。我的應用程序部署在Heroku上,我使用Redis-to-Go運行Resque來管理來自Facebook的呼叫...不幸的是,即使我對Facebook服務器的測試ping全部返回,我似乎仍然沒有收到任何消息。這裏是我正在使用的代碼:沒有從Rails和考拉的Facebook實時API訂閱中收到帖子
Realtime Controller:
class RealtimeController < ApplicationController
skip_before_filter :logged_in_check
layout nil
VERIFY_TOKEN = "purple-rain"
def create
Friendship.real_time_update!(params)
render :text => 'success'
end
def index
Rails.logger.info("RealTimeController verification")
render :text=>Koala::Facebook::RealtimeUpdates.meet_challenge(params, VERIFY_TOKEN)
end
end
Friendship Controller:
class Friendship < ActiveRecord::Base
attr_accessible :friend_id, :user_id
belongs_to :users, :foreign_key => "user_id"
belongs_to :friends_ids, :class_name => "users", :foreign_key => "friend_id"
def self.get_friends(user)
@facebook ||= Koala::Facebook::API.new(user.oauth_token)
@friends = @facebook.get_connection(user.fbid, "friends")
@friends.each do |friend|
if @friend = User.find_by_fbid(friend["id"])
friendship = Friendship.find_or_create_by_user_id_and_friend_id!(user.id,
@friend.id)
end
end
end
def self.real_time_update!(payload)
RealtimeUpdate.new(payload).enqueue_updates!
end
class RealtimeUpdate < Struct.new(:payload)
def enqueue_updates!
remove_duplicate_ids.each do |entry|
if (user = User.find_by_uid(entry['uid']).try(:user))
Resque.enqueue(Resque::Job::UpdateFacebookFriends, user.id,
:since=>entry['time'])
end
end
end
protected
def remove_duplicate_ids
payload['entry'].each_with_object({}) do |entry, hash|
hash[entry['uid']] ||= [] << entry
end.values.collect { |update_payloads| update_payloads.min { |entry1, entry2|
entry1['time']<=>entry2['time'] } }
end
end
end
Resque工作
class Resque::Job::UpdateFacebookFriends
@queue = "facebook_friends"
def self.perform(uid, opts={})
::Timeout.timeout(1800) do
Friendship.get_friends!(User.find_by_fbid(uid))
end
end
end
樂意提供任何其他信息,我能!
在此先感謝!
有我的答案一直heplful? – 2014-01-17 07:45:36