bank_scrap 0.0.10 → 0.0.11

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ce7f4d32e3f3900721ec3a2ab289f9cb15ce8968
4
- data.tar.gz: 8ecc35df726bc45669b3fde9ebf9f023506e24e9
3
+ metadata.gz: 011bc3352dbc67fd3346b8214de8761910772cb7
4
+ data.tar.gz: 839d98e70e9755a1d8032e789f587655f7a52d55
5
5
  SHA512:
6
- metadata.gz: 5ce34cc53d2c9f7274e66aac5bfe39d5cc672c87ce989967c2d08cf5158c51f77b485a1531fe5f30db200207336568986b025da6125143e17a2799676b1e593c
7
- data.tar.gz: e577618b857f9211a8bd34ab8048324fb68cc4276a80e4f5ff92458262ccbe9ced2d99f68f85891f9720d0b0d235ed70e5a6ac637decb11c570b5e92abadcd2d
6
+ metadata.gz: 3ed3e531ad452268c55e95cfb3c8dd0eaa7bc4b9c46ad884f4f2a16a1e0bca5edeafb1d02337864dd85b2d240cfe893b9252f7bc0a92177b61eeedcb845a3dfe
7
+ data.tar.gz: 844bc92e681e981f6cede4963c1b64a0ffab36e3702fddf06fadd63c0c3e758fe61c85c4a671ee62afe4b140e1fdc756cebad0b1456820d057cc7ff6cb4e3973
data/README.md CHANGED
@@ -10,8 +10,8 @@ Feel free to contribute and add your bank if it isn't supported.
10
10
 
11
11
  | | BBVA | ING Direct | Bankinter |
12
12
  |-----------------|:------:|:----------:|:---------:|
13
- | Account Balance | ✓ | ✓ | WIP |
14
- | Transactions | ✓ | ✓ | WIP |
13
+ | Account Balance | ✓ | | ✓ |
14
+ | Transactions | ✓ | | ✓ |
15
15
 
16
16
  Interested in any other bank? Open a new Issue and we'll try to help.
17
17
 
@@ -54,12 +54,12 @@ Or, if you're using Bundler, just add the following to your Gemfile:
54
54
  ### From terminal
55
55
  #### Bank account balance
56
56
 
57
- ###### BBVA
57
+ ###### BBVA | Bankinter
58
58
 
59
- $ bank_scrap balance bbva --user YOUR_BBVA_USER --password YOUR_BBVA_PASSWORD
59
+ $ bank_scrap balance your_bank --user YOUR_BANK_USER --password YOUR_BANK_PASSWORD
60
60
 
61
61
  ###### ING Direct
62
- ING needs one more argument: your bithday.
62
+ ING needs one more argument: your birthday.
63
63
 
64
64
  $ bank_scrap balance ing --user YOUR_DNI --password YOUR_PASSWORD --extra=birthday:01/01/1980
65
65
 
@@ -96,6 +96,8 @@ require 'bank_scrap'
96
96
  bbva = BankScrap::Bbva.new(YOUR_BBVA_USER, YOUR_BBVA_PASSWORD)
97
97
  # ING
98
98
  ing = BankScrap::Ing.new(YOUR_DNI, YOUR_ING_PASSWORD, extra_args: {"birthday" => "dd/mm/yyyy"})
99
+ # BANKINTER
100
+ bankinter = BankScrap::Bankinter.new(YOUR_BANKINTER_USER, YOUR_BANKINTER_PASSWORD)
99
101
  ```
100
102
 
101
103
 
@@ -57,9 +57,6 @@ module BankScrap
57
57
 
58
58
 
59
59
  def initialize_cookie(url)
60
- log 'Initialize cookie'
61
-
62
- @http.url = url
63
60
  @http.get(url).body
64
61
  end
65
62
 
@@ -3,9 +3,9 @@ require 'execjs'
3
3
 
4
4
  module BankScrap
5
5
  class Bankinter < Bank
6
-
7
- BASE_ENDPOINT = "https://movil.bankinter.es"
8
- LOGIN_ENDPOINT = "/mov/es-es/cgi/ebkmovil+md+login"
6
+ BASE_ENDPOINT = "https://www.bankinter.com"
7
+ LOGIN_ENDPOINT = "/www/es-es/cgi/ebk+login"
8
+ TRANSACTIONS_ENDPOINT = "/www/es-es/cgi/ebk+opr+buscadormov"
9
9
 
10
10
  def initialize(user, password, log: false, debug: false, extra_args: nil)
11
11
  @user = user
@@ -14,50 +14,90 @@ module BankScrap
14
14
  @debug = debug
15
15
 
16
16
  initialize_connection
17
- parse_html(initialize_cookie(BASE_ENDPOINT + '/'))
17
+ initialize_cookie(BASE_ENDPOINT)
18
+ parse_html(get(BASE_ENDPOINT + '/www/es-es/cgi/ebk+gc+lgin'))
18
19
  login
20
+ super
19
21
  end
20
22
 
21
- def get_balance
23
+ def fetch_accounts
24
+ log 'fetch_accounts'
25
+ accounts = []
22
26
  if @dashboard_doc
23
- if links = @dashboard_doc.css('div.textoresaltado_md a')
24
- links[0].text
27
+ if links = @dashboard_doc.css('div.caj_content_plegable.bk_ocultable_novisible div.tab_extracto_01')[0]
28
+ links.css('table tbody tr').each do |x|
29
+ name = x.css('td.enlace div form button').text.encode("UTF-8")
30
+ balance_currency = x.css('td.numero').text.scan(/[\d,\.]+|\D+/)
31
+ balance = balance_currency[0]
32
+ currency = balance_currency[1].gsub(/[[:space:]]/,"")
33
+ cc = x.css('td.enlace div form input')[0]['value']
34
+ data = {'id' => cc, 'description' => name, 'availableBalance' => balance, 'currency' => currency, 'iban' => cc}
35
+
36
+ accounts.push(build_account(data))
37
+ end
25
38
  end
26
39
  end
40
+
41
+ accounts
27
42
  end
28
43
 
29
- def get_transactions
30
- response = get(BASE_ENDPOINT + "/mov/es-es/cgi/" + @transactions_endpoint)
44
+ def fetch_transactions_for(account, start_date: Date.today - 1.month, end_date: Date.today)
45
+ transactions = []
46
+
47
+ fields = {
48
+ 'ext-solapa' => 'operar',
49
+ 'ext-subsolapa' => 'mis_cuentas',
50
+ 'ordenDesc' => '',
51
+ 'ordenFechaC' => 'A',
52
+ 'ordenFechaV' => '',
53
+ 'ordenGasto' => '',
54
+ 'ordenIng' => '',
55
+ 'buscador' => 'S',
56
+ 'tipoConsulta' => 'N',
57
+ 'seleccionado_tipo' => '',
58
+ 'cuenta_seleccionada' => account.iban,
59
+ 'tipoMov' => 'A',
60
+ 'dia' => start_date.strftime("%d"),
61
+ 'mes' => start_date.strftime("%m"),
62
+ 'anio' => start_date.strftime("%Y"),
63
+ 'diaH' => end_date.strftime("%d"),
64
+ 'mesH' => end_date.strftime("%m"),
65
+ 'anioH' => end_date.strftime("%Y"),
66
+ }
67
+
68
+ response = post(BASE_ENDPOINT + TRANSACTIONS_ENDPOINT, fields)
31
69
 
32
70
  html_doc = Nokogiri::HTML(response)
33
71
 
34
- html_transactions = html_doc.css('ul#listamovimiento li')
72
+ html_transactions = html_doc.css('table#tablaDin_tabla tbody tr')
35
73
 
36
- # puts html_transactions[0]
37
- html_transactions.each do |x|
38
- puts x.css('div.fechaimagen span').text
39
- puts x.css('div.altoMaximo').text
40
- puts x.css('div.importesproductosflecha_md').text
74
+ html_transactions.each do |x|
75
+ date = x.css('td.fecha')[0].text
76
+ description = x.css('td')[2].text
77
+ amount = x.css('td.numero').text.gsub(/\s+|\.|,/, "")
78
+
79
+ data = {'description' => description, 'amount' => amount, 'operationDate' => date, 'currency' => account.currency}
80
+ transactions.push(build_transaction(data, account));
41
81
  end
42
82
 
83
+ transactions
43
84
  end
44
85
 
45
86
  private
46
87
 
47
88
  def login
48
- fields = [
49
- Curl::PostField.content('bkcache',''),
50
- Curl::PostField.content('destino', ''),
51
- Curl::PostField.content(@id_field, 'username,password,psi'),
52
- Curl::PostField.content(@login_field,@login_param)
53
- ]
89
+ fields = {
90
+ 'bkcache' => '',
91
+ 'destino' => 'ebk+opr+extractointegral',
92
+ @id_field => 'username,password,psi',
93
+ @login_field => @login_param
94
+ }
54
95
 
55
96
  response = post(BASE_ENDPOINT + LOGIN_ENDPOINT, fields)
56
97
 
57
- @dashboard_doc = Nokogiri::HTML(response)
58
-
59
- @transactions_endpoint = @dashboard_doc.xpath('//div[@class="floatIzquierdo_md"]/form/@action')[0];
98
+ response = get(BASE_ENDPOINT + '/www/es-es/cgi/ebk+opr+extractointegral')
60
99
 
100
+ @dashboard_doc = Nokogiri::HTML(response, nil, "ISO-8859-1")
61
101
  end
62
102
 
63
103
  def parse_html(html)
@@ -67,7 +107,6 @@ module BankScrap
67
107
 
68
108
  html_form = html_doc.css('form#fLogSecurity')
69
109
  #TODO: Check if form is present if not retry initialize cookie for 5 attemps
70
-
71
110
  @id_field = html_form.xpath('input[3]/@id')
72
111
 
73
112
  js_source = 'var document = {};' + html_form.text
@@ -83,5 +122,31 @@ module BankScrap
83
122
 
84
123
  @login_param = js_context.call(js_function, @user, @password, psi_actions)
85
124
  end
125
+
126
+ def build_account(data)
127
+ Account.new(
128
+ bank: self,
129
+ id: data['id'],
130
+ balance: data['availableBalance'],
131
+ currency: data['currency'],
132
+ description: data['description'],
133
+ iban: data['iban']
134
+ )
135
+ end
136
+
137
+ def build_transaction(data, account)
138
+ amount = Money.new(data['amount'], data['currency'])
139
+ balance = data['accountBalanceAfterMovement'] ? Money.new(data['accountBalanceAfterMovement'] * 100, data['currency']) : nil
140
+
141
+ Transaction.new(
142
+ account: account,
143
+ id: data['id'],
144
+ amount: amount,
145
+ description: data['conceptDescription'] || data['description'],
146
+ effective_date: Date.strptime(data['operationDate'], "%d-%m-%Y"),
147
+ currency: data['currency'],
148
+ balance: balance
149
+ )
150
+ end
86
151
  end
87
152
  end
@@ -1,3 +1,3 @@
1
1
  module BankScrap
2
- VERSION = "0.0.10"
2
+ VERSION = "0.0.11"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bank_scrap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10
4
+ version: 0.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ismael Sánchez
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2015-02-05 00:00:00.000000000 Z
14
+ date: 2015-02-08 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: bundler