我应该如何将Facebook呼叫数据缓存到我的数据库中,以便rails可以在本地使用它?

时间:2011-08-16 09:16:07

标签: ruby-on-rails database ruby-on-rails-3 facebook-graph-api

我想首先生成一个模型来保存这些信息:

rails g model UserData UID:string birthday:string likes:string location:string \n
activities:string books:string movies:string music:string tv:string \n
interests:string post_count:string friend_count:string

然后我耙了DB。

然后我创建文件$ RAILS_ROOT / jobs / update_facebook.rb:

config = YAML::load(File.open("#{RAILS_ROOT}/config/facebook.yml"));
APP_ID = CONFIG['app_id']
fetching_app = FbGraph::Application.new(config['APP_ID']);
access_token = fetching_app.get_access_token(config['production']['client_secret']);

#Don't know what else to put in here

2 个答案:

答案 0 :(得分:2)

这个表格有点冗余......你怎么知道何时使用数据库数量的喜欢而不是去API获取喜欢的数量?你可能会比你需要的更多地查询api方式,并且查询API很糟糕,因为它很慢。

我还没有在我的应用程序中实现这种缓存,但我知道这样做的最佳方式是:

  • 您缓存所有API响应

  • 您订阅了您正在跟踪的对象,并通过Facebook实时更新实现回调内容(http://developers.facebook.com/docs/reference/api/realtime/

  • 有了这个,当对象发生变化时,facebook会ping你的应用程序(在链接中以某种方式描述)

  • 当facebook通知对象更改时,您会在API调用中删除缓存,因此您的应用只会在发生更改时请求API

从我理解的那个过程就是这个过程......我确信实时的facebook实时内容会让任何应用程序更快一点

答案 1 :(得分:0)

这个比我做的更简单。只需使用迁移向用户模型添加列:

rails g migration AddDetailsToUsers likes:string bookes:string etc.

然后只需进行迁移,并将以下内容添加到控制器:

@graph = Koala::Facebook::GraphAPI.new(current_user.token)
current_user.likes = @graph.get_connections("me", "likes")
#Ditto for the other permissions
current_user.save