Envoyer des messages à Facebook OG avec HTTParty fonctionne uniquement à partir de la console de rails?

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

Question

Je vais avoir un problème vraiment bizarre avec mon application rails et bêta graphique open facebook. Chaque fois que je posterai une action à un objet, Facebook renvoie une erreur qui semble indiquer l'URL de l'objet ne peut pas être atteint, ou le grattoir og n'est pas racler l'URL correctement.

Cependant, quand je prends l'URL de l'application génère pour le poste à Facebook et d'utiliser manuellement la gemme HTTParty pour l'afficher, cela fonctionne.

Voici mon 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

Quand un objet est lu par la méthode show de son contrôleur, l'application appelle Post.to_facebook. De mes journaux, je peux voir que ce Post.construct_facebook_action_url est en train de construire l'URL correcte (parce que, comme je l'ai dit, je peux tirer l'URL à partir des journaux et afficher manuellement à partir de la console). Donc, je suppose qu'il ya problème si la façon dont je passe l'URL à HTTParty? Facebook semble capable de dire ce que l'URL de l'objet qu'il devrait examiner. Pourquoi le code que j'ai écrit pas le problème, mais manuellement dans la console, il fait?

Même plus étrange - une fois il y a eu une action post sucessful sur l'objet une fois, le code semble fonctionner de manière cohérente. Facebook insiste le problème est que les URL des objets ne sont pas accessibles, mais je ne peux pas comprendre comment ils ne sont pas, puisque je peux parcourir pour eux.

Était-ce utile?

La solution

Je pense que c'est en fait un problème de délai d'attente.

J'ai eu exactement le même problème que vous, en utilisant HTTParty et obtenir l'URL ne peut pas être atteint erreur.

I déplacé le code dans un processus d'arrière-plan en utilisant Resque et il a résolu le problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top