You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
2.9 KiB
90 lines
2.9 KiB
namespace :video do
|
|
desc "get video play data"
|
|
task :data => :environment do
|
|
start_times = ['2019-08-19 00:00:00', '2019-11-10 00:00:00']
|
|
end_times = ['2019-11-09 23:59:59', '2020-02-06 00:00:00']
|
|
|
|
Video.all.each do |video|
|
|
vv = 0
|
|
play_duration = 0
|
|
|
|
start_times.each_with_index do |time, index|
|
|
start_time = time.to_time.utc.strftime('%Y-%m-%dT%H:%M:%SZ')
|
|
end_time = end_times[index].to_time.utc.strftime('%Y-%m-%dT%H:%M:%SZ')
|
|
|
|
data = AliyunVod::Service.video_data(video.uuid, start_time, end_time)
|
|
|
|
puts data
|
|
if data[:VideoPlayStatisDetails].present?
|
|
sum_duration = data[:VideoPlayStatisDetails][:VideoPlayStatisDetail].map(&:PlayDuration).sum
|
|
sum_vv = data[:VideoPlayStatisDetails][:VideoPlayStatisDetail].map(&:vv).sum
|
|
|
|
vv += sum_vv
|
|
play_duration += sum_duration
|
|
end
|
|
end
|
|
|
|
video.update!(vv: vv, play_duration: play_duration)
|
|
puts video.id
|
|
end
|
|
end
|
|
|
|
desc "将http修改成http"
|
|
task modify_http_to_https_file_url: :environment do
|
|
p "s"
|
|
if ENV['args']
|
|
course_id = ENV['args'].split(",")[0]
|
|
video_ids = CourseVideo.where(course_id: course_id).pluck(:video_id)
|
|
videos = Video.where(id: video_ids)
|
|
if videos
|
|
videos.each do |v|
|
|
if v.file_url
|
|
file_url = v.file_url.gsub("http:", "https:")
|
|
v.update_column(:file_url, file_url)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
# 执行示例 bundle exec rake video:sample args=2933,'2019-08-19 00:00:00','2019-11-09 23:59:59'
|
|
task :sample => :environment do
|
|
if ENV['args']
|
|
video_id = ENV['args'].split(",")[0]
|
|
start_time = ENV['args'].split(",")[1].to_s.to_time.utc.iso8601 # 表示开始时间
|
|
end_time = ENV['args'].split(",")[2].to_s.to_time.utc.iso8601 # 表示结束时间
|
|
|
|
video=Video.find video_id
|
|
data = AliyunVod::Service.video_data(video.uuid, start_time, end_time)
|
|
|
|
puts data
|
|
end
|
|
end
|
|
|
|
task :get_play_url => :environment do
|
|
Video.where(play_url: nil).each do |video|
|
|
result = AliyunVod::Service.get_play_info(video.uuid) rescue nil
|
|
if result.present? && result["PlayInfoList"]["PlayInfo"].present?
|
|
puts result
|
|
play_url = result["PlayInfoList"]["PlayInfo"].first["PlayURL"]
|
|
puts play_url
|
|
# play_url = (result.dig('PlayInfoList', 'PlayInfo') || []).first&.[]('PlayURL')
|
|
|
|
video.update!(play_url: play_url) if play_url.present?
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
task :set_duration => :environment do
|
|
videos = Video.published.where("duration = 0")
|
|
videos.find_each do |v|
|
|
result = AliyunVod::Service.get_play_info(v.uuid)
|
|
if result.present? && result['PlayInfoList']['PlayInfo'][0]['Duration'].present?
|
|
p "-----#{v.id} , #{result['PlayInfoList']['PlayInfo'][0]['Duration']}"
|
|
v.update(duration: result['PlayInfoList']['PlayInfo'][0]['Duration'])
|
|
end
|
|
end
|
|
|
|
end
|
|
end |