craigslister 0.0.0 → 0.0.1
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/lib/craigslister.rb +22 -18
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d851b7d0a7f00c9cb5493bb1b4ffdb38c1752d2e
|
4
|
+
data.tar.gz: 80e986b0805484b1f8f8d33c8836547d9b05671b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ee0e39625bde28bfb1d5003804213f1d3ed42c75a2303dcf691a0551d350979167641210768e54ec1e2ad5e77b0c909d9c63e0dd9663d7782c1e9037ddf17520
|
7
|
+
data.tar.gz: 123d6828752eeedd630360760300541c695c598be0901bd73fbd6b95c2df1bb95c8b1acf9245c84240b2a8498aa3f726d739488cff424066d4915155271cada0
|
data/lib/craigslister.rb
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
# Add Item#url
|
2
|
+
# organize spec files
|
3
|
+
# figure out how to run spec from any folder
|
4
|
+
|
1
5
|
require 'mechanize'
|
2
6
|
|
3
7
|
class InvalidRangeError < StandardError
|
@@ -7,25 +11,23 @@ class Craigslister
|
|
7
11
|
attr_reader :area, :item, :high, :low, :results
|
8
12
|
|
9
13
|
def initialize args
|
10
|
-
@results
|
11
|
-
@area
|
12
|
-
@item
|
13
|
-
@high
|
14
|
-
@low
|
14
|
+
@results = []
|
15
|
+
@area = args.fetch(:area, 'sfbay')
|
16
|
+
@item = args[:item]
|
17
|
+
@high = args.fetch(:high, nil)
|
18
|
+
@low = args.fetch(:low, nil)
|
15
19
|
validate_price_range
|
16
20
|
|
17
21
|
@mech = Mechanize.new
|
18
22
|
configure_mech
|
19
23
|
end
|
20
24
|
|
21
|
-
def scrape
|
22
|
-
links.
|
23
|
-
get_data_from(link)
|
24
|
-
end
|
25
|
+
def scrape!
|
26
|
+
links.map {|link| get_data_from(link)}.compact
|
25
27
|
end
|
26
28
|
|
27
29
|
def url
|
28
|
-
"#{base_url}"\
|
30
|
+
"#{base_url}/"\
|
29
31
|
"search/sss?sort=rel&"\
|
30
32
|
"#{price_query}"\
|
31
33
|
"query=#{item.downcase.split(' ') * '+'}"\
|
@@ -39,21 +41,22 @@ class Craigslister
|
|
39
41
|
|
40
42
|
private
|
41
43
|
def base_url
|
42
|
-
"https://#{area}.craigslist.org
|
44
|
+
"https://#{area}.craigslist.org"
|
43
45
|
end
|
44
46
|
|
45
47
|
def get_data_from link
|
46
48
|
@mech.get(link)
|
47
|
-
@results << Item.new(scrape_item_data) rescue p '
|
49
|
+
@results << Item.new(scrape_item_data(link)) rescue p 'No Image'
|
48
50
|
end
|
49
51
|
|
50
|
-
def scrape_item_data
|
52
|
+
def scrape_item_data url
|
51
53
|
{
|
52
54
|
image: @mech.page.images[0].src,
|
53
55
|
title: @mech.page.at('span.postingtitletext').text.gsub(/ ?- ?\$\d+ ?\(.+\)/, ''),
|
54
56
|
price: @mech.page.at('span.postingtitletext span.price').text.gsub(/\$/,'').to_i,
|
55
57
|
location: @mech.page.at('span.postingtitletext small').text.gsub(/ ?[\(\)]/,''),
|
56
|
-
description: @mech.page.at('section#postingbody').text
|
58
|
+
description: @mech.page.at('section#postingbody').text,
|
59
|
+
url: "#{base_url}#{url}"
|
57
60
|
}
|
58
61
|
end
|
59
62
|
|
@@ -75,13 +78,14 @@ class Craigslister
|
|
75
78
|
end
|
76
79
|
|
77
80
|
class Item
|
78
|
-
attr_reader :title, :image, :price, :location
|
81
|
+
attr_reader :title, :image, :price, :location, :url
|
79
82
|
|
80
83
|
def initialize args
|
81
|
-
@title
|
82
|
-
@image
|
83
|
-
@price
|
84
|
+
@title = args[:title]
|
85
|
+
@image = args[:image]
|
86
|
+
@price = args[:price]
|
84
87
|
@location = args[:location]
|
88
|
+
@url = args[:url]
|
85
89
|
end
|
86
90
|
end
|
87
91
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: craigslister
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Scott
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-10-
|
11
|
+
date: 2015-10-27 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: all you need is an item title and you can scrape item objects from craigslist
|
14
14
|
email: christo247@gmail.com
|