ml_s4m 0.8 → 0.9.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: c9eebdbee770e320e2d7cc8c6aaf2adeeb908330
4
- data.tar.gz: 4bd292f1f15c414824c3d6404dece1506d346124
2
+ SHA256:
3
+ metadata.gz: b8413199a424e43bf602f76292cd9d879c124ff648967bd6cde63b30609bfbb8
4
+ data.tar.gz: 1c3b5a3fff1e4aa2605fb67383f36210ade550b280886dda5116e93d707dc4e6
5
5
  SHA512:
6
- metadata.gz: e413a352ae651e538fc4c02ee5e3c48323abf1fbab1fcc5564075e58ff97fa18bc27c9c955e0c9a16cd4c7f79b88a0e3d8eb832daf0403da3c8a51ce618cef73
7
- data.tar.gz: 42812b8fb22ceb2985932668cac600b42d8062d6ee487c561117632626a7188c001b812bf4cf1f024a5aaca828ca81456ffca71d0660bd763f7f0ac4f931c869
6
+ metadata.gz: 2031580a6633522537c69c85e400fcab4a2eb1ad936090917ed85002b0dc7fc962ebcb44830cdad90badaa207eccafb8ddd1c33b63215fbe8772cb332400dd1f
7
+ data.tar.gz: 639a811aab91d6e761b0c100ff8d3c0a4c94195b25d7712bdd3af781c558cfd7a35884f96905ad7d09a08fa8419b56465e0601ef2d2494be4d5774a93fba5736
@@ -1 +1 @@
1
- 2.2.2
1
+ 2.4.1
data/README.md CHANGED
@@ -1,15 +1,12 @@
1
1
  # MlS4m
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/ml_s4m`. To experiment with that code, run `bin/console` for an interactive prompt.
4
-
5
- TODO: Delete this and the text above, and describe your gem
6
3
 
7
4
  ## Installation
8
5
 
9
6
  Add this line to your application's Gemfile:
10
7
 
11
8
  ```ruby
12
- gem 'ml_s4m'
9
+ gem 'ml_s4m', '0.9.5'
13
10
  ```
14
11
 
15
12
  And then execute:
@@ -22,7 +19,18 @@ Or install it yourself as:
22
19
 
23
20
  ## Usage
24
21
 
25
- TODO: Write usage instructions here
22
+
23
+ ```ruby
24
+ ml = MlS4m::MercadoLivre.new
25
+ # list_search = ml.setPNSearch(PART_NUMBER, CATEGORY)
26
+ # CATEGIRY in ["ML_DRONE", "ML_INFO", "ML_CAMERA", "ML_PHONE")
27
+
28
+ # search in INFO
29
+ list_search = ml.setPNSearch("MPTU2", "ML_INFO")
30
+ # list = [1099.0, 1264.0, 1239.0, 744.0, 1110.0, 979.0, 935.0, 949.0, 1319.0, 930.0, 1460.0, 1171.0, 1109.0] prices in ML
31
+ top_50 = list_search.top5Offers() #top 50 first
32
+ ```
33
+
26
34
 
27
35
  ## Development
28
36
 
@@ -1,16 +1,15 @@
1
1
  require "ml_s4m/version"
2
2
  require 'nokogiri'
3
3
  require 'open-uri'
4
- require 'pry'
5
4
 
6
5
  module MlS4m
7
6
  class MercadoLivre
8
- def initialize
9
- @pn = nil
7
+ def initialize
10
8
  @url = {
11
- :ML_INFO => 'http://informatica.mercadolivre.com.br/PARTNUMBER_DisplayType_LF_OrderId_PRICE*DESC_ItemTypeID_N',
12
- :ML_CAMERA => 'http://cameras.mercadolivre.com.br/PARTNUMBER_DisplayType_LF_OrderId_PRICE*DESC_ItemTypeID_N',
13
- :ML_PHONE => 'http://celulares.mercadolivre.com.br/PARTNUMBER_DisplayType_LF_OrderId_PRICE*DESC_ItemTypeID_N'
9
+ :ML_INFO => 'https://informatica.mercadolivre.com.br/PARTNUMBER_DisplayType_LF_ItemTypeID_N',
10
+ :ML_CAMERA => 'https://cameras.mercadolivre.com.br/PARTNUMBER_DisplayType_LF_ItemTypeID_N',
11
+ :ML_PHONE => 'https://celulares.mercadolivre.com.br/PARTNUMBER_DisplayType_LF_ItemTypeID_N',
12
+ :ML_DRONE => 'https://eletronicos.mercadolivre.com.br/drones-e-acessorios-drone/PARTNUMBER_DisplayType_LF_ItemTypeID_N'
14
13
  }
15
14
  @url_default = nil
16
15
  @offers = []
@@ -18,47 +17,50 @@ module MlS4m
18
17
 
19
18
  def setPNSearch(partNumber = nil, category = nil)
20
19
  unless partNumber.nil?
21
- @pn = partNumber.downcase
20
+ @offers = []
21
+ ppn = partNumber.downcase
22
22
  @url_default = @url[category.to_sym] unless category.nil?
23
- url_page = @url_default.gsub('PARTNUMBER', @pn)
24
- begin
25
- page = Nokogiri::HTML(open(url_page))
26
- unless page.nil?
27
- list = page.css('ol#searchResults.list-view.srv').css('li')
28
- list_price = []
29
- list.each do |item|
30
- if item.children[6].nil?
31
- if !item.children[6].children[1].nil? && item.children[6].children[1].children[1].nil?
32
- price = item.children[6].children[1].children[1].text
33
- price.gsub('R$ ','').gsub('.','') unless price.nil?
34
- list_price << price unless price.nil?
35
- end
36
- end
37
- end
38
- if list_price.empty?
39
- list = page.css('div').css('section').css('ol#searchResults').css('li')
40
- list_price = []
41
- list.each do |item|
42
- if item.children[6].nil?
43
- item.children[1].children[1].children[1].children[2].children[1].nil? || item.children[1].children[1].children[1].children[2].children[1].children[3].nil?
44
- price = item.children[1].children[1].children[1].children[2].children[1].children[3].text
45
- list_price << price unless price.nil?
46
- end
47
- end
48
- @offers = list_price.map{ |x| current2int(x) }
23
+ pn = ["#{ppn.gsub(' ','%20')}", "#{ppn.gsub(' ','%20')}ll", "#{ppn.gsub(' ','%20')}bz"]
24
+ pn.each do |pnumber|
25
+ url_page = @url_default.gsub('PARTNUMBER', pnumber.gsub(' ','%20'))
26
+ begin
27
+ page = Nokogiri::HTML(open(url_page))
28
+ @offers += crawler_list(page) unless page.nil?
29
+ rescue OpenURI::HTTPError
30
+ puts "[ERROR] - Nesta categoria não há anúncios que coincidam com a sua busca - #{pnumber}"
49
31
  end
50
- rescue OpenURI::HTTPError
51
32
  end
52
- end
33
+ return @offers
34
+ end
53
35
  end
54
36
 
55
37
  def top5Offers
56
- @offers[1..5] if @offers.count > 4
38
+ @offers[1..5] if @offers.count > 4
57
39
  end
58
40
 
59
41
  private
60
42
  def current2int(money = nil)
61
43
  money.delete(" R$ ").gsub('.','').gsub(',','.').to_f if !money.nil? && money.class == String
62
44
  end
45
+
46
+ def crawler_list(page = nil)
47
+ unless page.nil?
48
+ begin
49
+ list = page.css('div').css('section').css('ol#searchResults').css('li')
50
+ list_price = []
51
+ list.each do |item|
52
+ unless item.children[1].nil?
53
+ unless item.css('.price-fraction').nil?
54
+ price = item.css('.price__fraction').text
55
+ list_price << price unless price.nil?
56
+ end
57
+ end
58
+ end
59
+ return list_price.map{ |x| current2int(x) }
60
+ rescue StandardError => e
61
+ puts "[ML] error 1 - crawler_list #{e}"
62
+ end
63
+ end
64
+ end
63
65
  end
64
66
  end
@@ -1,3 +1,3 @@
1
1
  module MlS4m
2
- VERSION = "0.8"
2
+ VERSION = "0.9.5"
3
3
  end
@@ -29,10 +29,10 @@ Gem::Specification.new do |spec|
29
29
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
30
30
  spec.require_paths = ["lib"]
31
31
 
32
- spec.add_development_dependency "bundler", "~> 1.13"
33
- spec.add_development_dependency "rake", "~> 10.0"
34
- spec.add_development_dependency "rspec", "~> 3.0"
32
+ spec.add_development_dependency "bundler", "1.16.6"
33
+ spec.add_development_dependency "rake", "~> 12.0"
34
+ spec.add_development_dependency "rspec", "~> 3.8.0"
35
35
  spec.add_development_dependency "pry", "~> 0.10.1"
36
-
37
- spec.add_dependency "nokogiri", "1.6.1"
36
+
37
+ spec.add_dependency "nokogiri", "1.10.1"
38
38
  end
metadata CHANGED
@@ -1,57 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ml_s4m
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.8'
4
+ version: 0.9.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eduardo Alencar
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-07-17 00:00:00.000000000 Z
11
+ date: 2019-03-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: '1.13'
19
+ version: 1.16.6
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: '1.13'
26
+ version: 1.16.6
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '12.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: '12.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '3.0'
47
+ version: 3.8.0
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '3.0'
54
+ version: 3.8.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: pry
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - '='
74
74
  - !ruby/object:Gem::Version
75
- version: 1.6.1
75
+ version: 1.10.1
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - '='
81
81
  - !ruby/object:Gem::Version
82
- version: 1.6.1
82
+ version: 1.10.1
83
83
  description: Search in Mercado Livre
84
84
  email:
85
85
  - lebas66@gmail.com
@@ -119,7 +119,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
119
119
  version: '0'
120
120
  requirements: []
121
121
  rubyforge_project:
122
- rubygems_version: 2.4.8
122
+ rubygems_version: 2.7.9
123
123
  signing_key:
124
124
  specification_version: 4
125
125
  summary: Search in Mercado Livre