dragongoserver 0.1.1 → 0.3.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.
- data/History.txt +16 -0
- data/bin/dgs +135 -33
- data/lib/dragongoserver.rb +3 -1
- data/lib/dragongoserver/dragongoserver.rb +195 -23
- data/lib/dragongoserver/game.rb +10 -0
- data/lib/dragongoserver/version.rb +2 -2
- data/test/test_dragongoserver.rb +193 -54
- data/test/test_helper.rb +1 -0
- metadata +22 -63
- data/License.txt +0 -20
- data/Manifest.txt +0 -21
- data/Rakefile +0 -4
- data/config/hoe.rb +0 -75
- data/config/requirements.rb +0 -17
- data/examples/example1.rb +0 -39
- data/log/debug.log +0 -0
- data/script/destroy +0 -14
- data/script/generate +0 -14
- data/setup.rb +0 -1585
- data/tasks/deployment.rake +0 -27
- data/tasks/environment.rake +0 -7
- data/tasks/website.rake +0 -17
data/History.txt
CHANGED
@@ -1,3 +1,19 @@
|
|
1
|
+
== 0.3.0 2009-07-10
|
2
|
+
|
3
|
+
* 1 bug-fix:
|
4
|
+
* Encoding-Klauseln fuer Ruby 1.9 ergaenzt
|
5
|
+
* 2 enhancements:
|
6
|
+
* new option --threshold=N
|
7
|
+
* Ruby 1.9 compatibility
|
8
|
+
|
9
|
+
== 0.2.0 2008-05-06
|
10
|
+
|
11
|
+
* 2 enhancements:
|
12
|
+
* new option --check-timeout-finished=userid
|
13
|
+
* new method finished_games_for_user
|
14
|
+
* 1 bug-fix:
|
15
|
+
* method renaming error (neue_zuege? -> new_moves?)
|
16
|
+
|
1
17
|
== 0.1.0 2008-04-27
|
2
18
|
* 4 enhancements:
|
3
19
|
* new option -min/--min-wait in dgs script
|
data/bin/dgs
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
2
3
|
|
3
4
|
require 'rubygems'
|
4
5
|
require 'dragongoserver'
|
@@ -6,10 +7,10 @@ require 'choice'
|
|
6
7
|
|
7
8
|
version = Dragongoserver::VERSION::STRING
|
8
9
|
Choice.options do
|
9
|
-
header ''
|
10
|
-
header 'Specific options:'
|
10
|
+
# header ''
|
11
|
+
# header 'Specific options:'
|
11
12
|
#...
|
12
|
-
separator ''
|
13
|
+
#separator ''
|
13
14
|
separator 'Common options: '
|
14
15
|
|
15
16
|
option :help do
|
@@ -51,19 +52,21 @@ Choice.options do
|
|
51
52
|
long '--osd'
|
52
53
|
desc 'Show messages as an on-screen-display, "osd_cat" must be installed (see http://www.ignavus.net/software.html for further details)'
|
53
54
|
end
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
55
|
+
|
56
|
+
option :finished_games do
|
57
|
+
short '-fg'
|
58
|
+
long '--finished-games'
|
59
|
+
desc 'display the most recent finished games'
|
60
|
+
#cast Integer
|
61
|
+
#default 10
|
60
62
|
end
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
63
|
+
|
64
|
+
# listet auf, wie oft ein Spieler in den beendeten Spielen
|
65
|
+
# durch Timeout verloren hat
|
66
|
+
option :check_timeout_finished do
|
67
|
+
short '-ctf'
|
68
|
+
long '--check-timeout-finished'
|
69
|
+
cast Integer # User-id
|
67
70
|
end
|
68
71
|
|
69
72
|
option :with_name do
|
@@ -71,12 +74,50 @@ Choice.options do
|
|
71
74
|
long '--with-name'
|
72
75
|
desc 'Show games with name'
|
73
76
|
end
|
77
|
+
|
78
|
+
option :min_wait do
|
79
|
+
short '-mw'
|
80
|
+
long '--min-wait'
|
81
|
+
desc 'Minimum wait time in minutes'
|
82
|
+
cast Integer
|
83
|
+
default 1
|
84
|
+
end
|
85
|
+
|
86
|
+
option :threshold do
|
87
|
+
short '-s'
|
88
|
+
long '--threshold'
|
89
|
+
desc 'Minimum number of waiting games'
|
90
|
+
cast Integer
|
91
|
+
default 1
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
74
95
|
|
96
|
+
if Choice.choices['check_timeout_finished']
|
97
|
+
puts "timeout check für user #{Choice.choices['check_timeout_finished']} ausgewählt"
|
98
|
+
dgs_username = ENV['DGS_USERNAME']
|
99
|
+
dgs_password = ENV['DGS_PASSWORD']
|
100
|
+
@dgs = Dgs.new(dgs_username, dgs_password)
|
101
|
+
finished = @dgs.finished_games_for_user(Choice.choices['check_timeout_finished'])
|
102
|
+
count = 0
|
103
|
+
finished.each {|g|
|
104
|
+
if g[:reason] == 'Time' and
|
105
|
+
g[:winner] != g[:player_color]
|
106
|
+
#p g[:winner] #
|
107
|
+
#g[:winner] != g[:player_color]
|
108
|
+
count += 1
|
109
|
+
end
|
110
|
+
}
|
111
|
+
puts "at least #{finished.size} finished games"
|
112
|
+
puts "#{count} games finished with timeout"
|
113
|
+
exit
|
75
114
|
end
|
76
115
|
|
116
|
+
@cache_gameinfos = {}
|
77
117
|
#p Choice.choices
|
78
118
|
opt_waiting = Choice.choices['waiting'] # true/false
|
79
119
|
opt_running = Choice.choices['running'] # true/false
|
120
|
+
opt_finished_games = Choice.choices['finished_games'] # true/false
|
80
121
|
$opt_with_name = Choice.choices['with_name'] # true/false
|
81
122
|
@opt_osd = Choice.choices['osd'] # true/false
|
82
123
|
opt_waitingloop = Choice.choices['waitingloop'] # true/false
|
@@ -103,6 +144,39 @@ if opt_running
|
|
103
144
|
end
|
104
145
|
end
|
105
146
|
|
147
|
+
if opt_finished_games
|
148
|
+
=begin
|
149
|
+
<tr class=Row3 ondblclick="javascript:this.className=((this.className=='Row3')?'HilRow3':'Row3');">
|
150
|
+
|
151
|
+
<td class=Button><a class=Button href="game.php?gid=393488">393488</a></td>
|
152
|
+
<td><A href="sgf.php?gid=393488"><font color="#d50047">sgf</font></A></td>
|
153
|
+
<td><A href="userinfo.php?uid=107"><font color=black>maggie</font></a></td>
|
154
|
+
<td align=center><img src="17/b.gif" alt="b"></td>
|
155
|
+
<td>19</td>
|
156
|
+
<td>4</td>
|
157
|
+
|
158
|
+
<td>0.5</td>
|
159
|
+
<td>213</td>
|
160
|
+
<td>B+60.5</td>
|
161
|
+
<td align=center><img src="images/yes.gif" alt="Yes"></td>
|
162
|
+
<td>Yes</td>
|
163
|
+
<td>2008-04-23 22:48</td>
|
164
|
+
|
165
|
+
</tr>
|
166
|
+
=end
|
167
|
+
dgs = Dgs.new
|
168
|
+
finished_games = dgs.finished_games
|
169
|
+
if finished_games.size > 0
|
170
|
+
puts "you have a total of #{finished_games.size} finished games"
|
171
|
+
puts "finished games:"
|
172
|
+
finished_games.each { |game|
|
173
|
+
puts "#{game[:id]} #{game[:finished_at]}"
|
174
|
+
}
|
175
|
+
else
|
176
|
+
puts "you have no finished games"
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
106
180
|
def plural(n)
|
107
181
|
if n == 1
|
108
182
|
""
|
@@ -112,14 +186,30 @@ def plural(n)
|
|
112
186
|
end
|
113
187
|
|
114
188
|
def new_moves?(dgs)
|
115
|
-
|
189
|
+
begin
|
190
|
+
w = dgs.waiting_games
|
191
|
+
rescue Timeout::Error
|
192
|
+
puts "timeout error. retrying in 30 secs"
|
193
|
+
sleep 30
|
194
|
+
retry
|
195
|
+
end
|
116
196
|
if $opt_with_name
|
117
197
|
print '['
|
118
198
|
w.each {|game|
|
119
199
|
print "#{game} "
|
120
|
-
|
121
|
-
|
122
|
-
|
200
|
+
# ggf. aus Cache holen, anstatt jedesmal neu von DGS ermitteln,
|
201
|
+
# da sich die Namen der Spieler in der Regel nicht waehrend der
|
202
|
+
# Laufzeit dieses Skripts aendern
|
203
|
+
gi=cache_gameinfo(game)
|
204
|
+
if gi
|
205
|
+
print "[c] "
|
206
|
+
end
|
207
|
+
unless gi
|
208
|
+
gi = dgs.gameinfo(game)
|
209
|
+
@cache_gameinfos[game] = gi
|
210
|
+
end
|
211
|
+
print gi[:white][:name]+' ' unless gi[:white][:name].include? "(#{dgs.username})"
|
212
|
+
print gi[:black][:name]+',' unless gi[:black][:name].include? "(#{dgs.username})"
|
123
213
|
puts
|
124
214
|
}
|
125
215
|
puts ']'
|
@@ -128,9 +218,17 @@ def new_moves?(dgs)
|
|
128
218
|
end
|
129
219
|
#if dgs.waiting_games.size > 0 # @page.body.include?(NO_GAMES)
|
130
220
|
if w.size > 0 # @page.body.include?(NO_GAMES)
|
131
|
-
|
221
|
+
if $threshold
|
222
|
+
if w.size < $threshold.to_i
|
223
|
+
return false
|
224
|
+
else
|
225
|
+
return true
|
226
|
+
end
|
227
|
+
else
|
228
|
+
return true
|
229
|
+
end
|
132
230
|
else
|
133
|
-
false
|
231
|
+
return false
|
134
232
|
end
|
135
233
|
end
|
136
234
|
|
@@ -142,6 +240,7 @@ $nur_dringende = false # TODO:
|
|
142
240
|
$min_secs = Choice.choices[:min_wait].to_i*60 #60*15
|
143
241
|
$secs = $min_secs
|
144
242
|
$count = 0
|
243
|
+
$threshold = Choice.choices[:threshold].to_i
|
145
244
|
def osd_output?
|
146
245
|
return @opt_osd
|
147
246
|
end
|
@@ -154,10 +253,14 @@ def puts_x(arg)
|
|
154
253
|
end
|
155
254
|
end
|
156
255
|
|
256
|
+
def cache_gameinfo(game)
|
257
|
+
@cache_gameinfos[game]
|
258
|
+
end
|
259
|
+
|
157
260
|
def schleife
|
158
261
|
dgs = Dgs.new
|
159
|
-
|
160
|
-
|
262
|
+
$min_secs = Choice.choices[:min_wait].to_i*60 #60*15
|
263
|
+
|
161
264
|
$dringend = false
|
162
265
|
changes = false
|
163
266
|
if $nur_dringende
|
@@ -170,31 +273,23 @@ def schleife
|
|
170
273
|
elsif new_moves? dgs
|
171
274
|
changes = true
|
172
275
|
else
|
173
|
-
# puts "keine neuen Zuege"
|
174
276
|
puts "no waiting moves"
|
175
|
-
#
|
176
277
|
end
|
177
278
|
if changes
|
178
279
|
$count = 0
|
179
|
-
# puts "neue Zuege, neue Methode"
|
180
280
|
puts "waiting games"
|
181
281
|
$secs = $secs / 2
|
182
282
|
if $secs < $min_secs
|
183
283
|
$secs = $min_secs
|
184
284
|
end
|
185
|
-
# puts "vermindere Abfrageintervall auf #{$secs} Sekunden(n)"
|
186
285
|
puts "decreasing request interval to #{$secs} seconds"
|
187
|
-
# puts "neue Zuege"
|
188
286
|
puts "waiting games"
|
189
287
|
if $dringend
|
190
288
|
$osd.puts("DRINGENDE Spiele")
|
191
289
|
end
|
192
|
-
# puts("Deine Mitspieler bei Dragon Go Server warten auf deine Spielzuege")
|
193
290
|
puts_x("Your opponents at Dragon Go Server are waiting for your moves")
|
194
|
-
#-- $osd.puts("Deine Mitspieler bei Dragon Go Server warten auf deine Spielzuege")
|
195
|
-
#-- $osd.flush
|
196
291
|
else
|
197
|
-
$count+=1
|
292
|
+
$count += 1
|
198
293
|
if $count >= 3
|
199
294
|
$secs = $secs*2
|
200
295
|
# puts "erhoehe Abfrageintervall auf #{$secs} Sekunden(n)"
|
@@ -203,13 +298,20 @@ def schleife
|
|
203
298
|
end
|
204
299
|
end
|
205
300
|
end
|
301
|
+
|
206
302
|
if opt_waitingloop
|
207
303
|
while 1
|
208
304
|
# $osd = IO.popen("osd_cat -p middle -f -adobe-helvetica-*-*-*-*-24-*-*-*- *-*-*-* -s 3 -S lightgray --delay=60","w+")
|
209
305
|
if osd_output?
|
210
306
|
$osd = IO.popen("osd_cat -p middle -f -sony-fixed-medium-*-normal-*-24-*-*-*-*-*-*-* -s 3 -S lightgray --delay=60","w+")
|
211
307
|
end
|
212
|
-
|
308
|
+
begin
|
309
|
+
schleife
|
310
|
+
rescue SocketError
|
311
|
+
puts "SocketError - waiting 60 secs and retrying"
|
312
|
+
sleep 60
|
313
|
+
retry
|
314
|
+
end
|
213
315
|
if osd_output?
|
214
316
|
$osd.close_write
|
215
317
|
$osd.close
|
data/lib/dragongoserver.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
|
-
|
1
|
+
$:.unshift(File.dirname(__FILE__)) unless
|
2
|
+
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
2
3
|
|
3
4
|
module Dragongoserver
|
4
5
|
end
|
5
6
|
|
6
7
|
require 'dragongoserver/version'
|
7
8
|
require 'dragongoserver/dragongoserver'
|
9
|
+
require 'dragongoserver/game'
|
@@ -12,8 +12,9 @@ class Dgs
|
|
12
12
|
USER_AGENT_ALIAS = 'Mac Safari' # should work with every browser type
|
13
13
|
|
14
14
|
SAVE_WAIT = 15 # wait n seconds before each request
|
15
|
-
# if we are doing
|
16
|
-
# temporarily blocked (for about 1 day)
|
15
|
+
# if we are doing too many requests at DGS the account (YOUR ACCOUNT)
|
16
|
+
# will be temporarily blocked (for about 1 day)
|
17
|
+
|
17
18
|
attr_reader :username
|
18
19
|
|
19
20
|
def initialize(username=nil,password=nil)
|
@@ -49,7 +50,7 @@ class Dgs
|
|
49
50
|
end
|
50
51
|
game_id=0
|
51
52
|
user_id=0
|
52
|
-
page.body.
|
53
|
+
page.body.each_line {|line|
|
53
54
|
if line =~ /gid=([0-9]+)"/
|
54
55
|
game_id = $1.to_i
|
55
56
|
# ??? games << {:game => game_id, :user => userid}
|
@@ -83,16 +84,174 @@ class Dgs
|
|
83
84
|
raise "PageError: #{DGS_STATUS_PAGE} not found"
|
84
85
|
end
|
85
86
|
|
86
|
-
page = agent.click page.links.text('Show running games')
|
87
|
-
page.
|
87
|
+
# page = agent.click page.links.text('Show running games')
|
88
|
+
page = agent.click page.link_with(:text => 'Show running games')
|
89
|
+
|
90
|
+
# *_with(:text => "Show running games")
|
91
|
+
page.body.each_line {|line|
|
88
92
|
if line =~ /gid=([0-9]+)"/
|
89
93
|
games << $1.to_i
|
90
94
|
end
|
91
95
|
}
|
96
|
+
|
97
|
+
# BEGIN naechste Seite(n)
|
98
|
+
#p page.links
|
99
|
+
# page = agent.click page.link_with(:text => '=>')
|
100
|
+
while true
|
101
|
+
begin
|
102
|
+
page = agent.click page.link_with(:text => '=>')
|
103
|
+
rescue
|
104
|
+
break # keine weitere Seite vorhanden
|
105
|
+
end
|
106
|
+
|
107
|
+
page.body.each {|line|
|
108
|
+
if line =~ /gid=([0-9]+)"/
|
109
|
+
games << $1.to_i
|
110
|
+
end
|
111
|
+
}
|
112
|
+
end
|
113
|
+
# END naechste Seite(n)
|
92
114
|
# aus Bequemlichkeitsgruenden (gid= kommt mehrfach vor): uniq
|
93
115
|
games.uniq
|
94
116
|
end
|
117
|
+
|
118
|
+
# Array of your finished games
|
119
|
+
# http://www.dragongoserver.net/show_games.php?uid=10737
|
120
|
+
def finished_games
|
121
|
+
save_wait
|
122
|
+
games = []
|
123
|
+
#@home = 'http://www.dragongoserver.net/show_games.php?uid=10737' #TODO:
|
124
|
+
@home = DGS_STATUS_PAGE
|
125
|
+
agent = WWW::Mechanize.new
|
126
|
+
agent.user_agent_alias = USER_AGENT_ALIAS
|
127
|
+
|
128
|
+
page = agent.get(@home)
|
129
|
+
if page.body.include?(LOGGED_IN)
|
130
|
+
page = login(agent)
|
131
|
+
end
|
132
|
+
|
133
|
+
#if !page.body.include?(YOUR_TURN)
|
134
|
+
# raise "PageError: #{DGS_STATUS_PAGE} not found"
|
135
|
+
#end
|
136
|
+
|
137
|
+
# page = agent.click page.links.text('Show finished games')
|
138
|
+
page = agent.click page.link_with(:text => 'Show finished games')
|
139
|
+
page.body.each_line {|line|
|
140
|
+
if line =~ /gid=([0-9]+)"/
|
141
|
+
games << {:id => $1.to_i, :finished_at => DateTime.now}
|
142
|
+
end
|
143
|
+
}
|
144
|
+
page_no = 1
|
145
|
+
|
146
|
+
# p page.links.find { |l| l.title =~ /next page/ }
|
147
|
+
#p page.links
|
95
148
|
|
149
|
+
# naechste Seite
|
150
|
+
# while page.link_with(:text => '+')
|
151
|
+
while page.link_with(:title => 'next page [&>]')
|
152
|
+
page_no += 1
|
153
|
+
puts "at page_no = #{page_no}"
|
154
|
+
# page = agent.click page.link_with(:text => '+')
|
155
|
+
page = agent.click page.link_with(:title => 'next page [&>]')
|
156
|
+
# nochmal alle Spiele auf Folgeseite durchgehen
|
157
|
+
page.body.each {|line|
|
158
|
+
if line =~ /gid=([0-9]+)"/
|
159
|
+
games << {:id => $1.to_i, :finished_at => DateTime.now}
|
160
|
+
end
|
161
|
+
}
|
162
|
+
end
|
163
|
+
|
164
|
+
# aus Bequemlichkeitsgruenden (gid= kommt mehrfach vor): uniq
|
165
|
+
games.uniq
|
166
|
+
end
|
167
|
+
|
168
|
+
# same as finished_games but only the ids of the games
|
169
|
+
def finished_games_ids
|
170
|
+
result = []
|
171
|
+
finished_games.each { |e|
|
172
|
+
result << e[:id]
|
173
|
+
}
|
174
|
+
result
|
175
|
+
end
|
176
|
+
|
177
|
+
# http://www.dragongoserver.net/show_games.php?uid=31098&finished=1
|
178
|
+
# the first page of finished games for this user
|
179
|
+
def finished_games_for_user(user_id)
|
180
|
+
save_wait
|
181
|
+
games = []
|
182
|
+
@home = "http://www.dragongoserver.net/show_games.php?uid=#{user_id}&finished=1" #TODO:
|
183
|
+
#p @home
|
184
|
+
#@home = DGS_STATUS_PAGE
|
185
|
+
agent = WWW::Mechanize.new
|
186
|
+
agent.user_agent_alias = USER_AGENT_ALIAS
|
187
|
+
|
188
|
+
page = agent.get(@home)
|
189
|
+
if page.body.include?(LOGGED_IN)
|
190
|
+
page = login(agent)
|
191
|
+
page = agent.click page.link_with(:text => 'Users')
|
192
|
+
if !page.body.include?("Active users")
|
193
|
+
raise "Active users not diplaying"
|
194
|
+
end
|
195
|
+
form = page.forms.first
|
196
|
+
form.sf1 = user_id.to_s
|
197
|
+
|
198
|
+
page = agent.submit(form)
|
199
|
+
# page = agent.click page.links.text("#{user_id}")
|
200
|
+
page = agent.click page.link_with(:text => "#{user_id}")
|
201
|
+
# page = agent.click page.links.text("Show finished games")
|
202
|
+
page = agent.click page.link_with(:text => "Show finished games")
|
203
|
+
end
|
204
|
+
if !page.body.include?("Finished games for")
|
205
|
+
#p page.body
|
206
|
+
raise "Finished games for not on page"
|
207
|
+
end
|
208
|
+
#page = agent.click page.links.text('Show finished games')
|
209
|
+
one_game = {}
|
210
|
+
page.body.each {|line|
|
211
|
+
# p line
|
212
|
+
#p one_game
|
213
|
+
if line =~ /gid=([0-9]+)"/
|
214
|
+
one_game[:id] = $1.to_i
|
215
|
+
end
|
216
|
+
# <td align=center><img src="17/w.gif" alt="w"></td>
|
217
|
+
if line =~ /[wb].gif/ and
|
218
|
+
one_game[:id]
|
219
|
+
#p $1
|
220
|
+
color = line.split('.gif')[0][-1,1]
|
221
|
+
#p line.split('.gif')[0] #[-1,1]
|
222
|
+
#p color
|
223
|
+
if color == 'w'
|
224
|
+
one_game[:player_color] = :white
|
225
|
+
else
|
226
|
+
one_game[:player_color] = :black
|
227
|
+
end
|
228
|
+
end
|
229
|
+
# W+Time
|
230
|
+
if line =~ /[WB]\+/ and
|
231
|
+
one_game[:id]
|
232
|
+
color,reason = line.split('+')
|
233
|
+
if color[-1,1] == 'W'
|
234
|
+
one_game[:winner] = :white
|
235
|
+
else
|
236
|
+
one_game[:winner] = :black
|
237
|
+
end
|
238
|
+
|
239
|
+
one_game[:reason] = reason[0,reason.index('<')]
|
240
|
+
end
|
241
|
+
#<td>2008-04-19 10:29</td>
|
242
|
+
if line =~ /(\d+)-(\d+)-(\d+)/ and
|
243
|
+
one_game[:id]
|
244
|
+
d = Date.new($1.to_i,$2.to_i,$3.to_i)
|
245
|
+
one_game[:finished_at] = d
|
246
|
+
games << one_game
|
247
|
+
one_game = {}
|
248
|
+
end
|
249
|
+
}
|
250
|
+
# aus Bequemlichkeitsgruenden (gid= kommt mehrfach vor): uniq
|
251
|
+
#p games
|
252
|
+
games # .uniq
|
253
|
+
end
|
254
|
+
|
96
255
|
# your rank as a GoRank object
|
97
256
|
def get_rank
|
98
257
|
save_wait
|
@@ -109,12 +268,15 @@ class Dgs
|
|
109
268
|
raise "PageError: #{DGS_STATUS_PAGE} not found"
|
110
269
|
end
|
111
270
|
a = show_regexp(page.body, /(\d+) (kyu|dan)/)
|
112
|
-
num = a[0]
|
271
|
+
num = a[0].to_i
|
113
272
|
what = a[1].to_sym
|
114
273
|
myRank = GoRank.new num, what
|
115
274
|
myRank
|
116
275
|
end
|
117
276
|
|
277
|
+
# rank is an alias to get_rank
|
278
|
+
alias :rank :get_rank
|
279
|
+
|
118
280
|
# your id at DGS
|
119
281
|
def userid
|
120
282
|
save_wait
|
@@ -163,7 +325,7 @@ class Dgs
|
|
163
325
|
@userinfo[:country] = nil
|
164
326
|
|
165
327
|
result = Hash.new
|
166
|
-
page.body.
|
328
|
+
page.body.each_line {|line|
|
167
329
|
#<td class="Rubric">Name</td><td>Thomas Preymesser</td>
|
168
330
|
if line =~ /td class="Rubric"/
|
169
331
|
#p line
|
@@ -183,12 +345,19 @@ class Dgs
|
|
183
345
|
elsif a[0]=="Rating"
|
184
346
|
#
|
185
347
|
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
348
|
+
if a[1] =~ /(\d+) (kyu|dan)/
|
349
|
+
b = show_regexp(a[1], /(\d+) (kyu|dan)/)
|
350
|
+
num = b[0].to_i
|
351
|
+
what = b[1].to_sym
|
352
|
+
begin
|
353
|
+
result[:rating] = GoRank.new num, what
|
354
|
+
rescue
|
355
|
+
raise "illegal rank: #{a[1]}\n#{num}/#{what}"
|
356
|
+
end
|
357
|
+
else
|
358
|
+
result[:rating] = nil
|
359
|
+
end
|
360
|
+
##
|
192
361
|
#result[:rating] = a[1]
|
193
362
|
elsif a[0]=="Last access"
|
194
363
|
result[:lastaccess] = DateTime.parse(a[1].gsub(/ /,' '))
|
@@ -263,20 +432,22 @@ Time remaining: 9 days and 6 hours</td>
|
|
263
432
|
#elements = doc.search("//table[@class='GameInfos']").search('tr[@id='BlackInfo')
|
264
433
|
elements = doc.search("//table[@class='GameInfos']")
|
265
434
|
blackinfo = (elements/"tr[@id='blackInfo']")
|
266
|
-
#pp blackinfo
|
267
435
|
whiteinfo = (elements/"tr[@id='whiteInfo']")
|
268
|
-
whiteinfo_name = (whiteinfo/"td[@class='Name']/a").inner_html
|
269
|
-
blackinfo_name = (blackinfo/"td[@class='Name']/a").inner_html
|
270
|
-
#pp whiteinfo
|
271
|
-
#pp whiteinfo_name
|
272
|
-
#pp blackinfo_name
|
273
|
-
##p whiteinfo_name.inner_html
|
436
|
+
whiteinfo_name = (whiteinfo/"td[@class='Name']/a").inner_text #2008-12-28 inner_html
|
437
|
+
blackinfo_name = (blackinfo/"td[@class='Name']/a").inner_text #2008-12-28 inner_html
|
274
438
|
result[:black][:name] = blackinfo_name
|
275
439
|
result[:white][:name] = whiteinfo_name
|
276
|
-
|
440
|
+
|
277
441
|
result
|
278
442
|
end
|
279
443
|
|
444
|
+
# all games of the own user
|
445
|
+
# finished games + running games
|
446
|
+
# TODO: should return an array of game instances
|
447
|
+
def games
|
448
|
+
[4,5,6]
|
449
|
+
end
|
450
|
+
|
280
451
|
private
|
281
452
|
|
282
453
|
def show_regexp(a, re)
|
@@ -290,7 +461,8 @@ Time remaining: 9 days and 6 hours</td>
|
|
290
461
|
def login(agent)
|
291
462
|
@home = DGS_INDEX_PAGE
|
292
463
|
page = agent.get(@home)
|
293
|
-
form = page.forms.with.name("loginform").first
|
464
|
+
#form = page.forms.with.name("loginform").first
|
465
|
+
form = page.form("loginform")
|
294
466
|
form.fields.find {|f| f.name == 'userid'}.value = @username
|
295
467
|
form.fields.find {|f| f.name == 'passwd'}.value = @password
|
296
468
|
page = agent.submit(form, form.buttons.first)
|
@@ -301,4 +473,4 @@ Time remaining: 9 days and 6 hours</td>
|
|
301
473
|
sleep(SAVE_WAIT)
|
302
474
|
end
|
303
475
|
|
304
|
-
end
|
476
|
+
end
|