Envoyer des messages à Facebook OG avec HTTParty fonctionne uniquement à partir de la console de rails?
-
28-10-2019 - |
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.
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.