arb-xmu-course 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/arb-xmu-course +52 -62
- data/bin/check_code.jpeg +0 -0
- data/lib/arb/xmu/course/util/simple_des.rb +1 -1
- data/lib/arb/xmu/course/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 95c02ba43fd8cff44bd99d0992f983f4be15b0a3
|
4
|
+
data.tar.gz: 1fe1077cff0959c77facb0d390bc2ceb7d7c8278
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f83d157aed86f3291b09dd02f4d977fc71a65b7488577f73f85edd0adc5be632acea93ed9485d444b1f005b4f3a959b8a269d02f18a0bcf2c4e0bfcc8aa3a42c
|
7
|
+
data.tar.gz: 66fdacc1923b13469499aa558da1e6fa17ba168b0c26ac004559c98bacd0ccf0aba84ccc4e5886cf01eb956131d549167510e767e3dda8257e6e4c14d8aedd4c
|
data/bin/arb-xmu-course
CHANGED
@@ -11,6 +11,7 @@ include Arb::Xmu::Course
|
|
11
11
|
|
12
12
|
TOKEN_FILE_NAME = 'encrypted_token'
|
13
13
|
TOKEN_SEPARATOR = ':'
|
14
|
+
CLIENT = HTTPClient.new
|
14
15
|
|
15
16
|
|
16
17
|
def filter_text(raw)
|
@@ -112,74 +113,82 @@ def request_select_course(client, course_entity, xxlx, lcid)
|
|
112
113
|
JSON::parse msg.body
|
113
114
|
end
|
114
115
|
|
115
|
-
def create_attempt_thread(max_interval, client,
|
116
|
-
|
116
|
+
def create_attempt_thread(max_interval, client, course, xxlx, lcid, &block)
|
117
|
+
Thread.new do
|
117
118
|
count=0
|
118
119
|
loop do
|
119
120
|
count+=1
|
120
|
-
interval
|
121
|
+
interval= 1+rand(max_interval)
|
121
122
|
sleep interval
|
122
|
-
res = request_select_course(client,
|
123
|
-
if res[
|
124
|
-
$stdout.puts "课程:《#{
|
123
|
+
res = request_select_course(client, course, xxlx, lcid)
|
124
|
+
if res['success']
|
125
|
+
$stdout.puts "课程:《#{course.name}》已经成功选课!"
|
125
126
|
break
|
126
127
|
else
|
127
|
-
$stdout.puts "课程:《#{
|
128
|
+
$stdout.puts "课程:《#{course.name}》第#{count}次尝试选课失败,#{interval}秒后将重试。(错误信息:#{res['message']})"
|
128
129
|
end
|
130
|
+
exit if block.binding.local_variable_get(:opened_thread_count)-1==0
|
129
131
|
end
|
130
|
-
|
131
132
|
end
|
132
133
|
end
|
133
134
|
|
134
|
-
|
135
|
-
|
135
|
+
def prepare_select_course(client)
|
136
|
+
ensure_account
|
137
|
+
username, password = get_account_info
|
136
138
|
authorize_session(client, username, password)
|
137
|
-
|
138
|
-
|
139
|
-
school_courses = parse_courses((client.get 'http://bkxk.xmu.edu.cn/xsxk/yxxx.html').body)
|
140
|
-
show_courses_in_table school_courses
|
139
|
+
end
|
141
140
|
|
142
|
-
|
141
|
+
def try_to_select_courses(client, courses, xxlx, lcid)
|
142
|
+
$stdout.puts ''
|
143
143
|
$stdout.puts '输入要选的课程ID, 以空格分割:'
|
144
144
|
|
145
145
|
ids = $stdin.gets.chomp.split(' ')
|
146
146
|
|
147
|
-
$stdout.puts '
|
147
|
+
$stdout.puts '输入最大重试间隔时间,要求不得低于2秒:'
|
148
148
|
|
149
149
|
max_interval = $stdin.gets.chomp.to_i
|
150
150
|
max_interval = 2 if max_interval<2
|
151
|
-
|
151
|
+
opened_thread_count = ids.size
|
152
152
|
ids.each do |id|
|
153
|
-
create_attempt_thread(max_interval, client,
|
153
|
+
create_attempt_thread(max_interval, client, courses.find { |course| course.index==id.to_i }, xxlx, lcid) {}
|
154
154
|
end
|
155
|
+
end
|
155
156
|
|
156
|
-
|
157
|
-
|
157
|
+
def get_account_info
|
158
|
+
stu_id, passwd=nil
|
159
|
+
File.open TOKEN_FILE_NAME, 'r' do |file|
|
160
|
+
stu_id, passwd=SimpleDes.decrypt(file.read.split(TOKEN_SEPARATOR))
|
158
161
|
end
|
162
|
+
[stu_id, passwd]
|
163
|
+
end
|
159
164
|
|
160
165
|
|
161
|
-
|
166
|
+
def select_school_elective(client)
|
162
167
|
|
163
|
-
|
168
|
+
prepare_select_course(client)
|
169
|
+
school_courses = parse_courses((client.get 'http://bkxk.xmu.edu.cn/xsxk/yxxx.html').body)
|
170
|
+
show_courses_in_table school_courses
|
171
|
+
try_to_select_courses(client, school_courses, 4, get_main_select_round(client))
|
164
172
|
|
173
|
+
loop do
|
174
|
+
sleep 3
|
175
|
+
end
|
165
176
|
end
|
166
177
|
|
167
|
-
def
|
178
|
+
def select_general_elective
|
168
179
|
|
169
180
|
end
|
170
181
|
|
182
|
+
def select_public
|
171
183
|
|
172
|
-
unless (File.exists? TOKEN_FILE_NAME)
|
173
|
-
puts '请先设置账户信息(账户信息会先加密然后保存在本地,用于授权选课系统)'
|
174
|
-
set_up_account
|
175
|
-
exit
|
176
184
|
end
|
177
185
|
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
186
|
+
def ensure_account
|
187
|
+
unless (File.exists? TOKEN_FILE_NAME)
|
188
|
+
puts '请先设置账户信息(账户信息会先加密然后保存在本地,用于授权选课系统)'
|
189
|
+
set_up_account
|
190
|
+
exit
|
191
|
+
end
|
183
192
|
end
|
184
193
|
|
185
194
|
opts = Slop.parse do |o|
|
@@ -188,14 +197,18 @@ opts = Slop.parse do |o|
|
|
188
197
|
o.bool *%w{-r --reset}, '重置账户信息'
|
189
198
|
|
190
199
|
#院选课程 xxlx=4
|
191
|
-
o.bool *%w{-s --school}, '
|
200
|
+
o.bool *%w{-s --school}, '院选选课模式'
|
192
201
|
#校选课程 xxlx=3
|
193
|
-
o.bool *%w{-g --general}, '
|
202
|
+
o.bool *%w{-g --general}, '校选选课模式'
|
194
203
|
#公共课程 xxlx=5
|
195
|
-
o.bool *%w{-p --public}, '
|
204
|
+
o.bool *%w{-p --public}, '公共课选课模式'
|
205
|
+
|
206
|
+
o.bool *%w{-v --version}, '显示当前版本'
|
196
207
|
end
|
197
208
|
|
198
209
|
case true
|
210
|
+
when opts.version?
|
211
|
+
puts Arb::Xmu::Course::VERSION
|
199
212
|
when opts.help?
|
200
213
|
puts(opts) && exit
|
201
214
|
when opts.clear?
|
@@ -203,34 +216,11 @@ case true
|
|
203
216
|
when opts.reset?
|
204
217
|
set_up_account && exit
|
205
218
|
when opts.school?
|
206
|
-
select_school_elective(
|
219
|
+
select_school_elective(CLIENT)
|
207
220
|
when opts.general?
|
208
221
|
# select_general_elective
|
209
222
|
when opts.public?
|
210
223
|
# select_public
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
# #session init
|
216
|
-
# client.get 'http://bkxk.xmu.edu.cn/xsxk/login.html'
|
217
|
-
#
|
218
|
-
# File.open 'checkcode.jpeg','wb' do |file|
|
219
|
-
# file.write(client.get('http://bkxk.xmu.edu.cn/xsxk/getCheckCode').body)
|
220
|
-
# end
|
221
|
-
#
|
222
|
-
# puts 'enter your student id'
|
223
|
-
# user= gets.chomp
|
224
|
-
# puts 'enter your password'
|
225
|
-
# passwd=gets.chomp
|
226
|
-
# puts 'enter the checkcode'
|
227
|
-
# checkcode=gets.chomp
|
228
|
-
#
|
229
|
-
# client.get 'http://bkxk.xmu.edu.cn/xsxk/login.html',username: user,password: passwd,checkCode: checkcode
|
230
|
-
#
|
231
|
-
# puts (client.get 'http://bkxk.xmu.edu.cn/xsxk/localInfo.html').body
|
232
|
-
#
|
233
|
-
# Nokogiri::parse((client.get 'http://bkxk.xmu.edu.cn/xsxk/index.html').body).css('script').each do |x|
|
234
|
-
# puts x.text
|
235
|
-
# end
|
236
|
-
#
|
224
|
+
else
|
225
|
+
puts(opts) && exit
|
226
|
+
end
|
data/bin/check_code.jpeg
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: arb-xmu-course
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- arybin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-07-
|
11
|
+
date: 2016-07-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|