autility 0.0.3 → 0.0.4
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/Readme.md +1 -0
- data/bin/autility +22 -0
- data/lib/autility.rb +1 -0
- data/lib/autility/lacaixa.rb +166 -0
- data/lib/autility/version.rb +1 -1
- metadata +14 -13
data/Readme.md
CHANGED
data/bin/autility
CHANGED
@@ -67,3 +67,25 @@ command :movistar do |c|
|
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
70
|
+
command :lacaixa do |c|
|
71
|
+
c.syntax = 'autility lacaixa [options]'
|
72
|
+
c.summary = 'Downloads invoices from lacaixa.'
|
73
|
+
c.description = 'Downloads invoices from lacaixa.'
|
74
|
+
c.example 'Download the invoice for the current month of user "foo" with password "bar"', 'utilities lacaixa --user foo --password bar'
|
75
|
+
c.option '--user USER', String, 'The username for lacaixa Online'
|
76
|
+
c.option '--password PASSWORD', String, 'The password for lacaixa Online'
|
77
|
+
c.option '--month MONTH_NUMBER', Integer, 'The month (e.g. 5, 9, 12...). By default it\'s the current month'
|
78
|
+
c.option '--output-folder FOLDER_NAME', String, 'The output folder to store the PDF in. Defaults to ~/utilities'
|
79
|
+
c.action do |args, options|
|
80
|
+
options.default :month => Time.now.month
|
81
|
+
options.default :output_folder => File.expand_path("~/utilities")
|
82
|
+
|
83
|
+
raise "Both --user and --password are required options." unless options.user && options.password
|
84
|
+
|
85
|
+
result = Autility::LaCaixa.scrape(options.user, options.password, options.month, options.output_folder)
|
86
|
+
result.each do |document_path|
|
87
|
+
puts "Path: #{document_path}"
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
data/lib/autility.rb
CHANGED
@@ -0,0 +1,166 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'capybara'
|
3
|
+
require 'capybara/dsl'
|
4
|
+
require 'show_me_the_cookies'
|
5
|
+
require 'fileutils'
|
6
|
+
require 'pry'
|
7
|
+
|
8
|
+
Capybara.register_driver :selenium do |app|
|
9
|
+
Capybara::Selenium::Driver.new(app, :browser => :firefox)
|
10
|
+
end
|
11
|
+
Capybara.default_wait_time = 20
|
12
|
+
Capybara.ignore_hidden_elements = false
|
13
|
+
|
14
|
+
module Autility
|
15
|
+
# Public: A scraper for all the utility invoices in LaCaixa.
|
16
|
+
#
|
17
|
+
# Examples
|
18
|
+
#
|
19
|
+
# # Download the invoice from September this year and store it in /tmp.
|
20
|
+
# LaCaixa.scrape("user", "password", 9, "/tmp") # Download all invoices from September this year
|
21
|
+
#
|
22
|
+
class LaCaixa
|
23
|
+
include Capybara::DSL
|
24
|
+
include ShowMeTheCookies
|
25
|
+
|
26
|
+
# Public: Instantiates a new scraper and fires it to download the utility
|
27
|
+
# invoices from LaCaixa.
|
28
|
+
#
|
29
|
+
# Returns nothing.
|
30
|
+
def self.scrape(*args)
|
31
|
+
new(*args).scrape
|
32
|
+
end
|
33
|
+
|
34
|
+
def initialize(user, password, month, folder)
|
35
|
+
@user = user
|
36
|
+
@password = password
|
37
|
+
@month = month
|
38
|
+
@folder = folder
|
39
|
+
@year = Time.now.year
|
40
|
+
end
|
41
|
+
|
42
|
+
# Public: Scrapes the lacaixa website and gets the invoice for the current
|
43
|
+
# month, saving it to @folder.
|
44
|
+
#
|
45
|
+
# Returns the String path of the saved document.
|
46
|
+
def scrape(index=nil)
|
47
|
+
setup_capybara
|
48
|
+
log_in
|
49
|
+
|
50
|
+
FileUtils.mkdir_p(@folder)
|
51
|
+
if index
|
52
|
+
filename = "#{@folder}/lacaixa_#{month}_#{@year}__#{index}.pdf"
|
53
|
+
document(index).save(filename)
|
54
|
+
else
|
55
|
+
return document
|
56
|
+
end
|
57
|
+
filename
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
# Internal: Logs in to the LaCaixa website.
|
63
|
+
#
|
64
|
+
# Returns nothing.
|
65
|
+
def log_in
|
66
|
+
visit "/home/empreses_ca.html"
|
67
|
+
fill_in "u", :with => @user
|
68
|
+
fill_in "p", :with => @password
|
69
|
+
first(".loginbut").click
|
70
|
+
end
|
71
|
+
|
72
|
+
# Internal: Gets the latest invoice and returns it as a Document (not
|
73
|
+
# fetched yet).
|
74
|
+
#
|
75
|
+
# Returns the Document to be fetched.
|
76
|
+
def document(index=nil)
|
77
|
+
@document ||= begin
|
78
|
+
params = {}
|
79
|
+
url = "https://loc6.lacaixa.es"
|
80
|
+
|
81
|
+
wait_until { find('frame') }
|
82
|
+
|
83
|
+
within_frame(all('frame')[1][:name]) do
|
84
|
+
within_frame(find('frame')[:name]) do
|
85
|
+
find('#buzon1.msn a').click
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
wait_until { find('frame') }
|
90
|
+
|
91
|
+
within_frame(all('frame')[1][:name]) do
|
92
|
+
within_frame('Cos') do
|
93
|
+
sleep 3
|
94
|
+
find("#lbl_Varios a").click
|
95
|
+
sleep 3
|
96
|
+
wait_until { find('#enlaceDescr') }
|
97
|
+
rows = all('.table_generica tr').select do |tr|
|
98
|
+
tr.find("td").text =~ /#{month}\/#{@year}/
|
99
|
+
end
|
100
|
+
|
101
|
+
if index
|
102
|
+
rows[index].find("a").click
|
103
|
+
else
|
104
|
+
docs = []
|
105
|
+
rows.each_with_index do |row, idx|
|
106
|
+
scraper = LaCaixa.new(@user, @password, @month, @folder)
|
107
|
+
docs << scraper.scrape(idx)
|
108
|
+
end
|
109
|
+
return docs
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
wait_until { find('frame') }
|
115
|
+
|
116
|
+
within_frame(all('frame')[1][:name]) do
|
117
|
+
within_frame('Cos') do
|
118
|
+
within_frame("Fr1") do
|
119
|
+
url = find("form[name=\"datos\"]")[:action]
|
120
|
+
within("form[name=\"datos\"]") do
|
121
|
+
guardar = {
|
122
|
+
"PN" => "COM",
|
123
|
+
"PE" => "39",
|
124
|
+
"RESOLUCION" => "300",
|
125
|
+
"CANAL_MOVIMIENTO" => "INT",
|
126
|
+
"target" => "Fr1",
|
127
|
+
"PAGINA_SOLICITADA" => "00001",
|
128
|
+
"FLAG_PDF_INICIAL" => "S",
|
129
|
+
"FLUJO" => "COM,10,:COM,51:SCP,23:GFI,7,''",
|
130
|
+
"CLICK_ORIG" => "FLX_COM_4",
|
131
|
+
"OPCION" => ""
|
132
|
+
}
|
133
|
+
|
134
|
+
params = all('input').reduce({}) do |h, i|
|
135
|
+
h.update({ i[:name] => i[:value] })
|
136
|
+
end.update(guardar)
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
Capybara.app_host = "https://loc6.lacaixa.es"
|
143
|
+
cookie = Cookie.new("JSESSIONID_CTX", get_me_the_cookie("JSESSIONID_CTX")[:value])
|
144
|
+
|
145
|
+
Document.new(url, :post, cookie, params)
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
# Internal: Returns the String current month padded with zeros to the left.
|
150
|
+
def month
|
151
|
+
@month.to_s.rjust(2, '0')
|
152
|
+
end
|
153
|
+
|
154
|
+
# Internal: Sets the configuration for capybara to work with the LaCaixa
|
155
|
+
# website.
|
156
|
+
#
|
157
|
+
# Returns nothing.
|
158
|
+
def setup_capybara
|
159
|
+
Capybara.run_server = false
|
160
|
+
Capybara.current_driver = :selenium
|
161
|
+
Capybara.app_host = 'http://empresa.lacaixa.es'
|
162
|
+
Capybara.default_wait_time = 20
|
163
|
+
Capybara.ignore_hidden_elements = false
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
data/lib/autility/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: autility
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2011-12-15 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: capybara
|
16
|
-
requirement: &
|
16
|
+
requirement: &70133155093360 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70133155093360
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: capybara-webkit
|
27
|
-
requirement: &
|
27
|
+
requirement: &70133155091420 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70133155091420
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: show_me_the_cookies
|
38
|
-
requirement: &
|
38
|
+
requirement: &70133155089040 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70133155089040
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: commander
|
49
|
-
requirement: &
|
49
|
+
requirement: &70133155088360 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70133155088360
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: mocha
|
60
|
-
requirement: &
|
60
|
+
requirement: &70133155087420 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70133155087420
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: minitest
|
71
|
-
requirement: &
|
71
|
+
requirement: &70133155086440 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,7 +76,7 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70133155086440
|
80
80
|
description: Downloads utility invoices from common spanish firms such as Endesa or
|
81
81
|
Vodafone.
|
82
82
|
email:
|
@@ -99,6 +99,7 @@ files:
|
|
99
99
|
- lib/autility/data.rb
|
100
100
|
- lib/autility/document.rb
|
101
101
|
- lib/autility/endesa.rb
|
102
|
+
- lib/autility/lacaixa.rb
|
102
103
|
- lib/autility/movistar_spain.rb
|
103
104
|
- lib/autility/version.rb
|
104
105
|
- lib/autility/vodafone_spain.rb
|