Pregunta

Tengo un problema realmente extraño con mi aplicación Rails y el gráfico abierto de Facebook. Cada vez que publico una acción en un objeto, Facebook devuelve un error que parece indicar que no se puede alcanzar la URL del objeto, o el raspador OG no raspa la URL correctamente.

Sin embargo, cuando tomo la URL que la aplicación está generando para la publicación en Facebook y uso manualmente la gema HTTParty para publicarla, funciona.

Aquí está mi código:

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

Cuando se lee un objeto a través del método de exhibición de su controlador, la aplicación llama Post.to_facebook. De mis registros, puedo ver que eso Post.construct_facebook_action_url está construyendo la URL adecuada (porque, como dije, puedo sacar la URL de los registros y publicarla manualmente desde la consola). Entonces, ¿supongo que hay un problema con cómo estoy pasando la URL a HttParty? Facebook parece capaz de decir qué objeto url es debería estar mirando. ¿Por qué el código que he escrito no funciona, sino manualmente en la consola, lo hace?

Aún más extraño: una vez que ha habido una acción posterior exitosa en el objeto una vez, el código parece funcionar de manera consistente. Facebook insiste en El problema es que las URL de los objetos no pueden accesibles, pero no puedo entender cómo no lo son, ya que puedo navegar con ellas.

¿Fue útil?

Solución

Creo que este es en realidad un problema de tiempo de espera.

Tuve exactamente el mismo problema que usted, usando HTTParty y no se puede alcanzar la URL.

Moví el código a un proceso de fondo usando Resque y solucionó el problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top