craigslist_scraper 0.0.1.alpha → 0.0.2.alpha
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.
- checksums.yaml +4 -4
- data/README.md +7 -2
- data/lib/craigslist_scraper/craigslist.rb +25 -3
- data/lib/craigslist_scraper/version.rb +1 -1
- data/spec/craigslist_spec.rb +36 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fad02f3cde182850b02e1fe252afdf5472af8074
|
4
|
+
data.tar.gz: 0364b9d6d2f1d1474188b2419b2869edecab4988
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fe736b2bc66bc759cf7b9c2d5fa37eb2ab9cb113db2db9ed9a43ca2a715b06469b631947cb70c2849674f57108b07df5caca6af3e233ced77384c614cb8a4599
|
7
|
+
data.tar.gz: 02e2f0eb9bc325cb04f9744d8831e3b826aa713ff6f2090596dd1b3a42a31e9bb9b1325ea3514e13b69be286ce551cea6393e280a1c7867c61550f9dbb1bd66d
|
data/README.md
CHANGED
@@ -41,12 +41,17 @@ Or install it yourself as:
|
|
41
41
|
price: 5
|
42
42
|
}]
|
43
43
|
|
44
|
-
###
|
45
|
-
####
|
44
|
+
### Data calculations
|
45
|
+
#### average price
|
46
46
|
|
47
47
|
craigslist = CraigsList.new
|
48
48
|
craigslist.search_miami_for "white aligator shoes".average_price #=> 200
|
49
49
|
|
50
|
+
#### median price
|
51
|
+
|
52
|
+
craigslist = CraigsList.new
|
53
|
+
craigslist.search_losangeles_for "pretentious handbag".median_price #=> 700
|
54
|
+
|
50
55
|
### You can search most valid craigslist cities
|
51
56
|
#### example
|
52
57
|
craigslist.search_dallas_for "a NoBama bumper sticker"
|
@@ -38,11 +38,33 @@ class CraigsList
|
|
38
38
|
|
39
39
|
Array.class_eval do
|
40
40
|
def average_price
|
41
|
+
reject! { |item| item[:price] == nil }
|
41
42
|
return 0 if empty?
|
42
|
-
|
43
|
-
self.reject! { |item| item[:price] == nil }
|
44
43
|
|
45
|
-
|
44
|
+
price_array.reduce(:+) / size
|
45
|
+
end
|
46
|
+
|
47
|
+
def median_price
|
48
|
+
reject! { |item| item[:price] == nil }
|
49
|
+
|
50
|
+
return 0 if empty?
|
51
|
+
return first[:price].to_i if size == 1
|
52
|
+
|
53
|
+
if size.odd?
|
54
|
+
price_array.sort[middle]
|
55
|
+
else
|
56
|
+
price_array.sort[middle - 1.. middle].reduce(:+) / 2
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def middle
|
63
|
+
size / 2
|
64
|
+
end
|
65
|
+
|
66
|
+
def price_array
|
67
|
+
flat_map { |item| [item[:price]] }.map { |price| price.to_i }
|
46
68
|
end
|
47
69
|
end
|
48
70
|
|
data/spec/craigslist_spec.rb
CHANGED
@@ -133,6 +133,42 @@ describe CraigsList do
|
|
133
133
|
craigslist.search_denver_for("uranium").average_price.should == 1
|
134
134
|
end
|
135
135
|
|
136
|
+
end
|
137
|
+
describe "Array#median_price" do
|
138
|
+
let(:craigslist) { CraigsList.new }
|
139
|
+
|
140
|
+
it "returns the median price for a search with multiple items" do
|
141
|
+
craigslist.stub(:search_denver_for).and_return([{price: "1"} , {price: "1000"} , {price: "5"}])
|
142
|
+
craigslist.search_denver_for("uranium").median_price.should == 5
|
143
|
+
end
|
144
|
+
|
145
|
+
it "returns 0 for search with no results" do
|
146
|
+
craigslist.stub(:search_denver_for).and_return([])
|
147
|
+
craigslist.search_denver_for("uranium").median_price.should == 0
|
148
|
+
end
|
149
|
+
|
150
|
+
it "returns median for a search with two items" do
|
151
|
+
craigslist.stub(:search_denver_for).and_return([{price: "8"} , {price: "12"} ])
|
152
|
+
|
153
|
+
craigslist.search_denver_for("uranium").median_price.should == 10
|
154
|
+
end
|
155
|
+
|
156
|
+
it "returns the price for a search with one item" do
|
157
|
+
craigslist.stub(:search_denver_for).and_return([{price: 1}])
|
158
|
+
|
159
|
+
craigslist.search_denver_for("uranium").median_price.should == 1
|
160
|
+
end
|
161
|
+
|
162
|
+
it "returns the average of the two middle numbers for an even array" do
|
163
|
+
craigslist.stub(:search_denver_for).and_return([{price: "1"} , {price: "5"} , {price: "15"} , {price: "10000"}])
|
164
|
+
craigslist.search_denver_for("uranium").median_price.should == 10
|
165
|
+
end
|
166
|
+
|
167
|
+
it "discards nil prices" do
|
168
|
+
craigslist.stub(:search_denver_for).and_return([{price: 1} , {price: nil}])
|
169
|
+
|
170
|
+
craigslist.search_denver_for("uranium").median_price.should == 1
|
171
|
+
end
|
136
172
|
end
|
137
173
|
end
|
138
174
|
|