trabajo-afectivo/app/models/channel/driver/facebook.rb

89 lines
2.1 KiB
Ruby
Raw Normal View History

# Copyright (C) 2012-2015 Zammad Foundation, http://zammad-foundation.org/
require 'facebook'
2012-04-10 14:06:46 +00:00
2015-08-28 00:53:14 +00:00
class Channel::Driver::Facebook
2012-04-10 14:06:46 +00:00
def fetch (options, channel)
@channel = channel
@sync = options['sync']
@pages = options['pages']
Rails.logger.debug 'facebook fetch started'
fetch_feed
disconnect
Rails.logger.debug 'facebook fetch completed'
notice = ''
{
result: 'ok',
notice: notice,
}
2012-04-10 14:06:46 +00:00
end
2014-06-22 07:00:09 +00:00
def send(options, fb_object_id, article, _notification = false)
access_token = nil
2016-06-30 20:04:48 +00:00
options['pages'].each { |page|
next if page['id'].to_s != fb_object_id.to_s
access_token = page['access_token']
}
if !access_token
2016-03-01 14:26:46 +00:00
raise "No access_token found for fb_object_id: #{fb_object_id}"
end
client = Facebook.new(access_token)
client.from_article(article)
end
=begin
instance = Channel::Driver::Facebook.new
instance.fetchable?(channel)
=end
2016-07-18 13:49:31 +00:00
def fetchable?(channel)
2016-07-18 07:37:43 +00:00
return true if Rails.env.test?
# because of new page rate limit - https://developers.facebook.com/blog/post/2016/06/16/page-level-rate-limits/
# only fetch once in 5 minutes
return true if !channel.preferences
return true if !channel.preferences[:last_fetch]
return false if channel.preferences[:last_fetch] > Time.zone.now - 5.minutes
true
end
2014-06-22 07:00:09 +00:00
def disconnect
2014-06-22 07:00:09 +00:00
end
private
def get_page(page_id)
2016-06-30 20:04:48 +00:00
@pages.each { |page|
return page if page['id'].to_s == page_id.to_s
}
nil
end
def fetch_feed
return if !@sync
return if !@sync['pages']
2016-06-30 20:04:48 +00:00
@sync['pages'].each { |page_to_sync_id, page_to_sync_params|
page = get_page(page_to_sync_id)
next if !page
next if !page_to_sync_params['group_id']
next if page_to_sync_params['group_id'].empty?
page_client = Facebook.new(page['access_token'])
posts = page_client.client.get_connection('me', 'feed', fields: 'id,from,to,message,created_time,comments')
2016-06-30 20:04:48 +00:00
posts.each { |post|
page_client.to_group(post, page_to_sync_params['group_id'], @channel, page)
}
}
true
2012-04-10 14:06:46 +00:00
end
end