tf2r 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +3 -0
- data/.ruby-gemset +1 -1
- data/.travis.yml +3 -0
- data/CHANGELOG.md +0 -0
- data/Gemfile.lock +38 -2
- data/README.md +30 -2
- data/Rakefile +8 -1
- data/lib/tf2r/scraper.rb +262 -166
- data/lib/tf2r/version.rb +1 -1
- data/spec/raffles.html +320 -0
- data/spec/scraper_spec.rb +210 -3
- data/spec/spec_helper.rb +14 -1
- data/spec/vcr/cassettes/raffles.yml +243 -0
- data/spec/vcr/cassettes/scrape_raffle_for_creator.yml +213 -0
- data/spec/vcr/cassettes/scrape_raffle_for_participants.yml +213 -0
- data/spec/vcr/cassettes/scrape_raffle_for_raffle.yml +213 -0
- data/spec/vcr/cassettes/scrape_ranks.yml +197 -0
- data/spec/vcr/cassettes/scrape_user_not_found.yml +119 -0
- data/spec/vcr/cassettes/scrape_user_real.yml +275 -0
- data/tf2r.gemspec +17 -11
- metadata +84 -10
data/spec/scraper_spec.rb
CHANGED
@@ -13,7 +13,9 @@ describe TF2R::Scraper do
|
|
13
13
|
context 'no options are given' do
|
14
14
|
it 'creates an agent with default user agent if none is specified' do
|
15
15
|
scraper = TF2R::Scraper.new({})
|
16
|
-
expect(
|
16
|
+
expect(
|
17
|
+
scraper.instance_variable_get(:@mech).user_agent
|
18
|
+
).to eql("TF2R::Scraper #{TF2R::VERSION}")
|
17
19
|
end
|
18
20
|
end
|
19
21
|
|
@@ -21,7 +23,9 @@ describe TF2R::Scraper do
|
|
21
23
|
it 'creates an agent with the specified user agent' do
|
22
24
|
custom = 'Custom User Agent'
|
23
25
|
scraper = TF2R::Scraper.new({user_agent: custom})
|
24
|
-
expect(
|
26
|
+
expect(
|
27
|
+
scraper.instance_variable_get(:@mech).user_agent
|
28
|
+
).to eql(custom)
|
25
29
|
end
|
26
30
|
end
|
27
31
|
|
@@ -29,14 +33,217 @@ describe TF2R::Scraper do
|
|
29
33
|
it 'stores the given cookie' do
|
30
34
|
test_filename = File.join(File.dirname(__FILE__), 'test_cookies.txt')
|
31
35
|
scraper = TF2R::Scraper.new({cookies_txt: File.new(test_filename)})
|
32
|
-
expect(
|
36
|
+
expect(
|
37
|
+
scraper.instance_variable_get(:@mech).cookie_jar.cookies[0].value
|
38
|
+
).to eq('example_value')
|
33
39
|
end
|
34
40
|
end
|
35
41
|
end
|
36
42
|
|
37
43
|
describe '#fetch' do
|
44
|
+
before(:each) do
|
45
|
+
stub_request(:get, "http://google.com/").
|
46
|
+
with(:headers => {'Accept'=>'*/*', 'Host'=>'google.com'}).
|
47
|
+
to_return(:status => 200, :body => "",
|
48
|
+
:headers => {'content_type' => 'text/html'})
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'makes a request to the specified URL' do
|
52
|
+
expect(
|
53
|
+
scraper.fetch('http://google.com')
|
54
|
+
).to have_requested(:get, 'google.com')
|
55
|
+
end
|
56
|
+
|
38
57
|
it 'returns a Mechanize::Page' do
|
39
58
|
expect(scraper.fetch('http://google.com')).to be_a(Mechanize::Page)
|
40
59
|
end
|
41
60
|
end
|
61
|
+
|
62
|
+
describe '#scrape_main_page' do
|
63
|
+
let(:result) { scraper.scrape_main_page }
|
64
|
+
|
65
|
+
before(:each) do
|
66
|
+
raffles_file = File.new(File.join(File.dirname(__FILE__), 'raffles.html'))
|
67
|
+
stub_request(:get, "http://tf2r.com/raffles.html").
|
68
|
+
with(:headers => {'Accept'=>'*/*', 'Host'=>'tf2r.com'}).
|
69
|
+
to_return(:status => 200, :body => raffles_file,
|
70
|
+
:headers => {'content_type' => 'text/html'})
|
71
|
+
end
|
72
|
+
|
73
|
+
it 'returns an Array of Strings' do
|
74
|
+
VCR.use_cassette('raffles') do
|
75
|
+
expect(result).to be_an(Array)
|
76
|
+
expect(result[0]).to be_a(String)
|
77
|
+
expect(result[-1]).to be_a(String)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'returns raffle links in reverse chronological order' do
|
82
|
+
# See spec/raffles.html for the hard-coded values.
|
83
|
+
expect(result[0]).to eql('http://tf2r.com/kzkp8jo.html')
|
84
|
+
expect(result[-1]).to eql('http://tf2r.com/k4jx1hz.html')
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
describe '#scrape_raffle_for_creator' do
|
89
|
+
let(:page) {
|
90
|
+
VCR.use_cassette('scrape_raffle_for_creator') do
|
91
|
+
scraper.fetch('http://tf2r.com/kstzcbd.html')
|
92
|
+
end
|
93
|
+
}
|
94
|
+
let(:result) { scraper.scrape_raffle_for_creator(page) }
|
95
|
+
|
96
|
+
it 'returns a Hash representation of a user' do
|
97
|
+
expect(result).to be_a(Hash)
|
98
|
+
end
|
99
|
+
|
100
|
+
# This is a terrible spec right now. The raffle tested against is one of
|
101
|
+
# my own, which is constantly updated as I use the site. If I gain or lose
|
102
|
+
# rep, if I use a new Steam Community name or avatar, the test will fail.
|
103
|
+
# TODO: Use a stagnant alt account to make a test raffle.
|
104
|
+
it 'returns correct values' do
|
105
|
+
expect(result[:steam_id]).to eql(76561198061719848)
|
106
|
+
expect(result[:colour]).to eql('70b01b')
|
107
|
+
|
108
|
+
# The following expectations are very brittle. TF2R updates the certain
|
109
|
+
# user attributes (such as name and avatar) every time the user logs in
|
110
|
+
# with new ones.
|
111
|
+
expect(result[:username]).to eql('Yulli')
|
112
|
+
expect(result[:avatar_link]).to eql('http://media.steampowered.com/steamcommunity/public/images/avatars/bc/bc9dc4302d23f2e2f37f59c59f29c27dbc8cade6_full.jpg')
|
113
|
+
|
114
|
+
# Talk about brittle.
|
115
|
+
expect(result[:posrep]).to eql(11459)
|
116
|
+
expect(result[:negrep]).to eql(0)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
|
121
|
+
describe '#scrape_raffle_for_raffle' do
|
122
|
+
let(:page) {
|
123
|
+
VCR.use_cassette('scrape_raffle_for_raffle') do
|
124
|
+
scraper.fetch('http://tf2r.com/kstzcbd.html')
|
125
|
+
end
|
126
|
+
}
|
127
|
+
let(:result) { scraper.scrape_raffle_for_raffle(page) }
|
128
|
+
|
129
|
+
it 'returns a Hash representation of a raffle' do
|
130
|
+
expect(result).to be_a(Hash)
|
131
|
+
end
|
132
|
+
|
133
|
+
it 'returns correct values' do
|
134
|
+
expect(result[:link_snippet]).to eql('kstzcbd')
|
135
|
+
expect(result[:title]).to eql('Just one refined [1 hour]')
|
136
|
+
expect(result[:description]).to eql('Plain and simple.')
|
137
|
+
expect(result[:start_time]).to eql(DateTime.strptime('Mon, 29 Oct 2012 14:51:45 +0100', '%a, %d %b %Y %H:%M:%S %z').to_time)
|
138
|
+
expect(result[:end_time]).to eql(DateTime.strptime('Mon, 29 Oct 2012 14:53:01 +0100', '%a, %d %b %Y %H:%M:%S %z').to_time)
|
139
|
+
expect(result[:win_chance]).to eql(0.1)
|
140
|
+
# TODO: use a raffle where current_entries != max_entries
|
141
|
+
expect(result[:current_entries]).to eql(10)
|
142
|
+
expect(result[:max_entries]).to eql(10)
|
143
|
+
expect(result[:is_done]).to eql(true)
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
describe '#scrape_raffle_for_participants' do
|
148
|
+
let(:page) {
|
149
|
+
VCR.use_cassette('scrape_raffle_for_participants') do
|
150
|
+
scraper.fetch('http://tf2r.com/kstzcbd.html?full')
|
151
|
+
end
|
152
|
+
}
|
153
|
+
let(:result) { scraper.scrape_raffle_for_participants(page) }
|
154
|
+
|
155
|
+
it 'returns an Array of Hashes' do
|
156
|
+
expect(result).to be_an(Array)
|
157
|
+
expect(result[0]).to be_a(Hash)
|
158
|
+
expect(result[-1]).to be_a(Hash)
|
159
|
+
end
|
160
|
+
|
161
|
+
it 'returns correct values' do
|
162
|
+
expect(result[0][:steam_id]).to eql(76561198017461530)
|
163
|
+
expect(result[0][:username]).to eql('TheJohn')
|
164
|
+
expect(result[0][:colour]).to eql('ebe2ca')
|
165
|
+
|
166
|
+
expect(result[-1][:steam_id]).to eql(76561198029274581)
|
167
|
+
expect(result[-1][:username]).to eql('pony danza (OUT AGAIN DAMN IT)')
|
168
|
+
expect(result[-1][:colour]).to eql('cd9b1d')
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
describe '#scrape_user' do
|
173
|
+
context 'a real user page is given' do
|
174
|
+
let(:page) {
|
175
|
+
VCR.use_cassette('scrape_user_real') do
|
176
|
+
scraper.fetch('http://tf2r.com/user/76561198061719848.html')
|
177
|
+
end
|
178
|
+
}
|
179
|
+
let(:result) { scraper.scrape_user(page) }
|
180
|
+
|
181
|
+
it 'returns a Hash' do
|
182
|
+
expect(result).to be_a(Hash)
|
183
|
+
end
|
184
|
+
|
185
|
+
# This spec is also brittle. It relies on my user account, which is updated
|
186
|
+
# constantly.
|
187
|
+
# TODO: use a stagnant alt account
|
188
|
+
it 'returns correct values' do
|
189
|
+
expect(result[:steam_id]).to eql(76561198061719848)
|
190
|
+
expect(result[:username]).to eql('Yulli')
|
191
|
+
expect(result[:avatar_link]).to eql('http://media.steampowered.com/steamcommunity/public/images/avatars/bc/bc9dc4302d23f2e2f37f59c59f29c27dbc8cade6_full.jpg')
|
192
|
+
expect(result[:posrep]).to eql(11459)
|
193
|
+
expect(result[:negrep]).to eql(0)
|
194
|
+
expect(result[:colour]).to eql('70b01b')
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
context 'a user page for a non-existent user is given' do
|
199
|
+
let(:page) {
|
200
|
+
VCR.use_cassette('scrape_user_not_found') do
|
201
|
+
scraper.fetch('http://tf2r.com/user/123456.html')
|
202
|
+
end
|
203
|
+
}
|
204
|
+
let(:result) { scraper.scrape_user(page) }
|
205
|
+
it 'returns a Hash' do
|
206
|
+
expect(result).to be_a(Hash)
|
207
|
+
end
|
208
|
+
|
209
|
+
it 'returns the attempted Steam ID' do
|
210
|
+
expect(result[:steam_id]).to eql(123456)
|
211
|
+
end
|
212
|
+
|
213
|
+
it 'returns mostly nil values' do
|
214
|
+
expect(result[:username]).to be_nil
|
215
|
+
expect(result[:avatar_link]).to be_nil
|
216
|
+
expect(result[:posrep]).to be_nil
|
217
|
+
expect(result[:negrep]).to be_nil
|
218
|
+
expect(result[:colour]).to be_nil
|
219
|
+
end
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
|
224
|
+
describe '#scrape_ranks' do
|
225
|
+
let(:page) {
|
226
|
+
VCR.use_cassette('scrape_ranks') do
|
227
|
+
scraper.fetch('http://tf2r.com/info.html')
|
228
|
+
end
|
229
|
+
}
|
230
|
+
let(:result) { scraper.scrape_ranks(page) }
|
231
|
+
|
232
|
+
it 'returns an Array of Hashes' do
|
233
|
+
expect(result).to be_an(Array)
|
234
|
+
expect(result[0]).to be_a(Hash)
|
235
|
+
expect(result[-1]).to be_a(Hash)
|
236
|
+
end
|
237
|
+
|
238
|
+
it 'returns correct values' do
|
239
|
+
expect(result[0][:name]).to eql('User')
|
240
|
+
expect(result[0][:description]).to eql('Every new or existing user has this rank.')
|
241
|
+
expect(result[0][:colour]).to eql('ebe2ca')
|
242
|
+
|
243
|
+
# This is brittle. Every time a new rank is added, this fails.
|
244
|
+
expect(result[-1][:name]).to eql('Lense')
|
245
|
+
expect(result[-1][:description]).to eql('[ Custom donator rank ]')
|
246
|
+
expect(result[-1][:colour]).to eql('545d6c')
|
247
|
+
end
|
248
|
+
end
|
42
249
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,5 +1,18 @@
|
|
1
|
+
require 'coveralls'
|
2
|
+
Coveralls.wear!
|
3
|
+
|
1
4
|
require 'tf2r'
|
5
|
+
require 'vcr'
|
6
|
+
require 'webmock/rspec'
|
2
7
|
|
3
8
|
RSpec.configure do |config|
|
4
9
|
config.order = 'random'
|
5
|
-
end
|
10
|
+
end
|
11
|
+
|
12
|
+
VCR.configure do |c|
|
13
|
+
c.cassette_library_dir = 'spec/vcr/cassettes'
|
14
|
+
c.hook_into :webmock
|
15
|
+
c.ignore_localhost = true
|
16
|
+
end
|
17
|
+
|
18
|
+
WebMock.disable_net_connect!(allow_localhost: true)
|
@@ -0,0 +1,243 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://tf2r.com/raffles.html
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept-Encoding:
|
11
|
+
- gzip,deflate,identity
|
12
|
+
Accept:
|
13
|
+
- "*/*"
|
14
|
+
User-Agent:
|
15
|
+
- TF2R::Scraper 0.0.1
|
16
|
+
Accept-Charset:
|
17
|
+
- ISO-8859-1,utf-8;q=0.7,*;q=0.7
|
18
|
+
Accept-Language:
|
19
|
+
- en-us,en;q=0.5
|
20
|
+
Host:
|
21
|
+
- tf2r.com
|
22
|
+
Connection:
|
23
|
+
- keep-alive
|
24
|
+
Keep-Alive:
|
25
|
+
- 300
|
26
|
+
response:
|
27
|
+
status:
|
28
|
+
code: 200
|
29
|
+
message: OK
|
30
|
+
headers:
|
31
|
+
Server:
|
32
|
+
- nginx/1.7.0
|
33
|
+
Date:
|
34
|
+
- Mon, 04 Aug 2014 20:26:00 GMT
|
35
|
+
Content-Type:
|
36
|
+
- text/html; charset=utf-8
|
37
|
+
Transfer-Encoding:
|
38
|
+
- chunked
|
39
|
+
Connection:
|
40
|
+
- keep-alive
|
41
|
+
Set-Cookie:
|
42
|
+
- session=kEpKJAKyNkpmUS-ZCwwc-1ILFg6; expires=Tue, 04-Aug-2015 20:26:00 GMT;
|
43
|
+
Max-Age=31536000; path=/
|
44
|
+
Expires:
|
45
|
+
- Thu, 19 Nov 1981 08:52:00 GMT
|
46
|
+
Cache-Control:
|
47
|
+
- no-store, no-cache, must-revalidate, post-check=0, pre-check=0
|
48
|
+
Pragma:
|
49
|
+
- no-cache
|
50
|
+
Content-Encoding:
|
51
|
+
- gzip
|
52
|
+
Vary:
|
53
|
+
- Accept-Encoding
|
54
|
+
body:
|
55
|
+
encoding: ASCII-8BIT
|
56
|
+
string: !binary |-
|
57
|
+
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
|
240
|
+
2/8PAAD//wMAtAk2lDuwAAA=
|
241
|
+
http_version:
|
242
|
+
recorded_at: Mon, 04 Aug 2014 20:24:20 GMT
|
243
|
+
recorded_with: VCR 2.9.2
|