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 +11 -5
- data/TaoBaoApi.gemspec +3 -0
- data/lib/TaoBaoApi.rb +57 -15
- data/lib/TaoBaoApi/version.rb +1 -1
- data/test.rb +9 -4
- metadata +34 -2
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
|
33
|
+
info = good.get_info
|
31
34
|
|
32
|
-
p info #hash format,{:title => xxx, :price => xxx, :
|
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
data/lib/TaoBaoApi.rb
CHANGED
@@ -1,28 +1,53 @@
|
|
1
1
|
require "TaoBaoApi/version"
|
2
|
-
require 'nokogiri'
|
3
|
-
require '
|
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
|
8
|
-
|
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
|
-
|
11
|
-
|
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
|
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
|
-
|
44
|
-
|
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
|
data/lib/TaoBaoApi/version.rb
CHANGED
data/test.rb
CHANGED
@@ -1,8 +1,13 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), 'lib', 'TaoBaoApi')
|
2
2
|
|
3
|
-
|
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
|
-
|
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.
|
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-
|
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
|