-
Notifications
You must be signed in to change notification settings - Fork 0
/
student daily page view activities in a Canvas course
51 lines (45 loc) · 1.69 KB
/
student daily page view activities in a Canvas course
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
require 'rubygems'
require 'json'
require 'canvas-api'
require 'csv'
require 'date'
canvas = Canvas::API.new(:host => "your Canvas instance domain", :token => "your token")
output_columns = %w(name user_id enrolled_at last_activity_at grade total_activity_time)
printed_headers=true
enrollments = canvas.get("/api/v1/courses/#ReplaceWithCourseNumber/enrollments?per_page=50&role[]=StudentEnrollment")
while enrollments.more?
enrollments.next_page!
end
CSV.open("courseactivity.csv", "w") do |csv|
CSV.open("coursepageviews.csv", "w") do |csv2|
csv2 << ["datetime","daily_page_views","user","cumulative_visit_times","cumulative_page_views",'visit_group',"pageview_id","date"]
csv<<output_columns
enrollments.each do |enrol|
if enrol['type'].downcase.include?('studentenrollment') && enrol["total_activity_time"] >0
enrol["grade"]=enrol["grades"]["final_score"]
enrol["name"]=enrol["user"]["name"]
enrol['enrolled_at']=enrol['created_at']
csv<< enrol.values_at(*output_columns)
activities = canvas.get("/api/v1/courses/#ReplaceWithCourseNumber/analytics/users/#{enrol['user_id']}/activity?per_page=50")
pageview=[]
totalvisit=[]
count=Hash.new(0)
activities["page_views"].each do |ct|
if DateTime.strptime(ct[0]).to_date > Date.new(2016,8,1)
pageview << ct[1]
ct << enrol['user_id']
ct << pageview.count { |element| element>0 }
ct << pageview.inject(0){|sum,num|sum+num}
if pageview.count { |element| element>0 } == 1
ct<< 'new visit'
else ct<< 'return visit'
end
ct << [enrol['user_id'],ct[0][11,2]].join('').to_s
ct << DateTime.strptime(ct[0]).to_date
csv2 << ct
end
end
end
end
end
end