Федоров Сергей, Evil Martians
def write_stats(publication, total, data = {})
activity = count_total_from_publication_data(publication)
update_activity(publication, activity)
total = activity.values.sum
if override_stat_date?(publication, 'created_at')
data[:date] = Time.parse(publication.data['created_at'])
end
unless dont_write_stats
if plays_total = publication.data.try(:[], 'playback_count').to_i
stat = \
Stat.record_total(
"soundcloud_plays",
{ project: publication.project, resource: publication }.merge(data),
plays_total
)
end
end
super
end
def write_stats(publication, total, data = {})
activity = count_total_from_publication_data(publication)
total = activity.values.sum
update_activity(publication, activity)
if override_stat_date?(publication, 'created_at')
data[:date] = Time.parse(publication.data['created_at'])
end
unless dont_write_stats
if plays_total = publication.data.try(:[], 'playback_count').to_i
stat = \
Stat.record_total(
"soundcloud_plays",
{ project: publication.project, resource: publication }.merge(data),
plays_total
)
end
end
super
end
def write_stats(publication, total, data = {})
activity = count_total_from_publication_data(publication)
total = activity.values.sum
update_activity(publication, activity)
if override_stat_date?(publication, 'created_at')
data[:date] = Time.parse(publication.data['created_at'])
end
unless dont_write_stats
if plays_total = publication.data.try(:[], 'playback_count').to_i
stat = \
Stat.record_total(
"soundcloud_plays",
{ project: publication.project, resource: publication }.merge(data),
plays_total
)
end
end
super
end
def write_stats(publication, total, data = {})
activity = count_total_from_publication_data(publication)
total = activity.values.sum
update_activity(publication, activity)
if override_stat_date?(publication, 'created_at')
data[:date] = Time.parse(publication.data['created_at'])
end
unless dont_write_stats
if plays_total = publication.data.try(:[], 'playback_count').to_i
stat = \
Stat.record_total(
"soundcloud_plays",
{ project: publication.project, resource: publication }.merge(data),
plays_total
)
end
end
super
end
def write_stats(publication, total, data = {})
activity = count_total_from_publication_data(publication)
total = activity.values.sum
update_activity(publication, activity)
if override_stat_date?(publication, 'created_at')
data[:date] = Time.parse(publication.data['created_at'])
end
unless dont_write_stats
if plays_total = publication.data.try(:[], 'playback_count').to_i
stat = \
Stat.record_total(
"soundcloud_plays",
{ project: publication.project, resource: publication }.merge(data),
plays_total
)
end
end
super
end
def write_stats(publication, total, data = {})
activity = count_total_from_publication_data(publication)
total = activity.values.sum
update_activity(publication, activity)
if override_stat_date?(publication, 'created_at')
data[:date] = Time.parse(publication.data['created_at'])
end
unless dont_write_stats
if plays_total = publication.data.try(:[], 'playback_count').to_i
stat = \
Stat.record_total(
"soundcloud_plays",
{ project: publication.project, resource: publication }.merge(data),
plays_total
)
end
end
super
end
def write_stats(publication, total, data = {})
activity = count_total_from_publication_data(publication)
total = activity.values.sum
update_activity(publication, activity)
if override_stat_date?(publication, 'created_at')
data[:date] = Time.parse(publication.data['created_at'])
end
unless dont_write_stats
if plays_total = publication.data.try(:[], 'playback_count').to_i
stat = \
Stat.record_total(
"soundcloud_plays",
{ project: publication.project, resource: publication }.merge(data),
plays_total
)
end
end
super
end
def access_token
# We store only refresh token and for each request
# just fetching new access token
api = Odnoklassniki::Client.new(
access_token: @account.token,
client_id: Settings.odnoklassniki.app_id,
client_secret: Settings.odnoklassniki.app_secret,
)
new_token = api.refresh_token!
raise Social::API::Unauthorized if new_token.blank?
api
end
def access_token
# We store only refresh token and for each request
# just fetching new access token
api = Odnoklassniki::Client.new(
access_token: @account.token,
client_id: Settings.odnoklassniki.app_id,
client_secret: Settings.odnoklassniki.app_secret,
)
new_token = api.refresh_token!
raise Social::API::Unauthorized if new_token.blank?
api
end
def access_token
# We store only refresh token and for each request
# just fetching new access token
api = Odnoklassniki::Client.new(
access_token: @account.token,
client_id: Settings.odnoklassniki.app_id,
client_secret: Settings.odnoklassniki.app_secret,
)
new_token = api.refresh_token!
if new_token.blank?
@account.disable!
raise Social::API::Unauthorized
end
api
end
def rest_client_with_refreshed_token
client = Odnoklassniki::Client.new(
access_token: @account.token,
client_id: Settings.odnoklassniki.app_id,
client_secret: Settings.odnoklassniki.app_secret,
)
refreshed_token = client.refresh_token!
raise Social::API::Unauthorized if refreshed_token.blank?
client
end
module Social
module API
class Vkontakte
def initialize(access_token)
@access_token = access_token
end
# ...
end
end
end
module Social
module API
class Twitter
def initialize(access_token)
@access_token = access_token
end
# ...
end
end
end
module Social
module API
class Base
def initialize(access_token)
@access_token = access_token
end
end
end
end
module Social
module API
class Vkontakte < Base
# ...
end
end
end
module Social
module API
class Base
def initialize(access_token)
@access_token = access_token
end
def rescue_api_errors(error, args)
# ..
end
def send_notification
# ...
end
end
end
end
def fetch_account_publications(opts = {})
all = api_fetch
posts = all['feeds']
entities = all['entities'].try(:[], 'media_topics') || []
return unless posts.present? || entities.present?
posts.each do |story|
publication = find_publication(story)
likes = entities.find { |it| it['ref'] == story['target_refs'].try(:[], 0) }
likes = likes['like_summary']['count'] if likes
likes ||= 0
comments = story['discussion_summary'].try(:[], 'comments_count').to_i
shares = 0
update_activity(publication, {like: likes, share: shares, comment: comments})
total = comments + likes
write_stats(publication, total) if publication.is_a?(Social::ExternalPublication)
end
end
def fetch_account_publications(opts = {})
all = api_fetch
posts = all['feeds']
entities = all['entities'].try(:[], 'media_topics') || []
return unless posts.present? || entities.present?
posts.each do |story|
publication = find_publication(story)
likes = entities.find { |it| it['ref'] == story['target_refs'].try(:[], 0) }
likes = likes['like_summary']['count'] if likes
likes ||= 0
comments = story['discussion_summary'].try(:[], 'comments_count').to_i
shares = 0
update_activity(publication, {like: likes, share: shares, comment: comments})
total = comments + likes
write_stats(publication, total) if publication.is_a?(Social::ExternalPublication)
end
end
def fetch_account_publications(opts = {})
all = api_fetch
posts = all['feeds']
entities = all['entities'].try(:[], 'media_topics') || []
return unless posts.present? || entities.present?
posts.each do |story|
publication = find_publication(story)
likes = entities.find { |it| it['ref'] == story['target_refs'].try(:[], 0) }
likes = likes['like_summary']['count'] if likes
likes ||= 0
comments = story['discussion_summary'].try(:[], 'comments_count').to_i
shares = 0
update_activity(publication, {like: likes, share: shares, comment: comments})
total = comments + likes
write_stats(publication, total) if publication.is_a?(Social::ExternalPublication)
end
end
def get_publication_activity(story)
publication = find_publication(story)
likes = entities.find { |it| it['ref'] == story['target_refs'].try(:[], 0) }
likes = likes['like_summary']['count'] if likes
likes ||= 0
comments = story['discussion_summary'].try(:[], 'comments_count').to_i
shares = 0
{likes: likes, comments: comments, shares: shares}
end
class PublicationStatistics
def likes
# ...
end
def comments
# ...
end
def shares
# ...
end
end