Frage

Ich habe ein wirklich seltsames Problem mit meiner Rails -App und der Open -Graph -Beta von Facebook. Immer wenn ich eine Aktion in ein Objekt poste, gibt Facebook einen Fehler zurück, der darauf hinweist, dass die URL des Objekts nicht erreicht werden kann, oder der OG -Schaber kratzt die URL nicht richtig.

Wenn ich jedoch die URL nehme, generiert die App für den Beitrag auf Facebook und nutze das HTTParty -Edelstein manuell, um ihn zu veröffentlichen, es funktioniert.

Hier ist mein Code:

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

Wenn ein Objekt über die Showmethode des Controllers gelesen wird, ruft die App auf Post.to_facebook. Aus meinen Protokollen kann ich das sehen Post.construct_facebook_action_url Konstruiert die richtige URL (denn wie gesagt kann ich die URL aus den Protokollen ziehen und manuell aus der Konsole posten). Ich gehe also davon aus, dass es so ein Problem damit gibt, wie ich die URL an Httparty weiterleite? Facebook scheint in der Lage zu sein, zu sagen, was Objekt iRL it it sollte sich ansehen. Warum funktioniert der Code, den ich geschrieben habe, nicht, sondern manuell in der Konsole?

Sogar Seltsamer - Sobald es einmal eine erfolgreiche Postaktion auf dem Objekt gegeben hat, scheint der Code konsequent zu funktionieren. Facebook betont Das Problem ist, dass die URLs der Objekte nicht erreichbar sind, aber ich kann nicht verstehen, wie sie nicht sind, da ich sie durchsuchen kann.

War es hilfreich?

Lösung

Ich denke, das ist eigentlich ein Timeout -Problem.

Ich hatte genau das gleiche Problem wie Sie, indem ich HTTParty und das Erhalten der URL nicht erreicht haben kann.

Ich habe den Code mithilfe von Resque in einen Hintergrundprozess verschoben und das Problem behoben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top