clickclient_scrap 0.1.8 → 0.1.9

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/ChangeLog CHANGED
@@ -1,3 +1,7 @@
1
1
 
2
+ 2009-12-27 0.1.9
3
+ * レート一覧ページの仕様変更に対応。
4
+ * スワップが1000を超えた場合に、レート一覧に該当する通貨ペアが含まれない問題を修正。
5
+
2
6
  2009-12-16 0.1.8
3
- * サイトの仕様変更により、成り行き注文ができなくなってた問題を修正。
7
+ * サイトの仕様変更により、成り行き注文ができなくなっていた問題を修正。
@@ -38,14 +38,15 @@ module ClickClientScrap
38
38
  class Client
39
39
  # ホスト名
40
40
  DEFAULT_HOST_NAME = "https://sec-sso.click-sec.com/mf/"
41
-
41
+ DEFAULT_DEMO_HOST_NAME = "https://www.click-sec.com/m/demo/"
42
+
42
43
  #
43
44
  #===コンストラクタ
44
45
  #
45
46
  #*proxy*:: プロキシホストを利用する場合、そのホスト名とパスを指定します。
46
47
  # 例) https://proxyhost.com:80
47
48
  #
48
- def initialize( proxy=nil )
49
+ def initialize( proxy=ENV["http_proxy"], demo=false )
49
50
  @client = WWW::Mechanize.new {|c|
50
51
  # プロキシ
51
52
  if proxy
@@ -56,7 +57,8 @@ module ClickClientScrap
56
57
  @client.keep_alive = false
57
58
  @client.max_history=0
58
59
  @client.user_agent_alias = 'Windows IE 7'
59
- @host_name = DEFAULT_HOST_NAME
60
+ @demo = demo
61
+ @host_name = @demo ? DEFAULT_DEMO_HOST_NAME : DEFAULT_HOST_NAME
60
62
  end
61
63
 
62
64
  #ログインし、セッションを開始します。
@@ -74,21 +76,24 @@ module ClickClientScrap
74
76
  form.j_username = userid
75
77
  form.j_password = password
76
78
  result = @client.submit(form, form.buttons.first)
77
- if result.body.toutf8 =~ /<META HTTP-EQUIV="REFRESH" CONTENT="0;URL=([^"]*)">/
78
- result = @client.get($1)
79
- ClickClientScrap::Client.error( result ) if result.links.size <= 0
80
- session = FX::FxSession.new( @client, result.links, options )
81
- if block_given?
82
- begin
83
- yield session
84
- ensure
85
- session.logout
86
- end
87
- else
88
- return session
89
- end
79
+ # デモサイトではjsによるリダイレクトは不要。
80
+ if !@demo
81
+ if result.body.toutf8 =~ /<META HTTP-EQUIV="REFRESH" CONTENT="0;URL=([^"]*)">/
82
+ result = @client.get($1)
83
+ ClickClientScrap::Client.error( result ) if result.links.size <= 0
84
+ else
85
+ ClickClientScrap::Client.error( result )
86
+ end
87
+ end
88
+ session = FX::FxSession.new( @client, result.links, options )
89
+ if block_given?
90
+ begin
91
+ yield session
92
+ ensure
93
+ session.logout
94
+ end
90
95
  else
91
- ClickClientScrap::Client.error( result )
96
+ return session
92
97
  end
93
98
  end
94
99
  def self.error( page )
@@ -200,13 +205,13 @@ module ClickClientScrap
200
205
  @swaps = list_swaps
201
206
  @last_update_time_of_swaps = Time.now.to_i
202
207
  end
203
- reg = />([A-Z]+\/[A-Z]+)<\/a>[^\-\.\d]*?([\d]+\.[\d]+\-[\d]+)/
208
+ reg = />([A-Z]+\/[A-Z]+)<\/a>[^\-\.\d]*?([\d]+\.[\d]+)\-[^\-\.\d]*([\d\.]+)/
204
209
  tokens = result.body.toutf8.scan( reg )
205
210
  ClickClientScrap::Client.error( result ) if !tokens || tokens.empty?
206
211
  return tokens.inject({}) {|r,l|
207
212
  pair = to_pair( l[0] )
208
213
  swap = @swaps[pair]
209
- rate = FxSession.convert_rate l[1]
214
+ rate = FxSession.convert_rate "#{l[1]}-#{l[2]}"
210
215
  if ( rate && swap )
211
216
  r[pair] = Rate.new( pair, rate[0], rate[1], swap.sell_swap, swap.buy_swap )
212
217
  end
@@ -215,7 +220,7 @@ module ClickClientScrap
215
220
  end
216
221
  #12.34-35 形式の文字列をbidレート、askレートに変換する。
217
222
  def self.convert_rate( str ) #:nodoc:
218
- if str =~ /([\d]+)\.([\d]+)\-([\d]+)/
223
+ if str =~ /^([\d]+)\.([\d]+)\-([\d]+)$/
219
224
  high = $1
220
225
  low = $2
221
226
  low2 = $3
@@ -226,6 +231,8 @@ module ClickClientScrap
226
231
  end
227
232
  ask = high.to_f+(ask_low/10**low.length)
228
233
  return [bid,ask]
234
+ elsif str =~ /^([\d]+\.[\d]+)\-([\d]+\.[\d]+)$/
235
+ return [$1.to_f,$2.to_f]
229
236
  end
230
237
  end
231
238
 
@@ -234,10 +241,10 @@ module ClickClientScrap
234
241
  #戻り値:: 通貨ペアをキーとするClickClientScrap::FX::Swapのハッシュ。
235
242
  def list_swaps
236
243
  result = link_click( "8" )
237
- reg = /<dd>([A-Z]+\/[A-Z]+) <font[^>]*>売<\/font>[^\-\d]*?([\-\d]+)[^\-\d]*<font[^>]*>買<\/font>[^\-\d]*([\-\d]+)[^\-\d]*<\/dd>/
244
+ reg = /<dd>([A-Z]+\/[A-Z]+) <font[^>]*>売<\/font>[^\-\d]*?([\-\d,]+)[^\-\d]*<font[^>]*>買<\/font>[^\-\d]*([\-\d,]+)[^\-\d]*<\/dd>/
238
245
  return result.body.toutf8.scan( reg ).inject({}) {|r,l|
239
246
  pair = to_pair( l[0] )
240
- r[pair] = Swap.new( pair, l[1].to_i, l[2].to_i ); r
247
+ r[pair] = Swap.new( pair, l[1].sub(/,/,"").to_i, l[2].sub(/,/,"").to_i ); r
241
248
  }
242
249
  end
243
250
 
@@ -669,5 +676,15 @@ module ClickClientScrap
669
676
  end
670
677
  end
671
678
 
679
+ class << WWW::Mechanize::Util
680
+ def from_native_charset(s, code)
681
+ if WWW::Mechanize.html_parser == Nokogiri::HTML
682
+ return unless s
683
+ Iconv.iconv(code, "UTF-8", s).join("") rescue s # エラーになった場合、変換前の文字列を返す
684
+ else
685
+ return s
686
+ end
687
+ end
688
+ end
672
689
 
673
690
 
@@ -15,8 +15,8 @@ class JIJIPluginTest < RUNIT::TestCase
15
15
 
16
16
  def setup
17
17
  @logger = Logger.new STDOUT
18
- @user = IO.read( "../sample/user" )
19
- @pass = IO.read( "../sample/pass" )
18
+ @user = IO.read( "../etc/user" )
19
+ @pass = IO.read( "../etc/pass" )
20
20
  end
21
21
 
22
22
  def test_basic
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clickclient_scrap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.1.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Masaya Yamauchi
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-12-16 00:00:00 +09:00
12
+ date: 2009-12-27 00:00:00 +09:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency