1
0
Fork 0
msu-course-checker/check.rb

62 lines
1.9 KiB
Ruby
Executable file

#!/usr/bin/env ruby
require 'net/http'
require 'uri'
require 'twilio-ruby'
require 'yaml'
abort "usage: ./check.rb SEMESTER SUBJECT COURSE [SECTIONS]\n" unless ARGV.length > 2
settings = YAML.load_file('conf/settings.yml')
semesters = {
'US13' => 'US131132summer 2013', 'FS13' => 'FS131134fall 2013',
'SS14' => 'SS141136spring 2014',
'US14' => 'US141142summer 2014',
}
semester = ARGV.shift
subject = ARGV.shift
course = ARGV.shift
sections = ARGV
abort "Requires a valid semester code\n" unless semesters.has_key?(semester)
data = {
'Semester' => semesters[semester],
'Post' => 'Y', 'Button' => '', 'Online' => '',
'Subject' => subject, 'CourseNumber'=> course,
'Instructor' => 'ANY',
'StartTime' => '0600', 'EndTime' => '2350',
'OnBeforeDate' => '', 'OnAfterDate' => '',
'Sunday' => 'Su', 'Monday' => 'M', 'Tuesday' => 'Tu',
'Wednesday' => 'W', 'Thursday' => 'Th', 'Friday' => 'F',
'Saturday' => 'Sa',
'OnCampus' => 'Y', 'OffCampus' => 'Y', 'OnlineCourses' => 'Y',
'StudyAbroad' => 'Y', 'MSUDubai' => 'Y',
'OpenCourses' => 'A',
'Submit' => 'Search for Courses'
}
response = Net::HTTP.post_form(
URI.parse('http://schedule.msu.edu/searchResults.asp'),
data
)
courses = response.body.scan(/<a.*?title="(.*?) Section - LOG IN to add Section (.*?) to your planner">.*<\/a>/)
open = Array.new
courses.each do |course|
open << course.last if course.first == 'Open' && sections.include?(course.last)
end
if open.length > 0
@client = Twilio::REST::Client.new settings['twilio']['sid'],
settings['twilio']['token']
@call = @client.account.calls.create(
:from => '+' + settings['application']['from'],
:to => '+' + settings['application']['to'],
:url => 'http://twimlbin.com/external/23144346c2f2a287'
)
end