Rails 4 - Facebook清除缓存以共享按钮/链接

时间:2014-06-23 23:51:29

标签: ruby-on-rails facebook facebook-graph-api caching share

我在个人资料页面上有一个“在Facebook上分享”链接,该页面包含用户头像和作业等动态内容。

如果用户在Facebook上分享内容,那么facebook open graph会在og:meta中使用好的信息并正常工作。如果用户更改了它的信息并再次点击“在Facebook上分享”链接,则由于打开图形缓存,信息不会更新。 我希望更新内容,然后根据需要刷新打开的图形缓存(当用户触发链接或打开页面时)。

这是我发现的(而不是工作):

Test1:使用调试工具

config/initializers/facebook_og.rb
    module FacebookOpenGraph
      def self.clear_cache(url)
        uri = URI('https://developers.facebook.com/tools/debug/og/object')
        res = Net::HTTP.post_form(uri, 'q' => "#{url}")
      end
    end

测试2:使用开放图

config/initializers/facebook_og.rb
module FacebookOpenGraph
  def self.clear_cache(url)
    uri = URI('https://graph.facebook.com')
    res = Net::HTTP.post_form(uri, 'id' => "#{url}", 'scrape' => 'true')
  end
end

测试3:使用API​​(在此处找到:http://mdenomy.wordpress.com/2014/01/

config/initializers/facebook_og.rb    
module FacebookOpenGraph
      def self.clear_cache(url)
        params = {
          :client_id => ENV['FACEBOOK_APP_ID'],
          :client_secret => ENV['FACEBOOK_APP_SECRET'],
          :grant_type => "client_credentials"
        }
        uri = URI("https://graph.facebook.com/oauth/access_token?#{params.to_query}")
        response = Net::HTTP.get(uri)
        access_token = Rack::Utils.parse_nested_query(response)["access_token"]
        unless access_token.nil?
          uri = URI('https://graph.facebook.com')
          res = Net::HTTP.post_form(uri, 'id' => "#{url}", 'scrape' => 'true',
              'access_token' => "#{access_token}", 'max' => '500')
        end
      end
    end

在我的页面中,我在og meta调用之前将此行添加到顶部:

<% FacebookOpenGraph.clear_cache(controller_action_url(@user, subdomain: 'player')) %>

我尝试添加http://player.domain.com/2?<%= rand(1000..9999) %>之类的随机数,但没有成功

基本上,这些技术都不起作用。所以...任何帮助都会非常感激。 (对不起,我的英语不好) KR。

1 个答案:

答案 0 :(得分:0)

最后我使用了测试3 API版本(感谢mdenomy)并将其置于用户更新其信息时触发的后台作业中。

我的问题是无法正常工作的网址(子网域&amp; i18n语言环境并且正确地转义整个网站)。现在一切都很好。