53 lines
1.6 KiB
Ruby
53 lines
1.6 KiB
Ruby
class Services::Facebook < Service
|
|
MAX_CHARACTERS = 420
|
|
|
|
after_create do
|
|
Resque.enqueue(Job::UpdateServiceUsers, self.id)
|
|
end
|
|
|
|
def provider
|
|
"facebook"
|
|
end
|
|
|
|
def post(post, url='')
|
|
Rails.logger.debug("event=post_to_service type=facebook sender_id=#{self.user_id}")
|
|
message = public_message(post, url)
|
|
begin
|
|
RestClient.post("https://graph.facebook.com/me/feed", :message => message, :access_token => self.access_token)
|
|
rescue Exception => e
|
|
Rails.logger.info("#{e.message} failed to post to facebook")
|
|
end
|
|
end
|
|
|
|
def public_message(post, url)
|
|
super(post, MAX_CHARACTERS, url)
|
|
end
|
|
|
|
def finder(opts = {})
|
|
Rails.logger.debug("event=friend_finder type=facebook sender_id=#{self.user_id}")
|
|
if self.service_users == []
|
|
self.save_friends
|
|
else
|
|
Resque.enqueue(Job::UpdateServiceUsers, self.id)
|
|
end
|
|
person = Person.arel_table
|
|
service_user = ServiceUser.arel_table
|
|
if opts[:local]
|
|
ServiceUser.joins(:person).where(:service_id => self.id).where(person[:owner_id].not_eq(nil)).all
|
|
elsif opts[:remote]
|
|
ServiceUser.joins(:person).where(:service_id => self.id).where(person[:owner_id].eq(nil)).all
|
|
else
|
|
self.service_users
|
|
end
|
|
end
|
|
|
|
def save_friends
|
|
url = "https://graph.facebook.com/me/friends?fields[]=name&fields[]=picture&access_token=#{URI.escape(self.access_token)}"
|
|
response = RestClient.get(url)
|
|
data = JSON.parse(response.body)['data']
|
|
data.each{ |p|
|
|
ServiceUser.find_or_create_by_service_id_and_uid(:service_id => self.id, :name => p["name"],
|
|
:uid => p["id"], :photo_url => p["picture"])
|
|
}
|
|
end
|
|
end
|