TaoBaoApi 0.0.5 → 0.0.6

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.
data/README.md CHANGED
@@ -3,7 +3,10 @@
3
3
  通过淘宝或天猫商品链接获取商品信息,商品信息包括标题、价格、图片。
4
4
 
5
5
  ## 环境说明
6
- ruby 1.9.3 2.0.0未测试,可能会有问题
6
+ 当前版本0.0.6 ruby 1.9.3 2.0.0未测试,nokogiri版本可能会有些问题
7
+
8
+ ## 依赖库
9
+ nokogiri, faraday, faraday_middleware
7
10
 
8
11
  ## 安装方法
9
12
 
@@ -25,11 +28,14 @@ ruby 1.9.3 2.0.0未测试,可能会有问题
25
28
 
26
29
  require 'TaoBaoApi'
27
30
 
28
- good = TaoBaoApi::Good.new
31
+ good = TaoBaoApi::Good.new 'http://item.taobao.com/item.htm?id=16434110195'
29
32
 
30
- info = good.get_info 'http://item.taobao.com/item.htm?id=16434110195'
33
+ info = good.get_info
31
34
 
32
- p info #hash format,{:title => xxx, :price => xxx, :img => xxx, :url => url}
35
+ p info #hash format,{:title => xxx, :price => xxx, :images => [], :url => url}
33
36
 
34
37
  ```
35
- 测试文件见test.rb
38
+ 测试文件见test.rb
39
+
40
+ ## Todo
41
+ * 获取促销价
data/TaoBaoApi.gemspec CHANGED
@@ -23,4 +23,7 @@ Gem::Specification.new do |spec|
23
23
 
24
24
  # spec.add_dependency "nokogiri", '1.5.10'
25
25
  spec.add_dependency "nokogiri"
26
+ spec.add_dependency 'faraday'
27
+ # spec.add_dependency 'faraday-cookie_jar'
28
+ spec.add_dependency 'faraday_middleware'
26
29
  end
data/lib/TaoBaoApi.rb CHANGED
@@ -1,28 +1,53 @@
1
1
  require "TaoBaoApi/version"
2
- require 'nokogiri'
3
- require 'open-uri'
2
+ require 'nokogiri'
3
+ require 'faraday'
4
+ # require 'faraday-cookie_jar'
5
+ require 'faraday_middleware'
4
6
 
5
7
  module TaoBaoApi
8
+
6
9
  class Good
7
- def get_info url
8
- return 'good_url_nil' if url.nil?
10
+ def initialize(url)
11
+ @url = url_filter(url)
12
+
13
+ if @url.include? 'tmall'
14
+ init_url = 'http://www.tmall.com'
15
+ else
16
+ init_url = 'http://www.taobao.com/'
17
+ end
18
+
19
+ @conn = Faraday.new(:url => init_url) do |f|
20
+ f.use FaradayMiddleware::FollowRedirects , limit: 10
21
+
22
+ f.request :url_encoded
23
+ f.adapter :net_http
24
+ f.headers[:referer] = init_url
25
+ f.headers[:user_agent] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:26.0) Gecko/20100101 Firefox/26.0'
26
+ # f.response :logger
27
+ # f.use :cookie_jar
28
+ end
29
+ end
30
+
31
+ def get_info
32
+ return 'good_url_nil' if @url.nil?
9
33
 
10
- url = url_filter(url)
11
- doc = Nokogiri::HTML(open(url))
34
+ response = @conn.get @url
35
+
36
+ doc = Nokogiri::HTML(response.body)
12
37
  doc.encoding = 'utf-8'
13
-
38
+
14
39
  begin
15
- title = doc.css('title').first.text.split('-').first.strip
40
+ title = title_filter(doc.css('title').first.text)
16
41
  rescue NoMethodError
17
42
  return 'good_not_exists'
18
43
  end
19
44
 
20
45
  images = []
21
- if url.include? 'taobao'
22
- price = doc.css('em.tb-rmb-num').first.text
46
+ if @url.include? 'taobao'
47
+ price = price_filter(doc.css('em.tb-rmb-num').first.text)
23
48
  img_src = 'data-src'
24
- elsif url.include? 'tmall'
25
- price = doc.css('.J_originalPrice').first.text.strip
49
+ elsif @url.include? 'tmall'
50
+ price = price_filter(doc.css('.J_originalPrice').first.text.strip)
26
51
  img_src = 'src'
27
52
  else
28
53
  return 'good_url_is_not_taobao'
@@ -36,12 +61,19 @@ module TaoBaoApi
36
61
  {:title => title,
37
62
  :price => price,
38
63
  :images => images,
39
- :url => url}
64
+ :url => @url}
40
65
  end
41
66
 
42
67
  private
43
- def image_filter(imgUrl)
44
- "#{imgUrl.split('.jpg').first}.jpg"
68
+ #小图转大图链接
69
+ def image_filter(img_url)
70
+ img_url = "#{img_url.split('.jpg').first}.jpg"
71
+
72
+ if img_url.include? '60x60'
73
+ img_url = img_url.gsub('60x60','460x460')
74
+ end
75
+
76
+ img_url
45
77
  end
46
78
 
47
79
  def url_filter(url)
@@ -53,5 +85,15 @@ module TaoBaoApi
53
85
  end
54
86
  end
55
87
 
88
+ #去除标题空格
89
+ def title_filter(title)
90
+ title = title.split('-').first.strip.gsub(' ','') if !title.nil?
91
+ end
92
+
93
+ #格式化16.0 - 18.0 类似这样的价格区间
94
+ def price_filter price
95
+ price = price.split('-').first.strip if !price.nil? && price.include?('-')
96
+ end
97
+
56
98
  end
57
99
  end
@@ -1,3 +1,3 @@
1
1
  module TaoBaoApi
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
data/test.rb CHANGED
@@ -1,8 +1,13 @@
1
1
  require File.join(File.dirname(__FILE__), 'lib', 'TaoBaoApi')
2
2
 
3
- good = TaoBaoApi::Good.new
3
+ url = 'http://item.taobao.com/item.htm?id=16434110195'
4
+ # url = 'http://detail.tmall.com/item.htm?id=35513218520'
5
+ # url = 'http://item.taobao.com/item.htm?spm=a1z09.5.0.0.x2gUPA&id=16718391999'
6
+ # url = 'http://item.taobao.com/item.htm?id=20132398689'
7
+ # url ='http://detail.tmall.com/item.htm?id=9153380600'
8
+ # url ='http://detail.tmall.com/item.htm?id=17350703554&spm=a1z09.5.0.0.PCBxNl'
9
+ good = TaoBaoApi::Good.new url
4
10
 
5
- url = 'http://detail.tmall.com/item.htm?id=35576507007'
6
- info = good.get_info url
11
+ info = good.get_info
7
12
 
8
- p info
13
+ p info
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: TaoBaoApi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-01-20 00:00:00.000000000 Z
12
+ date: 2014-02-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -59,6 +59,38 @@ dependencies:
59
59
  - - ! '>='
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: faraday
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: faraday_middleware
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
62
94
  description: ! ' get goods info from taobao'
63
95
  email:
64
96
  - gwikimo@gmail.com