class ActivePublicResources::Drivers::KhanAcademy
Constants
- BASE_URL
- DRIVER_NAME
Public Instance Methods
perform_request(request_criteria)
click to toggle source
# File lib/active_public_resources/drivers/khan_academy.rb, line 10 def perform_request(request_criteria) request_criteria.folder ||= 'root' results, videos, exercises = get_folder(request_criteria.folder) parse_results(request_criteria, results, videos, exercises) end
Private Instance Methods
get_exercises(folder_id)
click to toggle source
# File lib/active_public_resources/drivers/khan_academy.rb, line 42 def get_exercises(folder_id) perform_rest_request("topic/#{folder_id}/exercises") end
get_folder(folder_id)
click to toggle source
# File lib/active_public_resources/drivers/khan_academy.rb, line 24 def get_folder(folder_id) results = perform_rest_request("topic/#{folder_id}") child_data_types = results['child_data'].map { |item| item['kind'] }.uniq videos = [] if child_data_types.include? "Video" videos = get_videos(folder_id) end exercises = [] if child_data_types.include? "Exercise" exercises = get_exercises(folder_id) end [results, videos, exercises] end
get_videos(folder_id)
click to toggle source
# File lib/active_public_resources/drivers/khan_academy.rb, line 38 def get_videos(folder_id) perform_rest_request("topic/#{folder_id}/videos") end
parse_exercise(data)
click to toggle source
# File lib/active_public_resources/drivers/khan_academy.rb, line 116 def parse_exercise(data) exercise = ActivePublicResources::ResponseTypes::Exercise.new exercise.id = data['global_id'] exercise.title = data['display_name'] exercise.description = data['description'] exercise.thumbnail_url = data['image_url_256'] exercise.url = data['ka_url'] exercise.return_types << APR::ReturnTypes::Url.new( :driver => DRIVER_NAME, :remote_id => data['global_id'], :url => exercise.url, :text => exercise.title, :title => exercise.title ) exercise end
parse_folder(data, parent_id)
click to toggle source
# File lib/active_public_resources/drivers/khan_academy.rb, line 71 def parse_folder(data, parent_id) folder = ActivePublicResources::ResponseTypes::Folder.new folder.id = data['id'] folder.title = data['title'] folder.parent_id = parent_id folder end
parse_parent_id(slug, extended_slug)
click to toggle source
# File lib/active_public_resources/drivers/khan_academy.rb, line 135 def parse_parent_id(slug, extended_slug) if extended_slug.present? if extended_slug != slug parts = extended_slug.split("/") parts.pop parts.last else 'root' end else nil end end
parse_results(request_criteria, results, videos=[], exercises=[])
click to toggle source
# File lib/active_public_resources/drivers/khan_academy.rb, line 46 def parse_results(request_criteria, results, videos=[], exercises=[]) parent_id = parse_parent_id(results['slug'], results['extended_slug']) driver_response = DriverResponse.new( :criteria => request_criteria, :next_criteria => nil, :total_items => results['children'].length ) topics = results['children'].find_all { |item| item['kind'] == 'Topic' } topics.each do |topic| driver_response.items << parse_folder(topic, parent_id) end videos.each do |video_data| driver_response.items << parse_video(video_data) end exercises.each do |exercise_data| driver_response.items << parse_exercise(exercise_data) end driver_response end
parse_video(data)
click to toggle source
# File lib/active_public_resources/drivers/khan_academy.rb, line 79 def parse_video(data) video = ActivePublicResources::ResponseTypes::Video.new video.id = data['readable_id'] video.title = data['title'] video.description = data['description'] video.thumbnail_url = data['image_url'] video.url = data['url'] video.embed_url = "https://www.youtube.com/embed/#{data['youtube_id']}?feature=oembed" video.duration = data['duration'] ? data['duration'].to_i : 0 video.num_views = 0 video.num_likes = 0 video.num_comments = 0 video.created_date = data['date_added'].present? ? Date.parse(data['date_added']) : nil video.username = data['author_names'].present? ? data['author_names'].first : '' video.width = 640 video.height = 360 # Return Types video.return_types << APR::ReturnTypes::Url.new( :driver => DRIVER_NAME, :remote_id => data['youtube_id'], :url => video.url, :text => video.title, :title => video.title ) video.return_types << APR::ReturnTypes::Iframe.new( :driver => DRIVER_NAME, :remote_id => data['youtube_id'], :url => "https://www.youtube.com/embed/#{data['youtube_id']}?feature=oembed", :text => video.title, :title => video.title, :width => 640, :height => 360 ) video end
perform_rest_request(path)
click to toggle source
# File lib/active_public_resources/drivers/khan_academy.rb, line 18 def perform_rest_request(path) uri = URI( BASE_URL + path ) res = Net::HTTP.get_response(uri) JSON.parse(res.body) end