私のレールアプリとFacebookのオープングラフベータには本当に奇妙な問題があります。オブジェクトにアクションを投稿するたびに、FacebookはオブジェクトのURLに到達できない、またはogスクレイパーがURLを正しくスクラップしていないことを示すエラーを返します。Facebookに投稿するHTTPartyを使用したOGは、レールコンソールでのみ動作しますか?
しかし、アプリがFacebookへの投稿用に生成しているURLを使って、手動でHTTParty gemを使用して投稿すると、それは動作します。
はここに私のコードです:オブジェクトはそれのコントローラーのshowメソッドを介して読み出された場合
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
、アプリがPost.to_facebook
を呼び出します。私のログからは、Post.construct_facebook_action_url
が適切なURLを構築していることがわかります(私が言ったように、ログからURLを取り出してコンソールから手動で投稿できます)。だから、私はHTTPartyにURLを渡す方法に問題があると仮定していますか? FacebookはどんなオブジェクトのURLそれをで見てくださいする必要がありますを伝えることができるようだ。なぜ私が書いたコードは動作しませんが、コンソールでは手動で動作しますか?
さらに悪いことに、オブジェクトに一度成功したポストアクションがあると、コードは一貫して動作するように見えます。 Facebook がと主張しているのは、オブジェクトのURLに到達できないという問題ですが、私はそれらを閲覧することができないので、どのようにそうでないのか理解できません。
私は実際にはスケジュールされたプロセスに移動し、動作しているようです。 – Slick23