class Coursera::CourseraApi
This class is in charge of the work involving using Coursera
API
Constants
- BATCH_SIZE
- COURSERA_CATOLOG_API_URL
- COURSERA_COURSE_LINK_BASE
Public Class Methods
courses()
click to toggle source
# File lib/share_learning/coursera_api.rb, line 15 def self.courses return @courses if @courses @courses = retrieve_all_courses end
total_course_num()
click to toggle source
# File lib/share_learning/coursera_api.rb, line 11 def self.total_course_num @total_course_num = retrieve_total_course_num end
Private Class Methods
new_batch_merged(retrieved_courses, course_start)
click to toggle source
# File lib/share_learning/coursera_api.rb, line 55 def self.new_batch_merged(retrieved_courses, course_start) # Use the API to get courses response on Coursera retrieved_batch = query_a_batch_of_courses(course_start) # Parse the response to get the desired courses data parsed_batch = parse_batch_result(course_start, retrieved_batch) # Merge the parsed batch of courses retrieved_courses.merge(parsed_batch) end
number_of_batches()
click to toggle source
# File lib/share_learning/coursera_api.rb, line 49 def self.number_of_batches result = retrieve_total_course_num / BATCH_SIZE result += 1 unless (@total_course_num % BATCH_SIZE).zero? result end
parse_batch_result(course_start, retrieved_batch)
click to toggle source
# File lib/share_learning/coursera_api.rb, line 78 def self.parse_batch_result(course_start, retrieved_batch) # Create an parsed dump parsed_courses = {} count = course_start retrieved_batch[:courses].each do |course| parsed_courses[count] = parse_course(course) count += 1 end parsed_courses end
parse_course(course)
click to toggle source
# File lib/share_learning/coursera_api.rb, line 89 def self.parse_course(course) parsed_course = {} parsed_course[:course_type] = course['courseType'] parsed_course[:course_id] = course['id'] parsed_course[:course_slug] = course['slug'] parsed_course[:course_name] = course['name'] parsed_course[:link] = COURSERA_COURSE_LINK_BASE + course['slug'] parsed_course[:description] = course['description'] parsed_course[:photo_url] = course['photoUrl'] parsed_course end
query_a_batch_of_courses(course_start)
click to toggle source
# File lib/share_learning/coursera_api.rb, line 65 def self.query_a_batch_of_courses(course_start) # Create an API response dump retrieved_batch = {} query_response = HTTP.get(COURSERA_CATOLOG_API_URL, params: { start: course_start, limit: BATCH_SIZE, fields: 'description,photoUrl' }) body_str = query_response.body.to_s retrieved_batch[:courses] = JSON.parse(body_str)['elements'] retrieved_batch end
retrieve_all_courses()
click to toggle source
# File lib/share_learning/coursera_api.rb, line 32 def self.retrieve_all_courses # Create an dump for retrieved courses retrieved_courses = {} # Set the relating numbers batch_start = 0 # Retrieve courses batch by batch number_of_batches.times do # Jump out the loop if we know there is not any courses left break if batch_start >= @total_course_num retrieved_courses = new_batch_merged(retrieved_courses, batch_start) # Increase the course number to start with next batch batch_start += BATCH_SIZE end retrieved_courses end
retrieve_total_course_num()
click to toggle source
# File lib/share_learning/coursera_api.rb, line 20 def self.retrieve_total_course_num return @total_course_num if @total_course_num # Retrieve the total number of courses on the catlog course_start_num = 0 course_num_limit = 0 query_response = HTTP.get(COURSERA_CATOLOG_API_URL, params: { start: course_start_num, limit: course_num_limit }) JSON.parse(query_response.body.to_s)['paging']['total'] end