Размещение в Facebook OG с Httparty работает только с консоли Rails?

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

Вопрос

У меня действительно странная проблема с моим приложением Rails и бета -версией Facebook. Всякий раз, когда я публикую действие в объект, Facebook возвращает ошибку, которая, по -видимому, указывает на URL -адрес объекта не может быть достигнут, или скребок OG неправильно соскабливает URL.

Однако, когда я принимаю URL, приложение генерирует для поста в Facebook и вручную использую драгоценный камень Httparty, чтобы опубликовать его, он работает.

Вот мой код:

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 из журналов и вручную опубликовать его из консоли). Итак, я предполагаю, что есть такая проблема с тем, как я передаю URL -адрес httparty? Facebook, кажется, может сказать, какой объект URL IT IT должен смотреть на. Почему код, который я написал, не работает, а вручную в консоли?

Даже более странное - как только когда -то было успешное действие пост на объекте, код, кажется, работает последовательно. Facebook настаивает Проблема в том, что URL -адреса объектов не доступны, но я не могу понять, чем они нет, так как я могу просматривать их.

Это было полезно?

Решение

Я думаю, что это на самом деле проблема с тайм -аутом.

У меня была такая же проблема, что и вы, используя httparty, и получение URL -адреса не может достичь ошибки.

Я переместил код в фоновый процесс, используя Resque, и он исправил проблему.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top