TaoBaoApi 0.0.8 → 0.0.9

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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YWI2MTQ4N2YxMTM4YmM4MDdjMzE2NTRlYjhiODRiNjBlMzBmMDAzMg==
4
+ OWZkNWYzMzYwZjIwZWIzNDE3ZTdjNTk2MDM5ZWMwMDBlYmIzOGQ3Yg==
5
5
  data.tar.gz: !binary |-
6
- MDU3ZGNiODNiMjcwNGE5ZmVlYjkwMzA5NTc5ZTNlMjdjYzE1ZWM0OQ==
6
+ ZGUzY2ZiMzNiYmE2MzU2YWEwODZhZTUxYjUyZTlmNjgyZmY4ZTA0ZQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NDZmNzBjYjg5OWY0ZGQzOTRjYTA0NTE4NzI4NjRlMWNiMDI3NTVkOGZhZDMx
10
- MzE3ZGJmNmQ3M2EwMDMwMzZhNjgzNWFjNTQ4YTAxZGMyMmE1N2ZiODA2MjEw
11
- YTRhZmY2OGYyZDdjZTZlNDJjNzA0Y2NlZTE2NDJjMzc1ZmE1YmM=
9
+ NjFhNWU1YjA1YzExYTY5MmUyODY1YWZlZWM1NzVjOGQxNTUwNTYzMzFkY2U4
10
+ OGNlNzU5Y2ZjYzAyZDNjNzU1ZmMxY2M0NTc5NmU0NTZjZjZkYTViMzliODI3
11
+ NDI4ZjJmMDM3MmQ1NmI2NzA2ODUyNmU3ODk4ODFiNzQxMmNiYTM=
12
12
  data.tar.gz: !binary |-
13
- MGI1YzQxYWJkNjQ5YWUzN2I3MTg1NDY0Y2Q1ZGFkZTVhZTg0Y2M0NGI1ZmMw
14
- ZmNmMzM0ZDRmMmRlMjQ4YTVmZjVjM2MxZDc3ZTI0ZjVlYjAxOWEwOTY2MzJj
15
- OGI0OWIzMmM5MmU5N2ZjOGViOWRlYTA4NjZiZDNlNmRmYmFmY2I=
13
+ NTVhNGY1YTllMTk4ZTE4NDNkYzk4NDQ1NmRlMTU2ODMwMmRkYzI2OTc0OTc2
14
+ ODRiZGJkZmIwNThmNWJlZjM2ZjcyMDU1MjBmYWY0MjJmZTUwYWU0YWZiZTc1
15
+ ZWRjZjVjYjViYjE5OGM3YzIzYmM0MWFjZjEzOTY5NDQzYjY3NzA=
@@ -1,58 +1,61 @@
1
1
  require "TaoBaoApi/version"
2
2
  require 'nokogiri'
3
3
  require 'faraday'
4
- # require 'faraday-cookie_jar'
5
4
  require 'faraday_middleware'
5
+ require 'json'
6
+ require 'open-uri'
6
7
 
7
8
  module TaoBaoApi
8
9
 
9
10
  class Good
10
11
  def initialize(url)
11
- @url = url_filter(url)
12
+ @url_info = filter_url(url)
12
13
 
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|
14
+ @conn = Faraday.new(:url => @init_url) do |f|
20
15
  f.use FaradayMiddleware::FollowRedirects , limit: 10
21
16
 
22
17
  f.request :url_encoded
23
18
  f.adapter :net_http
24
- f.headers[:referer] = init_url
19
+ f.headers[:referer] = @init_url
25
20
  f.headers[:user_agent] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:26.0) Gecko/20100101 Firefox/26.0'
26
21
  # f.response :logger
27
22
  # f.use :cookie_jar
28
- end
23
+ end if @url_info
29
24
  end
30
25
 
26
+ #得到产品信息
31
27
  def get_info
32
- return 'good_url_nil' if @url.nil?
28
+ return 'good.url.error' if !@url_info
33
29
 
34
- response = @conn.get @url
30
+ response = @conn.get @url_info[:url]
35
31
 
36
32
  doc = Nokogiri::HTML(response.body)
37
33
  doc.encoding = 'utf-8'
38
34
 
35
+ #处理标题
39
36
  begin
40
37
  title = title_filter(doc.css('title').first.text)
41
38
  rescue NoMethodError
42
- return 'good_not_exists'
39
+ return 'good.not.exists'
43
40
  end
44
41
 
45
- images = []
46
- if @url.include? 'taobao'
47
- price = price_filter(doc.css('em.tb-rmb-num').first.text)
48
- # img_src = 'data-src'
49
- elsif @url.include? 'tmall'
50
- price = price_filter(doc.css('.J_originalPrice').first.text.strip)
51
- # img_src = 'src'
42
+ #处理价格
43
+ price_info = get_price(@url_info[:id])
44
+ if price_info
45
+ price = price_info[:price]
46
+ promo_price = price_info[:promo_price]
52
47
  else
53
- return 'good_url_is_not_taobao'
48
+ if @url_info[:url].include? 'tmall'
49
+ price = price_filter(doc.css('.J_originalPrice').first.text.strip)
50
+ promo_price = 0
51
+ else
52
+ price = price_filter(doc.css('em.tb-rmb-num').first.text)
53
+ promo_price = 0
54
+ end
54
55
  end
55
-
56
+
57
+ #处理图片
58
+ images = []
56
59
  doc.css('#J_UlThumb').first.css('img').each do |img|
57
60
  img = img.attr('data-src').to_s == '' ? img.attr('src') : img.attr('data-src')
58
61
  images << image_filter(img)
@@ -60,29 +63,35 @@ module TaoBaoApi
60
63
 
61
64
  {:title => title,
62
65
  :price => price,
66
+ :promo_price => promo_price,
63
67
  :images => images,
64
- :url => @url}
68
+ :url => @url_info[:url]}
65
69
  end
66
70
 
67
71
  private
68
72
  #小图转大图链接
69
73
  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
-
74
+ img_url = "#{img_url.split('.jpg').first}.jpg"
75
+ img_url = img_url.gsub('60x60','460x460') if img_url.include? '60x60'
76
+
76
77
  img_url
77
78
  end
78
79
 
79
- def url_filter(url)
80
- if url.include?'s.click.taobao.com'
81
- refer = open(url).base_uri.to_s.split('URL:').first
82
- open(URI.unescape(refer.split('tu=')[1]),"Referer" => refer).base_uri.to_s.split('&ali_trackid=')[0]
80
+ #过滤url得到产品hash
81
+ def filter_url(url)
82
+ ids = /id=(\d+)/.match(url)
83
+ return false if ids.to_a.size == 0
84
+
85
+ id = ids.to_a.last
86
+ if url.include? 'tmall'
87
+ url = "http://detail.tmall.com/item.htm?id=#{id}"
88
+ @init_url = 'http://www.tmall.com'
83
89
  else
84
- url = url.split('/item.htm?').first + '/item.htm?id=' + url.split('id=').last.split('&').first
90
+ url = "http://item.taobao.com/item.htm?id=#{id}"
91
+ @init_url = 'http://www.taobao.com'
85
92
  end
93
+
94
+ {:url => url,:id => id}
86
95
  end
87
96
 
88
97
  #去除标题空格
@@ -90,11 +99,26 @@ module TaoBaoApi
90
99
  title = title.split('-').first.strip.gsub(' ','') if !title.nil?
91
100
  end
92
101
 
93
- #格式化16.0 - 18.0 类似这样的价格区间
102
+ #促销价获取失败的情况下调用此方法
94
103
  def price_filter price
95
104
  price = price.split('-').first.strip if !price.nil? && price.include?('-')
105
+ end
106
+
107
+ #可获取促销价
108
+ def get_price id
109
+ response = open("http://a.m.tmall.com/ajax/sku.do?item_id=#{id}").read
110
+
111
+ begin
112
+ good_json =JSON.parse response
113
+ price_info = good_json['availSKUs'].first.last
114
+
115
+ return {:price => price_info['price'].to_s,
116
+ :promo_price =>price_info['promoPrice'].to_s}
117
+ rescue JSON::ParserError
118
+ 'get.price.error'
119
+ end
96
120
 
97
- price
121
+ false
98
122
  end
99
123
 
100
124
  end
@@ -1,3 +1,3 @@
1
1
  module TaoBaoApi
2
- VERSION = "0.0.8"
2
+ VERSION = "0.0.9"
3
3
  end
data/test.rb CHANGED
@@ -5,8 +5,8 @@ require File.join(File.dirname(__FILE__), 'lib', 'TaoBaoApi')
5
5
  # url = 'http://item.taobao.com/item.htm?spm=a1z09.5.0.0.x2gUPA&id=16718391999'
6
6
  # url = 'http://item.taobao.com/item.htm?id=20132398689'
7
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
- url = 'http://item.taobao.com/item.htm?spm=0.0.0.0.g5BwfC&id=18769075753'
8
+ url ='http://detail.tmall.com/item.htm?id=17350703554&spm=a1z09.5.0.0.PCBxNl'
9
+ # url = 'http://item.taobao.com/item.htm?spm=0.0.0.0.g5BwfC&id=18769075753'
10
10
  good = TaoBaoApi::Good.new url
11
11
 
12
12
  info = good.get_info
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: TaoBaoApi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - wikimo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-12 00:00:00.000000000 Z
11
+ date: 2014-05-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler