【问题标题】:How should I cache Facebook call data into my database so rails can use it locally?我应该如何将 Facebook 通话数据缓存到我的数据库中,以便 Rails 可以在本地使用它?
【发布时间】:2011-08-16 09:16:06
【问题描述】:

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

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

【问题讨论】:

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


【解决方案1】:

这种形式会有点多余……你怎么知道什么时候使用数据库的点赞数而不是去 API 来获取点赞数?您查询 api 的方式可能比您需要的要多,而且查询 API 很糟糕,因为它很慢。

我还没有在我的应用程序中实现这种缓存,但我知道执行此操作的最佳方式如下:

  • 您缓存所有 API 响应

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

  • 这样,当对象发生变化时,facebook 会 ping 您的应用(以链接中描述的某种方式)

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

据我了解,这就是过程...我确信 facebook 实时功能的实施将使任何应用程序更快

【讨论】:

  • 您不会知道,您必须选择同步间隔时间并最终落后。无论如何,我不太确定缓存 facebook 是个好主意。
【解决方案2】:

这个比我想象的要简单。刚刚通过迁移向用户模型添加了列:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    • 2018-07-27
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    • 1970-01-01
    相关资源
    最近更新 更多