httpartyでFacebook OGに投稿すると、Railsコンソールからのみ機能しますか?

StackOverflow https://stackoverflow.com/questions/8854710

質問

RailsアプリとFacebookのオープングラフベータに非常に奇妙な問題があります。オブジェクトにアクションを投稿するたびに、FacebookはオブジェクトのURLに到達できないことを示すエラーを返します。または、OGスクレーパーがURLを正しくスクレイプしていません。

ただし、URLを取得すると、アプリがFacebookに投稿するために生成され、HTTPARTY GEMを手動で使用して投稿します。

これが私のコードです:

class Post < ActiveRecord::Base
  FB_CONFIG = YAML.load_file("#{Rails.root}/config/initializers/facebook.yml")[Rails.env]

  def self.to_facebook_og(obj, obj_id, verb, auth, extra)
    #requires that a user has granted `publish_actions`
    found_obj = obj.classify.constantize.find(obj_id) #find the actual object we're talking about
    post_url = self.construct_facebook_action_url(obj, found_obj, verb, auth, extra) #create the URL
    begin
      ret = HTTParty.post(post_url)
      logger.info "Facebook Post Action Response = #{ret}"
    rescue HTTParty::ResponseError => e #handle any errors
      logger.error {"FACEBOOK Response #{ret.code} / #{e.inspect}"}
      flash.alert {"There was a Facebook problem. Please try again."}
      return
    end
  end

  def self.construct_facebook_action_url(obj, found_obj, verb, auth, extra)
    base = 'https://graph.facebook.com/'
    uid = auth.uid
    namespace = FB_CONFIG['namespace']
    token = "?access_token=#{auth.token}"
    og_url = "#{obj}=http://theshortestfiction.com/#{obj.pluralize}/#{found_obj.id}"
    fb_url = base + uid + '/' + namespace + ':' + verb + token + '&' + og_url + extra
    logger.info fb_url
    fb_url
  end

  def self.lint_og_object(obj_url)
   lint_ret = HTTParty.post("https://developers.facebook.com/tools/lint/?url=#{obj_url}&format=json")
   logger.info "Facebook Linter Response = #{lint_ret}"
  end



end

オブジェクトがコントローラーのshowメソッドを介して読み取られると、アプリは呼び出します Post.to_facebook. 。私のログから、私はそれを見ることができます Post.construct_facebook_action_url 適切なURLを構築しています(私が言ったように、ログからURLを引いて、コンソールから手動で投稿できるからです)。それで、私はURLをhttpartyにどのように渡すかにとても問題があると思いますか? Facebookは、どのオブジェクトがそれをurlするかを伝えることができるようです したほうがいい 見ている。私が書いたコードが機能しないのはなぜですか?

さえも、オブジェクトに対する成功した投稿アクションが一度あると、コードは一貫して動作するようです。フェイスブック 主張します 問題は、オブジェクトのURLに到達できないことですが、閲覧できるため、どのようにしているのか理解できません。

役に立ちましたか?

解決

これは実際にはタイムアウトの問題だと思います。

私はあなたとまったく同じ問題を抱えていました。HTTPARTYを使用して、URLを取得することはエラーに達することができません。

コードをResqueを使用して背景プロセスに移動し、問題を修正しました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top