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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/craigslister.rb +22 -18
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2f7c43f5d674ae551b03f42dc93f75576890281a
4
- data.tar.gz: ad9657c211afc293e8691c63a27dc2c955761e4e
3
+ metadata.gz: d851b7d0a7f00c9cb5493bb1b4ffdb38c1752d2e
4
+ data.tar.gz: 80e986b0805484b1f8f8d33c8836547d9b05671b
5
5
  SHA512:
6
- metadata.gz: 3485dfec92f4f3b9b866fc02d003a656606c6450aef079e4f8e65864a83671168b458ac2a4236affecc67eecdb3bd50a6c43c1b09c0a918f5aff4da513ff4f83
7
- data.tar.gz: 34d344fd148d581997485196755c1df024a6dca845152979cf3320addfbf46b096786c805d016b2c7f5eb7242b338750e5b3d19535db14ffdb3404084ca15167
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 = args.fetch(:area, 'sfbay')
12
- @item = args[:item]
13
- @high = args.fetch(:high, nil)
14
- @low = args.fetch(:low, nil)
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.each do |link|
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 'no image'
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 = args[:title]
82
- @image = args[:image]
83
- @price = args[: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.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-26 00:00:00.000000000 Z
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