Class: CodeBadges::CademySite
- Inherits:
-
Object
- Object
- CodeBadges::CademySite
- Defined in:
- lib/codebadges/site.rb
Overview
CodeCademy web automation and scraper
Constant Summary collapse
- MAIN_URL =
'https://www.codecademy.com'.freeze
- USERS_URL =
"#{MAIN_URL}/users".freeze
- ACHIEVEMENTS_DIR =
'achievements'.freeze
- LOGIN_URL =
"#{MAIN_URL}/login".freeze
- USERNAME_TEXTFIELD_ID =
'user_login'.freeze
- PASSWORD_TEXTFIELD_ID =
'user_password'.freeze
- LOGIN_BUTTON_ID =
'user_submit'.freeze
- ACHIEVEMENT_XPATH =
"//div[contains(@class,'achievement-card')]".freeze
- ACH_TITLE_XPATH =
'h5'.freeze
- ACH_DATE_XPATH =
'small/small'.freeze
- COURSES_XPATH =
"//div[h5/strong/text()='Learn To Code']/div/div/ul/li/a".freeze
Class Method Summary collapse
Instance Method Summary collapse
- #extract_achievements ⇒ Object
- #extract_main_courses ⇒ Object
- #goto(url) ⇒ Object
-
#initialize {|_self| ... } ⇒ CademySite
constructor
A new instance of CademySite.
- #login(username, password) ⇒ Object
Constructor Details
#initialize {|_self| ... } ⇒ CademySite
Returns a new instance of CademySite.
22 23 24 25 26 27 28 |
# File 'lib/codebadges/site.rb', line 22 def initialize @browser = Mechanize.new do |agent| agent.user_agent_alias = 'Linux Firefox' end yield self if block_given? end |
Class Method Details
.cadet_achievements_url(cadet) ⇒ Object
30 31 32 |
# File 'lib/codebadges/site.rb', line 30 def self.cadet_achievements_url(cadet) "#{USERS_URL}/#{cadet}/#{ACHIEVEMENTS_DIR}" end |
Instance Method Details
#extract_achievements ⇒ Object
46 47 48 49 50 51 52 |
# File 'lib/codebadges/site.rb', line 46 def extract_achievements @browser.page.xpath(ACHIEVEMENT_XPATH).map do |achievement| title = achievement.xpath(ACH_TITLE_XPATH).text date = Date.parse(achievement.xpath(ACH_DATE_XPATH).text) [title, date] end.to_h end |
#extract_main_courses ⇒ Object
54 55 56 57 58 |
# File 'lib/codebadges/site.rb', line 54 def extract_main_courses @browser.page.xpath(COURSES_XPATH).map do |course| [course.text, URI.join(MAIN_URL, course.attribute('href').value)] end.to_h end |
#goto(url) ⇒ Object
34 35 36 |
# File 'lib/codebadges/site.rb', line 34 def goto(url) @browser.get(url) end |
#login(username, password) ⇒ Object
38 39 40 41 42 43 44 |
# File 'lib/codebadges/site.rb', line 38 def login(username, password) @browser.page.form do |form| form.field(id: USERNAME_TEXTFIELD_ID).value = username form.field(id: PASSWORD_TEXTFIELD_ID).value = password form.submit end end |