taobaorb 0.8.3 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/taobao/abstract_list.rb +16 -0
- data/lib/taobao/base.rb +6 -6
- data/lib/taobao/category.rb +11 -21
- data/lib/taobao/exceptions/api_error.rb +1 -1
- data/lib/taobao/exceptions/incorrect_property.rb +2 -0
- data/lib/taobao/product.rb +8 -3
- data/lib/taobao/product_list.rb +19 -42
- data/lib/taobao/property.rb +18 -0
- data/lib/taobao/property_list.rb +24 -0
- data/lib/taobao/user.rb +92 -0
- data/lib/taobao/util.rb +7 -0
- data/lib/taobaorb.rb +10 -1
- data/spec/fixtures/absent_user.json +1 -0
- data/spec/fixtures/category_properties.json +1 -1
- data/spec/fixtures/property.json +20 -0
- data/spec/fixtures/user.json +1 -0
- data/spec/fixtures/user_unknown_sex.json +1 -0
- data/spec/rspec/category_spec.rb +11 -32
- data/spec/rspec/product_list_spec.rb +15 -21
- data/spec/rspec/product_spec.rb +9 -8
- data/spec/rspec/property_list_spec.rb +37 -0
- data/spec/rspec/property_spec.rb +32 -0
- data/spec/rspec/search_spec.rb +3 -3
- data/spec/rspec/taobao_spec.rb +5 -4
- data/spec/rspec/user_spec.rb +74 -0
- data/spec/rspec/util_spec.rb +18 -0
- data/spec/spec_helper.rb +1 -1
- metadata +16 -3
data/lib/taobao/base.rb
CHANGED
@@ -4,21 +4,21 @@ require 'net/http'
|
|
4
4
|
require 'json'
|
5
5
|
|
6
6
|
module Taobao
|
7
|
-
|
7
|
+
|
8
8
|
API_VERSION = '2.0'
|
9
9
|
PRODUCTION_URL = 'http://gw.api.taobao.com/router/rest'
|
10
|
-
|
10
|
+
|
11
11
|
class << self
|
12
12
|
attr_accessor :public_key
|
13
13
|
attr_writer :private_key
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
16
|
def self.api_request(options)
|
17
17
|
uri = URI(PRODUCTION_URL)
|
18
18
|
response = Net::HTTP.post_form uri, self.append_required_options(options)
|
19
19
|
parse_to_hash response
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
private
|
23
23
|
def self.create_signature(options)
|
24
24
|
values_str = options.sort.inject('') do |str, item|
|
@@ -27,7 +27,7 @@ module Taobao
|
|
27
27
|
str = @private_key.to_s + values_str + @private_key.to_s
|
28
28
|
Digest::MD5.hexdigest(str).upcase
|
29
29
|
end
|
30
|
-
|
30
|
+
|
31
31
|
def self.append_required_options(options)
|
32
32
|
options.merge!({
|
33
33
|
app_key: @public_key,
|
@@ -39,7 +39,7 @@ module Taobao
|
|
39
39
|
options[:sign] = self.create_signature(options)
|
40
40
|
options
|
41
41
|
end
|
42
|
-
|
42
|
+
|
43
43
|
def self.parse_to_hash(response)
|
44
44
|
result = JSON.parse response.body, {symbolize_names: true}
|
45
45
|
raise Taobao::ApiError.new(result) if result.key? :error_response
|
data/lib/taobao/category.rb
CHANGED
@@ -1,36 +1,26 @@
|
|
1
1
|
class Taobao::Category
|
2
2
|
attr_reader :id
|
3
|
-
|
3
|
+
|
4
4
|
def initialize(category_id)
|
5
5
|
@id = category_id.to_i
|
6
6
|
end
|
7
|
-
|
7
|
+
|
8
8
|
def name
|
9
|
-
|
10
|
-
@name = category_request(cids: @id).first[:name]
|
9
|
+
@name ||= category_request(cids: @id).first[:name]
|
11
10
|
end
|
12
|
-
|
11
|
+
|
13
12
|
def subcategories
|
14
|
-
|
15
|
-
@subcategories = category_request(parent_cid: @id)
|
13
|
+
@subcategories ||= category_request(parent_cid: @id)
|
16
14
|
end
|
17
|
-
|
15
|
+
|
18
16
|
def properties
|
19
|
-
|
20
|
-
fields = [:pid, :name, :must, :multi, :prop_values].join ','
|
21
|
-
params = {method: 'taobao.itemprops.get', fields: fields, cid: @id}
|
22
|
-
result = Taobao.api_request params
|
23
|
-
begin
|
24
|
-
result[:itemprops_get_response][:item_props][:item_prop]
|
25
|
-
rescue NoMethodError
|
26
|
-
@properties = []
|
27
|
-
end
|
17
|
+
@properties ||= Taobao::PropertyList.new(cid: @id)
|
28
18
|
end
|
29
|
-
|
19
|
+
|
30
20
|
def products
|
31
|
-
Taobao::ProductList.new(cid: @id)
|
21
|
+
@products ||= Taobao::ProductList.new(cid: @id)
|
32
22
|
end
|
33
|
-
|
23
|
+
|
34
24
|
private
|
35
25
|
def category_request(optional_params)
|
36
26
|
fields = [:cid, :parent_cid, :name, :is_parent].join ','
|
@@ -42,5 +32,5 @@ class Taobao::Category
|
|
42
32
|
raise Taobao::IncorrectCategoryId, 'Incorrect category ID'
|
43
33
|
end
|
44
34
|
end
|
45
|
-
|
35
|
+
|
46
36
|
end
|
data/lib/taobao/product.rb
CHANGED
@@ -22,15 +22,16 @@ class Taobao::Product
|
|
22
22
|
else
|
23
23
|
@num_iid = product_properties.to_s
|
24
24
|
fetch_full_data
|
25
|
+
convert_data_types
|
25
26
|
end
|
26
27
|
end
|
27
28
|
|
28
29
|
def method_missing(method_name, *args, &block)
|
29
|
-
|
30
|
-
super
|
31
|
-
else
|
30
|
+
if @properties.include? method_name
|
32
31
|
fetch_full_data unless @all_properties_fetched
|
33
32
|
self.instance_variable_get "@#{method_name}"
|
33
|
+
else
|
34
|
+
super
|
34
35
|
end
|
35
36
|
end
|
36
37
|
|
@@ -49,4 +50,8 @@ class Taobao::Product
|
|
49
50
|
hash_to_object(result[:item_get_response][:item])
|
50
51
|
@all_properties_fetched = true
|
51
52
|
end
|
53
|
+
|
54
|
+
def convert_data_types
|
55
|
+
@price = @price.to_f
|
56
|
+
end
|
52
57
|
end
|
data/lib/taobao/product_list.rb
CHANGED
@@ -1,38 +1,27 @@
|
|
1
|
-
class Taobao::ProductList
|
2
|
-
|
3
|
-
include Enumerable
|
4
|
-
|
5
|
-
def initialize(opts)
|
6
|
-
@opts = opts
|
7
|
-
end
|
8
|
-
|
1
|
+
class Taobao::ProductList < Taobao::AbstractList
|
2
|
+
|
9
3
|
def size
|
10
4
|
products.size
|
11
5
|
end
|
12
|
-
|
13
|
-
def total_count
|
14
|
-
memoize_api_result
|
15
|
-
@total_count
|
16
|
-
end
|
17
|
-
|
6
|
+
|
18
7
|
def page(num)
|
19
|
-
|
8
|
+
clear_response
|
20
9
|
@opts[:page_no] = num
|
21
10
|
self
|
22
11
|
end
|
23
|
-
|
12
|
+
|
24
13
|
def per_page(num)
|
25
|
-
|
14
|
+
clear_response
|
26
15
|
@opts[:page_size] = num
|
27
16
|
self
|
28
17
|
end
|
29
|
-
|
18
|
+
|
30
19
|
def order_by(field)
|
31
|
-
|
20
|
+
clear_response
|
32
21
|
@opts[:order_by] = field
|
33
22
|
self
|
34
23
|
end
|
35
|
-
|
24
|
+
|
36
25
|
def method_missing(method_name, *args, &block)
|
37
26
|
if (m = /^order_by_(?<field>.+)$/.match method_name)
|
38
27
|
order_by m[:field]
|
@@ -40,44 +29,32 @@ class Taobao::ProductList
|
|
40
29
|
super
|
41
30
|
end
|
42
31
|
end
|
43
|
-
|
32
|
+
|
44
33
|
def each(&block)
|
45
34
|
products.each{|item| block.call(item)}
|
46
35
|
end
|
47
|
-
|
36
|
+
|
37
|
+
def total_count
|
38
|
+
cached_responce[:items_get_response][:total_results].to_i
|
39
|
+
end
|
40
|
+
|
48
41
|
private
|
49
42
|
def products
|
50
|
-
memoize_api_result
|
51
|
-
@products
|
52
|
-
end
|
53
|
-
|
54
|
-
def memoize_api_result
|
55
|
-
return if @products
|
56
|
-
response = items_get_request
|
57
|
-
@total_count = retrieve_total_count(response)
|
58
|
-
@products = retrieve_products(response)
|
59
|
-
end
|
60
|
-
|
61
|
-
def retrieve_total_count(response)
|
62
|
-
response[:items_get_response][:total_results].to_i
|
63
|
-
end
|
64
|
-
|
65
|
-
def retrieve_products(response)
|
66
43
|
begin
|
67
|
-
products =
|
44
|
+
products = cached_responce[:items_get_response][:items][:item]
|
68
45
|
get_products_as_objects(products)
|
69
46
|
rescue NoMethodError
|
70
47
|
[]
|
71
48
|
end
|
72
49
|
end
|
73
|
-
|
50
|
+
|
74
51
|
def get_products_as_objects(products)
|
75
52
|
products.map do |product|
|
76
53
|
Taobao::Product.new(product)
|
77
54
|
end
|
78
55
|
end
|
79
|
-
|
80
|
-
def
|
56
|
+
|
57
|
+
def retrieve_response
|
81
58
|
fields = [:num_iid, :title, :nick, :pic_url, :cid, :price, :type,
|
82
59
|
:delist_time, :post_fee, :score, :volume].join ','
|
83
60
|
params = {method: 'taobao.items.get', fields: fields}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class Taobao::Property
|
2
|
+
attr_reader :multi, :must, :name, :pid, :values
|
3
|
+
include Taobao::Util
|
4
|
+
|
5
|
+
def initialize(response)
|
6
|
+
@response = response
|
7
|
+
to_object response
|
8
|
+
@values = get_values
|
9
|
+
raise Taobao::IncorrectProperty, 'Incorrect property data' if @name.nil?
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
def get_values
|
14
|
+
@response[:prop_values][:prop_value]
|
15
|
+
rescue NoMethodError
|
16
|
+
[]
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class Taobao::PropertyList < Taobao::AbstractList
|
2
|
+
|
3
|
+
def each(&block)
|
4
|
+
properties.each{ |item| block.call(item) }
|
5
|
+
end
|
6
|
+
|
7
|
+
private
|
8
|
+
def properties
|
9
|
+
begin
|
10
|
+
props = cached_responce[:itemprops_get_response][:item_props][:item_prop]
|
11
|
+
props.map { |prop| Taobao::Property.new(prop) }
|
12
|
+
rescue NoMethodError
|
13
|
+
[]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def retrieve_response
|
18
|
+
fields = [:pid, :name, :prop_values, :must, :multi, :is_color_prop,
|
19
|
+
:is_key_prop, :is_enum_prop, :is_input_prop, :is_sale_prop,
|
20
|
+
:is_item_prop].join ','
|
21
|
+
params = {method: 'taobao.itemprops.get', fields: fields}
|
22
|
+
Taobao.api_request params.merge(@opts)
|
23
|
+
end
|
24
|
+
end
|
data/lib/taobao/user.rb
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
require 'date'
|
2
|
+
|
3
|
+
class Taobao::User
|
4
|
+
|
5
|
+
def initialize(nickname)
|
6
|
+
@nick = nickname
|
7
|
+
end
|
8
|
+
|
9
|
+
def good_purchases_count
|
10
|
+
cached_response[:buyer_credit][:good_num].to_i
|
11
|
+
end
|
12
|
+
|
13
|
+
def buyer_level
|
14
|
+
cached_response[:buyer_credit][:level].to_i
|
15
|
+
end
|
16
|
+
|
17
|
+
def buyer_score
|
18
|
+
cached_response[:buyer_credit][:score].to_i
|
19
|
+
end
|
20
|
+
|
21
|
+
def total_purchases_count
|
22
|
+
cached_response[:buyer_credit][:total_num].to_i
|
23
|
+
end
|
24
|
+
|
25
|
+
def good_sales_count
|
26
|
+
cached_response[:seller_credit][:good_num].to_i
|
27
|
+
end
|
28
|
+
|
29
|
+
def seller_level
|
30
|
+
cached_response[:seller_credit][:level].to_i
|
31
|
+
end
|
32
|
+
|
33
|
+
def seller_score
|
34
|
+
cached_response[:seller_credit][:score].to_i
|
35
|
+
end
|
36
|
+
|
37
|
+
def total_sales_count
|
38
|
+
cached_response[:seller_credit][:total_num].to_i
|
39
|
+
end
|
40
|
+
|
41
|
+
def registration_date
|
42
|
+
DateTime.parse cached_response[:created]
|
43
|
+
end
|
44
|
+
|
45
|
+
def last_visit
|
46
|
+
DateTime.parse cached_response[:last_visit]
|
47
|
+
end
|
48
|
+
|
49
|
+
def city
|
50
|
+
cached_response[:location][:city]
|
51
|
+
end
|
52
|
+
|
53
|
+
def state
|
54
|
+
cached_response[:location][:state]
|
55
|
+
end
|
56
|
+
|
57
|
+
def sex
|
58
|
+
if cached_response.has_key? :sex
|
59
|
+
return :male if cached_response[:sex] == 'm'
|
60
|
+
return :female if cached_response[:sex] == 'f'
|
61
|
+
end
|
62
|
+
:unknown
|
63
|
+
end
|
64
|
+
|
65
|
+
def type
|
66
|
+
cached_response[:type]
|
67
|
+
end
|
68
|
+
|
69
|
+
def uid
|
70
|
+
cached_response[:uid]
|
71
|
+
end
|
72
|
+
|
73
|
+
def id
|
74
|
+
cached_response[:user_id].to_i
|
75
|
+
end
|
76
|
+
|
77
|
+
private
|
78
|
+
def cached_response
|
79
|
+
@response ||= retrieve_response[:user_get_response][:user]
|
80
|
+
@response
|
81
|
+
end
|
82
|
+
|
83
|
+
def retrieve_response
|
84
|
+
fields = [:user_id, :uid, :nick, :sex, :buyer_credit, :seller_credit,
|
85
|
+
:location, :created, :last_visit, :birthday, :type, :status, :alipay_no,
|
86
|
+
:alipay_account, :alipay_account, :email, :consumer_protection,
|
87
|
+
:alipay_bind].join ','
|
88
|
+
params = {method: 'taobao.user.get', fields: fields, nick: @nick}
|
89
|
+
Taobao.api_request params
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
data/lib/taobao/util.rb
ADDED
data/lib/taobaorb.rb
CHANGED
@@ -1,7 +1,16 @@
|
|
1
1
|
require 'taobao/base'
|
2
|
+
require 'taobao/util'
|
3
|
+
|
2
4
|
require 'taobao/exceptions/api_error'
|
3
5
|
require 'taobao/exceptions/incorrect_category_id'
|
6
|
+
require 'taobao/exceptions/incorrect_property'
|
7
|
+
|
4
8
|
require 'taobao/category'
|
5
9
|
require 'taobao/product'
|
10
|
+
require 'taobao/property'
|
11
|
+
require 'taobao/search'
|
12
|
+
require 'taobao/user'
|
13
|
+
|
14
|
+
require 'taobao/abstract_list'
|
6
15
|
require 'taobao/product_list'
|
7
|
-
require 'taobao/
|
16
|
+
require 'taobao/property_list'
|
@@ -0,0 +1 @@
|
|
1
|
+
{"error_response":{"code":50,"msg":"Remote service error","sub_code":"isv.user-not-exist:invalid-nick","sub_msg":"根据用户昵称:unknown_taobao_user查询不到对应的用户信息"}}
|
@@ -1 +1 @@
|
|
1
|
-
{"itemprops_get_response":{"item_props":{"item_prop":[{"multi":true,"must":false,"name":"颜色分类","pid":1627207,"prop_values":{"prop_value":[{"name":"军绿色","vid":3232483},{"name":"天蓝色","vid":3232484},{"name":"巧克力色","vid":3232481},{"name":"桔色","vid":90554},{"name":"浅灰色","vid":28332},{"name":"浅绿色","vid":30156},{"name":"浅黄色","vid":60092},{"name":"深卡其布色","vid":3232482},{"name":"深灰色","vid":3232478},{"name":"深紫色","vid":3232479},{"name":"深蓝色","vid":28340},{"name":"白色","vid":28320},{"name":"粉红色","vid":3232480},{"name":"紫罗兰","vid":80882},{"name":"紫色","vid":28329},{"name":"红色","vid":28326},{"name":"绿色","vid":28335},{"name":"花色 ","vid":130164},{"name":"蓝色","vid":28338},{"name":"褐色","vid":132069},{"name":"透明","vid":107121},{"name":"酒红色","vid":28327},{"name":"黄色","vid":28324},{"name":"黑色","vid":28341}]}},{"multi":false,"must":true,"name":"按风扇配置","pid":34405,"prop_values":{"prop_value":[{"name":"无","vid":10010},{"name":"1个","vid":105375},{"name":"2个","vid":105376},{"name":"3个","vid":131069},{"name":"4个","vid":105377},{"name":"其它","vid":10122}]}},{"multi":false,"must":true,"name":"按散热方式","pid":34406,"prop_values":{"prop_value":[{"name":"风冷","vid":128399},{"name":"热管","vid":131070},{"name":"液冷","vid":131071},{"name":"其它","vid":10122}]}},{"multi":false,"must":false,"name":"品牌","pid":20000,"prop_values":{"prop_value":[{"is_parent":true,"name":"ACTTO","vid":8940526},{"is_parent":true,"name":"Actto\/安尚","vid":4245182},{"is_parent":true,"name":"Ajazz\/黑爵","vid":49673634},{"is_parent":true,"name":"Aoago\/安华高","vid":4465054},{"is_parent":true,"name":"Aoni\/奥尼","vid":30986},{"is_parent":true,"name":"Belkin\/贝尔金","vid":21993},{"name":"Coio","vid":68555858},{"is_parent":true,"name":"Cool Cold\/越来越酷","vid":27330734},{"is_parent":true,"name":"Cool Fan\/酷风","vid":10855809},{"is_parent":true,"name":"Cooler Master\/酷冷至尊","vid":22026},{"is_parent":true,"name":"Cooskin\/酷奇","vid":3221126},{"is_parent":true,"name":"K-Mic\/金麦克","vid":23289931},{"is_parent":true,"name":"Kensington\/肯辛通","vid":4534862},{"is_parent":true,"name":"Logitech\/罗技","vid":20802},{"is_parent":true,"name":"Morpin\/摩品","vid":66306088},{"is_parent":true,"name":"Raoopt\/锐珀","vid":72111094},{"is_parent":true,"name":"Sorung","vid":89487913},{"is_parent":true,"name":"Suntai\/星钛","vid":90657293},{"is_parent":true,"name":"Targus\/泰格斯","vid":95999},{"is_parent":true,"name":"Thermaltake","vid":29583},{"is_parent":true,"name":"Transformers","vid":3261509},{"is_parent":true,"name":"WM\/维美传奇","vid":5758392},{"is_parent":true,"name":"corecool","vid":7725273},{"is_parent":true,"name":"ermic易麦","vid":4540138},{"is_parent":true,"name":"fad","vid":3250293},{"is_parent":true,"name":"七河","vid":44338750},{"is_parent":true,"name":"乐光","vid":26078497},{"name":"依依本色","vid":26585558},{"is_parent":true,"name":"冷板凳","vid":3345590},{"is_parent":true,"name":"博奇","vid":4538123},{"is_parent":true,"name":"埃伦","vid":16605835},{"is_parent":true,"name":"奥迪嘉","vid":4393249},{"is_parent":true,"name":"帝特","vid":3626511},{"is_parent":true,"name":"广弓","vid":97578386},{"is_parent":true,"name":"捷冷","vid":29580},{"is_parent":true,"name":"智派","vid":39033078},{"is_parent":true,"name":"浩业","vid":30771625},{"is_parent":true,"name":"AIKE\/爱客","vid":3250522},{"is_parent":true,"name":"硕王","vid":73871762},{"is_parent":true,"name":"终极者","vid":6037756},{"is_parent":true,"name":"美怡","vid":3842057},{"is_parent":true,"name":"蓝蚂蚁","vid":4220099},{"is_parent":true,"name":"赛鲸","vid":86563794},{"is_parent":true,"name":"超频三","vid":29579},{"is_parent":true,"name":"金圣斯\/Kingsons","vid":17925226},{"is_parent":true,"name":"雷洛","vid":3279963},{"is_parent":true,"name":"鸿浪","vid":7896423},{"is_parent":true,"name":"劲冷","vid":30571},{"is_parent":true,"name":"Deepcool\/九州风神","vid":22024},{"is_parent":true,"name":"Zalman\/思民","vid":31049},{"is_parent":true,"name":"Idock","vid":129976},{"is_parent":true,"name":"其他品牌","vid":81443},{"is_parent":true,"name":"Ecola\/宜客莱","vid":4535418}]}}]}}}
|
1
|
+
{"itemprops_get_response":{"item_props":{"item_prop":[{"is_color_prop":false,"is_enum_prop":true,"is_input_prop":false,"is_item_prop":false,"is_key_prop":true,"is_sale_prop":false,"multi":false,"must":true,"name":"品牌","pid":20000,"prop_values":{"prop_value":[{"is_parent":true,"name":"Acer\/宏基","vid":26691},{"is_parent":true,"name":"VIVO","vid":91621},{"is_parent":true,"name":"索爱","vid":39864706},{"is_parent":true,"name":"ACT\/安科讯","vid":74352616},{"is_parent":true,"name":"Aigo\/爱国者","vid":20796},{"is_parent":true,"name":"Alcatel\/阿尔卡特","vid":10283},{"is_parent":true,"name":"Alfa\/阿尔法","vid":7242850},{"is_parent":true,"name":"altek","vid":6832685},{"is_parent":true,"name":"Amoi\/夏新","vid":10779},{"is_parent":true,"name":"Apanda\/首派","vid":78030609},{"is_parent":true,"name":"iPhone","vid":30111},{"is_parent":true,"name":"Asus\/华硕","vid":11656},{"is_parent":true,"name":"AUX\/奥克斯","vid":21210},{"is_parent":true,"name":"AWIT","vid":16639733},{"is_parent":true,"name":"Barbie\/芭比","vid":31881},{"is_parent":true,"name":"Bayi\/贝易通","vid":15179993},{"is_parent":true,"name":"BBK\/步步高","vid":27726},{"name":"Benq\/明基","vid":21657},{"is_parent":true,"name":"BIRD\/波导","vid":10955},{"is_parent":true,"name":"BlackBerry\/黑莓","vid":47416},{"is_parent":true,"name":"Capitel\/首信","vid":10905},{"is_parent":true,"name":"Casio\/卡西欧","vid":21459},{"is_parent":true,"name":"CECT\/中电华通","vid":11057},{"is_parent":true,"name":"Changhong\/长虹","vid":30641},{"is_parent":true,"name":"Coolpad\/酷派","vid":11542},{"is_parent":true,"name":"Daxian\/大显","vid":11454},{"is_parent":true,"name":"DEC\/中恒","vid":117163},{"is_parent":true,"name":"Dell\/戴尔","vid":26683},{"is_parent":true,"name":"Desay\/德赛","vid":123840},{"is_parent":true,"name":"DIM\/迪美","vid":47622},{"is_parent":true,"name":"Disney\/迪士尼","vid":30812},{"is_parent":true,"name":"Dopod\/多普达","vid":33549},{"is_parent":true,"name":"E·Xun","vid":16168852},{"is_parent":true,"name":"elitek \/埃立特","vid":51844},{"is_parent":true,"name":"EPHONE\/易丰","vid":3318426},{"is_parent":true,"name":"Fadar\/锋达通","vid":3278450},{"is_parent":true,"name":"Fujitsu\/富士通","vid":21646},{"is_parent":true,"name":"Gaoke\/高科","vid":27725},{"is_parent":true,"name":"Gigabyte\/技嘉","vid":22005},{"is_parent":true,"name":"Gionee\/金立","vid":11531},{"is_parent":true,"name":"GNET\/三巨网","vid":123851},{"is_parent":true,"name":"GREAT","vid":4146587},{"is_parent":true,"name":"GT佳通","vid":95989},{"is_parent":true,"name":"G’FIVE","vid":44443225},{"is_parent":true,"name":"G’HONG","vid":134542668},{"is_parent":true,"name":"Haier\/海尔","vid":11016},{"is_parent":true,"name":"七喜","vid":105216},{"is_parent":true,"name":"Hisense\/海信","vid":11599},{"is_parent":true,"name":"HKC\/惠科","vid":41263},{"is_parent":true,"name":"HONCON\/宏康","vid":51843},{"is_parent":true,"name":"HOSIN\/欧新","vid":31050551},{"is_parent":true,"name":"HP\/惠普","vid":31140},{"is_parent":true,"name":"HTC","vid":3261618},{"is_parent":true,"name":"Huawei\/华为","vid":11813},{"is_parent":true,"name":"HYUNDAI\/现代","vid":21929},{"is_parent":true,"name":"IDO\/爱度","vid":123836},{"is_parent":true,"name":"ihkc\/弘谷电","vid":80146946},{"is_parent":true,"name":"i-mate","vid":97548},{"is_parent":true,"name":"Imden\/爱摩登","vid":11983257},{"is_parent":true,"name":"IMG\/英迈","vid":4218308},{"is_parent":true,"name":"Jugate\/知己","vid":112282},{"is_parent":true,"name":"Kenuo\/科诺","vid":39592},{"is_parent":true,"name":"Konka\/康佳","vid":11161},{"is_parent":true,"name":"koobee\/酷比","vid":41993221},{"is_parent":true,"name":"KPT","vid":4031620},{"is_parent":true,"name":"K-Touch\/天语","vid":84416},{"is_parent":true,"name":"Kyocera\/京瓷","vid":10713},{"is_parent":true,"name":"Lanwea\/联维","vid":41869104},{"is_parent":true,"name":"Lenovo\/联想","vid":11119},{"is_parent":true,"name":"LEXUE","vid":6994349},{"is_parent":true,"name":"LG","vid":10428},{"is_parent":true,"name":"Lingwin\/聆韵","vid":11544887},{"is_parent":true,"name":"LOVME","vid":6641603},{"is_parent":true,"name":"Malata\/万利达","vid":11653},{"is_parent":true,"name":"MASTONE\/万事通","vid":123853},{"is_parent":true,"name":"MeiLing\/美菱","vid":30653},{"is_parent":true,"name":"Meizu\/魅族","vid":25143},{"is_parent":true,"name":"MIKI","vid":4155601},{"is_parent":true,"name":"Mio\/宇达电通","vid":33560},{"is_parent":true,"name":"Mitsubishi Electric\/三菱","vid":10459},{"is_parent":true,"name":"MIUI\/小米","vid":3506680},{"is_parent":true,"name":"Mops","vid":80332131},{"is_parent":true,"name":"Motorola\/摩托罗拉","vid":10123},{"is_parent":true,"name":"NAMO","vid":30743053},{"is_parent":true,"name":"NEC","vid":10604},{"is_parent":true,"name":"Newsmy\/纽曼","vid":60679},{"is_parent":true,"name":"Nokia\/诺基亚","vid":33564},{"is_parent":true,"name":"O2","vid":49898},{"is_parent":true,"name":"英华ok","vid":11207},{"is_parent":true,"name":"OPPO","vid":28247},{"is_parent":true,"name":"OQO","vid":112850},{"is_parent":true,"name":"Palm\/奔迈","vid":28606},{"is_parent":true,"name":"Panasonic\/松下","vid":81147},{"is_parent":true,"name":"PANDA\/熊猫","vid":3782897},{"is_parent":true,"name":"Philips\/飞利浦","vid":10246},{"is_parent":true,"name":"Postcom\/新邮通信","vid":51484920},{"is_parent":true,"name":"Rahotech\/锐合通信","vid":90515404},{"is_parent":true,"name":"Sagetel\/萨际通","vid":96358407},{"is_parent":true,"name":"Samsung\/三星","vid":81156},{"is_parent":true,"name":"Sanyo\/三洋","vid":10728},{"is_parent":true,"name":"Sharp\/夏普","vid":10590},{"is_parent":true,"name":"Shma\/硕码","vid":29634077},{"is_parent":true,"name":"simdo","vid":27889953},{"is_parent":true,"name":"SK","vid":10656},{"is_parent":true,"name":"Skyworth\/创维","vid":11841},{"is_parent":true,"name":"Soar\/索爱","vid":20887},{"is_parent":true,"name":"Soaye","vid":84938916},{"is_parent":true,"name":"Sony\/索尼","vid":10209},{"is_parent":true,"name":"SOP","vid":4116461},{"is_parent":true,"name":"Takko","vid":5761211},{"is_parent":true,"name":"TCL","vid":10858},{"is_parent":true,"name":"TEM\/泰蒙","vid":7736875},{"is_parent":true,"name":"TFNET\/泰丰","vid":3294662},{"is_parent":true,"name":"TOOKY\/京崎","vid":111586078},{"is_parent":true,"name":"Toshiba\/东芝","vid":10745},{"is_parent":true,"name":"TP-Link\/普联技术","vid":31109},{"is_parent":true,"name":"TSD\/腾盛达","vid":95981},{"is_parent":true,"name":"T-Smart\/天迈","vid":15743043},{"is_parent":true,"name":"U9","vid":123463},{"is_parent":true,"name":"UKING","vid":38798768},{"is_parent":true,"name":"Umeox","vid":27918237},{"is_parent":true,"name":"UMO\/优摩","vid":91320508},{"is_parent":true,"name":"清华紫光","vid":11659},{"is_parent":true,"name":"UNITONE\/友利通","vid":95988},{"is_parent":true,"name":"UT Starcom\/UT斯达康","vid":11372},{"is_parent":true,"name":"VEVA","vid":3283405},{"is_parent":true,"name":"VIM","vid":7815822},{"is_parent":true,"name":"VOTO","vid":36077726},{"is_parent":true,"name":"V-Spring\/语泉","vid":6959181},{"is_parent":true,"name":"V.Land\/葳朗","vid":114173336},{"is_parent":true,"name":"Well Phone 沃普丰","vid":69015717},{"is_parent":true,"name":"YAS","vid":3278664},{"is_parent":true,"name":"Yoord\/优尔得","vid":44246390},{"is_parent":true,"name":"Yusun\/语信","vid":104029268},{"is_parent":true,"name":"Zeka\/志佳","vid":86281808},{"is_parent":true,"name":"ZTE\/中兴","vid":11208},{"is_parent":true,"name":"爱贝多","vid":6094112},{"is_parent":true,"name":"爱肯","vid":95987},{"is_parent":true,"name":"爱立信","vid":10392},{"is_parent":true,"name":"艾美讯","vid":3228013},{"is_parent":true,"name":"爱易通","vid":45225208},{"is_parent":true,"name":"百迪宝","vid":3373407},{"is_parent":true,"name":"邦华","vid":123837},{"is_parent":true,"name":"宝捷讯","vid":123838},{"is_parent":true,"name":"贝尔丰","vid":3279905},{"is_parent":true,"name":"晨兴","vid":123839},{"is_parent":true,"name":"晨讯","vid":3994933},{"is_parent":true,"name":"诚基","vid":4411943},{"is_parent":true,"name":"大唐","vid":11496},{"name":"迪比特","vid":11412},{"is_parent":true,"name":"帝狼","vid":3272147},{"is_parent":true,"name":"东信","vid":11263},{"is_parent":true,"name":"都宝","vid":123841},{"is_parent":true,"name":"朵唯","vid":26487995},{"is_parent":true,"name":"泛泰","vid":10681},{"is_parent":true,"name":"福日","vid":35647},{"is_parent":true,"name":"港利通","vid":131067},{"is_parent":true,"name":"高斯贝尔","vid":123842},{"is_parent":true,"name":"高新奇","vid":96761},{"is_parent":true,"name":"关爱行","vid":98573949},{"is_parent":true,"name":"广信","vid":123843},{"is_parent":true,"name":"国乾科技","vid":28037329},{"is_parent":true,"name":"国信","vid":3216739},{"is_parent":true,"name":"汉泰","vid":123844},{"is_parent":true,"name":"和信","vid":3284119},{"is_parent":true,"name":"恒基伟业","vid":95983},{"is_parent":true,"name":"互通","vid":11842},{"is_parent":true,"name":"华立","vid":95984},{"is_parent":true,"name":"华录","vid":3794117},{"is_parent":true,"name":"华唐","vid":3276005},{"is_parent":true,"name":"华信","vid":3301892},{"is_parent":true,"name":"华禹","vid":123845},{"is_parent":true,"name":"汇讯","vid":123846},{"is_parent":true,"name":"基尔","vid":7723810},{"is_parent":true,"name":"佳域宇通","vid":55709155},{"is_parent":true,"name":"嘉源","vid":123847},{"is_parent":true,"name":"金鹏","vid":11827},{"is_parent":true,"name":"金星","vid":30650},{"is_parent":true,"name":"康力","vid":3773407},{"name":"科健","vid":11742},{"is_parent":true,"name":"科盛","vid":31868},{"is_parent":true,"name":"蓝天","vid":3260678},{"is_parent":true,"name":"朗讯","vid":10391},{"is_parent":true,"name":"乐目","vid":4023071},{"is_parent":true,"name":"联创","vid":30864},{"is_parent":true,"name":"绿力","vid":123848},{"name":"美晨","vid":10763},{"is_parent":true,"name":"盟宝","vid":3322606},{"is_parent":true,"name":"明基西门子","vid":33503},{"is_parent":true,"name":"摩西","vid":29683},{"is_parent":true,"name":"南极星","vid":123849},{"is_parent":true,"name":"欧博信","vid":6201981},{"is_parent":true,"name":"欧盛","vid":32147904},{"is_parent":true,"name":"欧信","vid":4357282},{"is_parent":true,"name":"普莱达","vid":123850},{"is_parent":true,"name":"普天","vid":11788},{"is_parent":true,"name":"琦基","vid":3217424},{"is_parent":true,"name":"齐乐","vid":3280929},{"is_parent":true,"name":"侨兴","vid":11606},{"is_parent":true,"name":"萨基姆","vid":10374},{"is_parent":true,"name":"赛洛特","vid":3858040},{"is_parent":true,"name":"三盟","vid":113338},{"is_parent":true,"name":"桑达","vid":11497},{"is_parent":true,"name":"深爱","vid":95990},{"is_parent":true,"name":"盛隆","vid":3271450},{"is_parent":true,"name":"盛泰","vid":95982},{"is_parent":true,"name":"淘宝手机","vid":44220689},{"is_parent":true,"name":"特灵通","vid":3278833},{"is_parent":true,"name":"天珑","vid":123852},{"is_parent":true,"name":"天时达","vid":11548},{"is_parent":true,"name":"唯奥","vid":123854},{"is_parent":true,"name":"唯开","vid":10657},{"is_parent":true,"name":"唯科","vid":3283984},{"is_parent":true,"name":"西门子","vid":80946},{"is_parent":true,"name":"心相随","vid":7705835},{"is_parent":true,"name":"新中桥","vid":123855},{"is_parent":true,"name":"熊猫","vid":11610},{"is_parent":true,"name":"雅讯达","vid":123856},{"is_parent":true,"name":"倚天","vid":53934},{"is_parent":true,"name":"易百年","vid":89863143},{"is_parent":true,"name":"亿城","vid":123857},{"is_parent":true,"name":"亿和源","vid":3277378},{"is_parent":true,"name":"亿和源 ","vid":7463807},{"is_parent":true,"name":"亿通","vid":95986},{"is_parent":true,"name":"优Phone","vid":132626185},{"is_parent":true,"name":"优思","vid":4110526},{"is_parent":true,"name":"友旺科技","vid":29632},{"is_parent":true,"name":"友信达","vid":123858},{"is_parent":true,"name":"语音王","vid":3316578},{"is_parent":true,"name":"兆讯达","vid":123859},{"is_parent":true,"name":"振华欧比","vid":95985},{"is_parent":true,"name":"中宝","vid":65985},{"is_parent":true,"name":"中恒","vid":21425},{"is_parent":true,"name":"中天","vid":97072},{"is_parent":true,"name":"众一","vid":123860}]}},{"is_color_prop":false,"is_enum_prop":true,"is_input_prop":false,"is_item_prop":false,"is_key_prop":false,"is_sale_prop":false,"multi":false,"must":false,"name":"手机价格区间","pid":21514,"prop_values":{"prop_value":[{"name":"1000元以下","vid":42370},{"name":"1001-2000元","vid":38489},{"name":"2001-3000元","vid":42375},{"name":"3000-4000元","vid":125998},{"name":"4000元以上","vid":42382},{"name":"拍卖","vid":39414}]}},{"is_color_prop":false,"is_enum_prop":true,"is_input_prop":false,"is_item_prop":false,"is_key_prop":false,"is_sale_prop":false,"multi":false,"must":false,"name":"上市时间","pid":30606,"prop_values":{"prop_value":[{"is_parent":true,"name":"2011年","vid":10285019},{"is_parent":true,"name":"2010年","vid":11397753},{"is_parent":true,"name":"2009年","vid":107066},{"is_parent":true,"name":"2008年","vid":112030},{"is_parent":true,"name":"2007年","vid":47465},{"is_parent":true,"name":"2006年","vid":28964},{"is_parent":true,"name":"2005年","vid":28963},{"is_parent":true,"name":"2004年","vid":28962},{"name":"2003年以前","vid":92331},{"is_parent":true,"name":"2012年","vid":3271031}]}},{"is_color_prop":false,"is_enum_prop":true,"is_input_prop":false,"is_item_prop":false,"is_key_prop":false,"is_sale_prop":false,"multi":false,"must":true,"name":"网络类型","pid":10004,"prop_values":{"prop_value":[{"name":"GSM","vid":10022},{"name":"CDMA","vid":10023},{"name":"移动3G GSM\/TD-SCDMA(3G)","vid":3231341},{"name":"联通3G GSM\/WCDMA(3G)","vid":3231342},{"name":"电信3G CDMA\/CDMA2000(3G)","vid":3231340},{"name":"双模(GSM\/CDMA)","vid":3231343},{"name":"双模(GSM\/CDMA2000)","vid":88043696},{"name":"小灵通","vid":10026},{"name":"其它制式","vid":16325552},{"name":"其他制式","vid":16323156},{"name":"GSM\/WCDMA\/CDMA\/CDMA2000","vid":140699523}]}},{"is_color_prop":false,"is_enum_prop":true,"is_input_prop":false,"is_item_prop":false,"is_key_prop":false,"is_sale_prop":false,"multi":false,"must":true,"name":"外观样式","pid":10000,"prop_values":{"prop_value":[{"name":"直板","vid":10000},{"name":"滑盖","vid":10001},{"name":"翻盖","vid":10002},{"name":"侧滑盖","vid":72728132},{"name":"旋转","vid":10003},{"name":"其它","vid":10122}]}},{"is_color_prop":false,"is_enum_prop":true,"is_input_prop":false,"is_item_prop":false,"is_key_prop":false,"is_sale_prop":false,"multi":false,"must":false,"name":"主屏尺寸","pid":1627099,"prop_values":{"prop_value":[{"name":"1.8英寸","vid":65234},{"name":"1.9英寸","vid":3231605},{"name":"2.0英寸","vid":90615},{"name":"2.1英寸","vid":3231606},{"name":"2.2英寸","vid":90616},{"name":"2.4英寸","vid":90617},{"name":"2.5英寸","vid":65236},{"name":"2.6英寸","vid":91012},{"name":"2.8英寸","vid":90683},{"name":"2.9英寸","vid":3224791},{"name":"3.0英寸","vid":90619},{"name":"3.1英寸","vid":3263166},{"name":"3.2英寸","vid":3231607},{"name":"3.3英寸","vid":7986728},{"name":"3.4英寸","vid":7986777},{"name":"3.5英寸","vid":65235},{"name":"3.6英寸","vid":90620},{"name":"3.7英寸","vid":13451150},{"name":"3.8英寸","vid":90621},{"name":"4.0英寸","vid":90622},{"name":"4.3英寸","vid":90624},{"name":"其他尺寸","vid":32102},{"name":"4.5英寸","vid":19229459},{"name":"4.2英寸","vid":90623},{"name":"其它尺寸","vid":30025},{"name":"4.65英寸","vid":96062621},{"name":"4.7英寸","vid":76876820},{"name":"4.6英寸","vid":126148907},{"name":"5.0英寸","vid":3253104},{"name":"5.3英寸","vid":135631761},{"name":"7.0英寸","vid":80829},{"name":"7.7英寸","vid":138934665}]}},{"is_color_prop":true,"is_enum_prop":true,"is_input_prop":false,"is_item_prop":false,"is_key_prop":false,"is_sale_prop":true,"multi":true,"must":false,"name":"机身颜色","pid":1627207,"prop_values":{"prop_value":[{"name":"军绿色","vid":3232483},{"name":"天蓝色","vid":3232484},{"name":"巧克力色","vid":3232481},{"name":"桔色","vid":90554},{"name":"浅灰色","vid":28332},{"name":"浅绿色","vid":30156},{"name":"浅黄色","vid":60092},{"name":"深卡其布色","vid":3232482},{"name":"深灰色","vid":3232478},{"name":"深紫色","vid":3232479},{"name":"深蓝色","vid":28340},{"name":"白色","vid":28320},{"name":"粉红色","vid":3232480},{"name":"紫罗兰","vid":80882},{"name":"紫色","vid":28329},{"name":"红色","vid":28326},{"name":"绿色","vid":28335},{"name":"花色 ","vid":130164},{"name":"蓝色","vid":28338},{"name":"褐色","vid":132069},{"name":"透明","vid":107121},{"name":"酒红色","vid":28327},{"name":"黄色","vid":28324},{"name":"黑色","vid":28341}]}},{"is_color_prop":false,"is_enum_prop":true,"is_input_prop":false,"is_item_prop":false,"is_key_prop":false,"is_sale_prop":true,"multi":true,"must":false,"name":"手机套餐","pid":1630696,"prop_values":{"prop_value":[{"name":"官方标配","vid":6536025},{"name":"套餐一","vid":3266779},{"name":"套餐二","vid":3266781},{"name":"套餐三","vid":3266785},{"name":"套餐四","vid":3266786},{"name":"套餐五","vid":3266789},{"name":"套餐六","vid":3284565},{"name":"套餐七","vid":3284566},{"name":"套餐八","vid":3284567}]}},{"is_color_prop":false,"is_enum_prop":true,"is_input_prop":false,"is_item_prop":false,"is_key_prop":false,"is_sale_prop":false,"multi":false,"must":true,"name":"摄像头","pid":10002,"prop_values":{"prop_value":[{"name":"无摄像头","vid":30590},{"name":"10万","vid":10011},{"name":"30万","vid":10012},{"name":"50万","vid":22062},{"name":"100万","vid":20312},{"name":"130万","vid":10013},{"name":"200万","vid":10014},{"name":"300万","vid":10015},{"name":"320万","vid":123484},{"name":"400万","vid":29816},{"name":"500万","vid":27325},{"name":"600万","vid":29771},{"name":"700万","vid":28605},{"name":"800万","vid":29772},{"name":"1200万","vid":3269331},{"name":"1400万","vid":29836},{"name":"其它像素","vid":30589},{"name":"1300万","vid":29835},{"name":"4100万","vid":137838647}]}},{"is_color_prop":false,"is_enum_prop":true,"is_input_prop":false,"is_item_prop":false,"is_key_prop":false,"is_sale_prop":false,"multi":false,"must":false,"name":"是否智能手机","pid":20710,"prop_values":{"prop_value":[{"name":"智能手机","vid":21958},{"name":"非智能手机","vid":21959}]}},{"is_color_prop":false,"is_enum_prop":true,"is_input_prop":false,"is_item_prop":false,"is_key_prop":false,"is_sale_prop":false,"multi":false,"must":false,"name":"操作系统","pid":20573,"prop_values":{"prop_value":[{"name":"Symbian\/塞班","vid":21589},{"name":"Linux","vid":28968},{"name":"Palm\/奔迈","vid":28606},{"name":"Windows Mobile","vid":21591},{"name":"BlackBerry\/黑莓","vid":47416},{"name":"iPhone","vid":48200},{"name":"Android\/安卓","vid":3227476},{"name":"OMS","vid":3310760},{"name":"Windows phone","vid":84256470},{"name":"meego","vid":48286703},{"name":"其它操作系统","vid":30592},{"name":"无操作系统","vid":30591},{"name":"阿里云操作系统","vid":116033771}]}},{"is_color_prop":false,"is_enum_prop":true,"is_input_prop":false,"is_item_prop":false,"is_key_prop":false,"is_sale_prop":false,"multi":true,"must":false,"name":"高级功能","pid":20574,"prop_values":{"prop_value":[{"name":"WIFI上网","vid":32517},{"name":"GPS导航","vid":20710},{"name":"电视播放","vid":3224630},{"name":"双卡双待","vid":3224633},{"name":"高清视频","vid":30212998}]}},{"is_color_prop":false,"is_enum_prop":true,"is_input_prop":false,"is_item_prop":true,"is_key_prop":false,"is_sale_prop":false,"multi":false,"must":true,"name":"宝贝成色","pid":20879,"prop_values":{"prop_value":[{"name":"全新","vid":21456},{"name":"9.99成新","vid":32557},{"name":"9.5成新","vid":32558},{"name":"9成新","vid":32559},{"name":"8成新","vid":32561},{"name":"7成及7成以下","vid":51530}]}},{"is_color_prop":false,"is_enum_prop":true,"is_input_prop":false,"is_item_prop":true,"is_key_prop":false,"is_sale_prop":false,"multi":false,"must":true,"name":"售后服务","pid":20930,"prop_values":{"prop_value":[{"name":"全国联保","vid":32998},{"name":"店铺三包","vid":32999},{"name":"其它售后服务","vid":33000}]}},{"is_color_prop":false,"is_enum_prop":true,"is_input_prop":false,"is_item_prop":false,"is_key_prop":false,"is_sale_prop":false,"multi":false,"must":false,"name":"触摸屏","pid":9453082,"prop_values":{"prop_value":[{"name":"电容式触摸屏","vid":89595245},{"name":"电阻式触摸屏","vid":89595314}]}},{"is_color_prop":false,"is_enum_prop":true,"is_input_prop":false,"is_item_prop":false,"is_key_prop":false,"is_sale_prop":false,"multi":false,"must":false,"name":"手机CPU","pid":12303956,"prop_values":{"prop_value":[{"name":"128M","vid":21484},{"name":"500M以内","vid":119805948},{"name":"512M","vid":21483},{"name":"600M","vid":60570},{"name":"680M","vid":9075757},{"name":"800M","vid":60571},{"name":"1G","vid":75367811},{"name":"1.2G","vid":51786},{"name":"1.4G","vid":43890},{"name":"1.5G","vid":43148},{"name":"1.5G以上","vid":109189776},{"name":"双核1G","vid":109189777},{"name":"双核1.2G","vid":109189778},{"name":"双核1.4G","vid":131630450},{"name":"双核1.5G","vid":109189779},{"name":"其他","vid":20213},{"name":"650M","vid":43888},{"name":"四核1.5G","vid":137963589},{"name":"1.3G","vid":6316102},{"name":"四核1.4G","vid":151473594}]}},{"is_color_prop":false,"is_enum_prop":true,"is_input_prop":false,"is_item_prop":false,"is_key_prop":false,"is_sale_prop":false,"multi":false,"must":false,"name":"运行内存RAM","pid":12304004,"prop_values":{"prop_value":[{"name":"64M","vid":21485},{"name":"128M","vid":21484},{"name":"256M","vid":21482},{"name":"512M","vid":21483},{"name":"768M","vid":91603},{"name":"1G","vid":75367811},{"name":"2G","vid":75366757},{"name":"2G以上","vid":42836}]}},{"is_color_prop":false,"is_enum_prop":true,"is_input_prop":false,"is_item_prop":false,"is_key_prop":false,"is_sale_prop":false,"multi":false,"must":false,"name":"机身内存ROM","pid":12304035,"prop_values":{"prop_value":[{"name":"128M","vid":21484},{"name":"256M","vid":21482},{"name":"512M","vid":21483},{"name":"768M","vid":91603},{"name":"1.5G","vid":43148},{"name":"1G","vid":75367811},{"name":"2G","vid":75366757},{"name":"4G","vid":75366283},{"name":"8g","vid":75366695},{"name":"16g","vid":48072},{"name":"32G","vid":116177},{"name":"64G","vid":3222911},{"name":"64G以上","vid":109190236}]}},{"is_color_prop":false,"is_enum_prop":true,"is_input_prop":false,"is_item_prop":false,"is_key_prop":false,"is_sale_prop":false,"multi":false,"must":false,"name":"键盘类型","pid":10068223,"prop_values":{"prop_value":[{"name":"12键标准键盘","vid":119652018},{"name":"QWERTY全键盘","vid":15756160},{"name":"虚拟触屏键盘","vid":119652019}]}},{"is_color_prop":false,"is_enum_prop":true,"is_input_prop":false,"is_item_prop":false,"is_key_prop":false,"is_sale_prop":false,"multi":false,"must":false,"name":"厚度","pid":34375,"prop_values":{"prop_value":[{"name":"超薄(小于9mm)","vid":119650022},{"name":"薄(9mm~1cm)","vid":119650023},{"name":"普通(大于1cm)","vid":119650024}]}},{"is_color_prop":false,"is_enum_prop":true,"is_input_prop":false,"is_item_prop":false,"is_key_prop":false,"is_sale_prop":false,"multi":false,"must":false,"name":"主屏分辨率","pid":13801175,"prop_values":{"prop_value":[{"name":"960×640像素","vid":119646504},{"name":"960×540像素","vid":119646505},{"name":"1280×720像素","vid":119646506},{"name":"854×480像素","vid":119646507},{"name":"800×480像素","vid":119646509},{"name":"640×480像素","vid":119646510},{"name":"480×360像素","vid":119646511},{"name":"640×360像素","vid":119646512},{"name":"480×320像素","vid":119646513},{"name":"320×240像素","vid":119646514},{"name":"400×240像素","vid":119646515},{"name":"220×176像素","vid":119646516},{"name":"1280×800像素","vid":124670536},{"name":"1024x768像素","vid":138124316},{"name":"160x128像素","vid":144968324}]}}]}}}
|
@@ -0,0 +1,20 @@
|
|
1
|
+
{
|
2
|
+
"multi":false,
|
3
|
+
"must":true,
|
4
|
+
"name":"品牌",
|
5
|
+
"pid":20000,
|
6
|
+
"prop_values": {
|
7
|
+
"prop_value": [
|
8
|
+
{
|
9
|
+
"is_parent":true,
|
10
|
+
"name":"Acer\/宏基",
|
11
|
+
"vid":26691
|
12
|
+
},
|
13
|
+
{
|
14
|
+
"is_parent":true,
|
15
|
+
"name":"CONOR\/酷诺",
|
16
|
+
"vid":141848205
|
17
|
+
}
|
18
|
+
]
|
19
|
+
}
|
20
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"user_get_response":{"user":{"buyer_credit":{"good_num":1292,"level":8,"score":1292,"total_num":1292},"created":"2005-12-10 19:03:18","last_visit":"2012-06-29 23:28:25","location":{"city":"金华","state":"浙江"},"nick":"喜客多2008","seller_credit":{"good_num":2587208,"level":18,"score":2576453,"total_num":2624203},"sex":"f","type":"C","uid":"6cd6014f007c04426e2437fef870329a","user_id":18139021}}}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"user_get_response":{"user":{"buyer_credit":{"good_num":0,"level":0,"score":0,"total_num":0},"created":"2009-01-16 11:26:54","last_visit":"2012-06-29 23:23:57","location":{"city":"广州","state":"广东"},"nick":"t400旗舰店","seller_credit":{"good_num":329528,"level":15,"score":329528,"total_num":329528},"type":"B","uid":"f640763e5f08956d425e445e704b1fc4","user_id":174145821}}}
|
data/spec/rspec/category_spec.rb
CHANGED
@@ -6,7 +6,7 @@ describe Taobao::Category do
|
|
6
6
|
it 'should have name' do
|
7
7
|
category = Taobao::Category.new(28)
|
8
8
|
category.id.should == 28
|
9
|
-
|
9
|
+
|
10
10
|
fixture = 'category.json'.json_fixture
|
11
11
|
args = {
|
12
12
|
method: 'taobao.itemcats.get',
|
@@ -14,7 +14,6 @@ describe Taobao::Category do
|
|
14
14
|
cids: 28
|
15
15
|
}
|
16
16
|
Taobao.stub(:api_request).with(args).and_return(fixture)
|
17
|
-
|
18
17
|
category.name.should == 'ZIPPO/瑞士军刀/眼镜'
|
19
18
|
end
|
20
19
|
|
@@ -28,15 +27,16 @@ describe Taobao::Category do
|
|
28
27
|
}
|
29
28
|
Taobao.stub(:api_request).with(args).and_return(fixture)
|
30
29
|
category = Taobao::Category.new(-20)
|
31
|
-
|
32
|
-
.
|
30
|
+
expect {
|
31
|
+
category.name
|
32
|
+
}.to raise_error Taobao::IncorrectCategoryId, 'Incorrect category ID'
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
36
|
describe 'subcategories' do
|
37
37
|
it 'top level category should contains a few subcategories' do
|
38
38
|
category = Taobao::Category.new(28)
|
39
|
-
|
39
|
+
|
40
40
|
fixture = 'subcategories.json'.json_fixture
|
41
41
|
args = {
|
42
42
|
method: 'taobao.itemcats.get',
|
@@ -44,42 +44,21 @@ describe Taobao::Category do
|
|
44
44
|
parent_cid: 28
|
45
45
|
}
|
46
46
|
Taobao.stub(:api_request).with(args).and_return(fixture)
|
47
|
-
category.subcategories.
|
47
|
+
category.subcategories.should have_at_least(1).subcategory
|
48
48
|
end
|
49
49
|
end
|
50
|
-
|
50
|
+
|
51
51
|
describe 'properties' do
|
52
52
|
it 'should return empty array for top level category' do
|
53
53
|
category = Taobao::Category.new(0)
|
54
|
-
|
55
|
-
args = {
|
56
|
-
method: 'taobao.itemprops.get',
|
57
|
-
fields: 'pid,name,must,multi,prop_values',
|
58
|
-
cid: 0
|
59
|
-
}
|
60
|
-
Taobao.stub(:api_request).with(args).and_return(fixture)
|
61
|
-
|
62
|
-
category.properties.should == []
|
63
|
-
end
|
64
|
-
it 'should return a few properties' do
|
65
|
-
category = Taobao::Category.new(50005718)
|
66
|
-
|
67
|
-
fixture = 'category_properties.json'.json_fixture
|
68
|
-
args = {
|
69
|
-
method: 'taobao.itemprops.get',
|
70
|
-
fields: 'pid,name,must,multi,prop_values',
|
71
|
-
cid: 50005718
|
72
|
-
}
|
73
|
-
Taobao.stub(:api_request).with(args).and_return(fixture)
|
74
|
-
|
75
|
-
category.properties.size.should be > 0
|
54
|
+
category.properties.should be_a_kind_of(Taobao::PropertyList)
|
76
55
|
end
|
77
56
|
end
|
78
|
-
|
57
|
+
|
79
58
|
describe 'products' do
|
80
59
|
it 'should return ProductList object' do
|
81
60
|
category = Taobao::Category.new(28)
|
82
|
-
category.products.
|
61
|
+
category.products.should be_a_kind_of(Taobao::ProductList)
|
83
62
|
end
|
84
63
|
end
|
85
|
-
end
|
64
|
+
end
|
@@ -2,10 +2,10 @@
|
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
4
|
describe Taobao::ProductList do
|
5
|
-
|
5
|
+
|
6
6
|
describe 'init with default options and category id' do
|
7
7
|
pl = Taobao::ProductList.new(cid: 28)
|
8
|
-
|
8
|
+
|
9
9
|
fixture = 'items.json'.json_fixture
|
10
10
|
args = {
|
11
11
|
method: 'taobao.items.get',
|
@@ -15,30 +15,23 @@ describe Taobao::ProductList do
|
|
15
15
|
|
16
16
|
it 'should return 40 items' do
|
17
17
|
Taobao.stub(:api_request).with(args).and_return(fixture)
|
18
|
-
pl.
|
18
|
+
pl.should have_exactly(40).items
|
19
19
|
end
|
20
20
|
it 'total count should be greater than zero' do
|
21
21
|
Taobao.stub(:api_request).with(args).and_return(fixture)
|
22
22
|
pl.total_count.should be > 0
|
23
23
|
end
|
24
24
|
it 'items could be iterated' do
|
25
|
-
pl.each
|
26
|
-
item.cid.should be > 0
|
27
|
-
item.nick.size.should be > 0
|
28
|
-
item.num_iid.should be > 0
|
29
|
-
item.pic_url.should match /^http:\/\//
|
30
|
-
item.price.size.should be > 0
|
31
|
-
item.title.size.should be > 0
|
32
|
-
end
|
25
|
+
pl.each { |item| item.should be_a_kind_of(Taobao::Product) }
|
33
26
|
end
|
34
27
|
end
|
35
|
-
|
28
|
+
|
36
29
|
describe 'init and use advanced options' do
|
37
30
|
pl = Taobao::ProductList.new(cid: 28)
|
38
31
|
.page(15)
|
39
32
|
.per_page(10)
|
40
33
|
.order_by_price
|
41
|
-
|
34
|
+
|
42
35
|
fixture = 'items_page15.json'.json_fixture
|
43
36
|
args = {
|
44
37
|
method: 'taobao.items.get',
|
@@ -48,21 +41,22 @@ describe Taobao::ProductList do
|
|
48
41
|
page_size: 10,
|
49
42
|
order_by: 'price'
|
50
43
|
}
|
51
|
-
|
44
|
+
|
52
45
|
it 'should return 10 items' do
|
53
46
|
Taobao.stub(:api_request).with(args).and_return(fixture)
|
54
|
-
pl.
|
47
|
+
pl.should have_exactly(10).items
|
55
48
|
end
|
56
49
|
end
|
57
|
-
|
50
|
+
|
58
51
|
describe 'unknown method' do
|
59
52
|
it 'should raise exception' do
|
60
53
|
pl = Taobao::ProductList.new(cid: 28)
|
61
|
-
|
62
|
-
.
|
54
|
+
expect {
|
55
|
+
pl.undefined_method
|
56
|
+
}.to raise_error NoMethodError
|
63
57
|
end
|
64
58
|
end
|
65
|
-
|
59
|
+
|
66
60
|
describe 'category without items' do
|
67
61
|
it 'should return 0 items' do
|
68
62
|
pl = Taobao::ProductList.new(cid: 283333)
|
@@ -74,8 +68,8 @@ describe Taobao::ProductList do
|
|
74
68
|
}
|
75
69
|
Taobao.stub(:api_request).with(args).and_return(fixture)
|
76
70
|
pl.total_count.should == 0
|
77
|
-
pl.
|
71
|
+
pl.should have_exactly(0).items
|
78
72
|
end
|
79
73
|
end
|
80
|
-
|
74
|
+
|
81
75
|
end
|
data/spec/rspec/product_spec.rb
CHANGED
@@ -15,32 +15,33 @@ describe Taobao::Product do
|
|
15
15
|
'property_alias,item_img,prop_img,sku,video,outer_id,is_virtual',
|
16
16
|
num_iid: '2997802325'
|
17
17
|
}
|
18
|
-
|
18
|
+
|
19
19
|
it 'should returns product' do
|
20
20
|
Taobao.stub(:api_request).with(args).and_return(fixture)
|
21
|
-
product = Taobao::Product.new(2997802325)
|
21
|
+
product = Taobao::Product.new(2997802325)
|
22
22
|
|
23
23
|
product.cid.should == 1512
|
24
24
|
product.nick.should == '奇迹shouji'
|
25
25
|
product.num_iid.should == 2997802325
|
26
26
|
product.pic_url.should == 'http://img03.taobaocdn.com/bao/uploaded/i3/T1YsfeXbxkXXXpZak._110941.jpg'
|
27
|
-
product.price.should ==
|
28
|
-
product.title.should
|
27
|
+
product.price.should == 4300.00
|
28
|
+
product.title.should == '可完美越狱 Apple/苹果 iPhone 4S 正品 装软件 未拆封 未激活'
|
29
29
|
|
30
30
|
product.approve_status.should == 'onsale'
|
31
31
|
product.auction_point.should == 0
|
32
32
|
product.delist_time.should == '2012-06-01 22:41:44'
|
33
33
|
product.type.should == 'fixed'
|
34
34
|
end
|
35
|
-
|
35
|
+
|
36
36
|
describe 'get unknown product property' do
|
37
37
|
it 'should raise an exception' do
|
38
38
|
Taobao.stub(:api_request).with(args).and_return(fixture)
|
39
39
|
product = Taobao::Product.new(2997802325)
|
40
|
-
|
41
|
-
.
|
40
|
+
expect {
|
41
|
+
product.unknown_property
|
42
|
+
}.to raise_error NoMethodError
|
42
43
|
end
|
43
44
|
end
|
44
|
-
|
45
|
+
|
45
46
|
end
|
46
47
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Taobao::PropertyList do
|
5
|
+
describe 'initialize with category ID' do
|
6
|
+
|
7
|
+
it 'should returns property' do
|
8
|
+
property_list = Taobao::PropertyList.new(cid: 1512)
|
9
|
+
|
10
|
+
fixture = 'category_properties.json'.json_fixture
|
11
|
+
args = {
|
12
|
+
method: 'taobao.itemprops.get',
|
13
|
+
fields: 'pid,name,prop_values,must,multi,is_color_prop,is_key_prop,is_enum_prop,is_input_prop,is_sale_prop,is_item_prop',
|
14
|
+
cid: 1512
|
15
|
+
}
|
16
|
+
Taobao.stub(:api_request).with(args).and_return(fixture)
|
17
|
+
property_list.first.should be_a_kind_of(Taobao::Property)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe 'category without properties' do
|
22
|
+
|
23
|
+
it 'should returns 0 properties' do
|
24
|
+
property_list = Taobao::PropertyList.new(cid: 0)
|
25
|
+
|
26
|
+
fixture = 'top_category_properties.json'.json_fixture
|
27
|
+
args = {
|
28
|
+
method: 'taobao.itemprops.get',
|
29
|
+
fields: 'pid,name,prop_values,must,multi,is_color_prop,is_key_prop,is_enum_prop,is_input_prop,is_sale_prop,is_item_prop',
|
30
|
+
cid: 0
|
31
|
+
}
|
32
|
+
Taobao.stub(:api_request).with(args).and_return(fixture)
|
33
|
+
property_list.should have(0).items
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Taobao::Property do
|
5
|
+
describe 'initialize' do
|
6
|
+
describe 'with correct data' do
|
7
|
+
it 'should create Property object' do
|
8
|
+
property_response = 'property.json'.json_fixture
|
9
|
+
property = Taobao::Property.new(property_response)
|
10
|
+
|
11
|
+
property.multi.should be_false
|
12
|
+
property.must.should be_true
|
13
|
+
property.name.should == "品牌"
|
14
|
+
property.pid.should == 20000
|
15
|
+
property.values.should be_a_kind_of Array
|
16
|
+
property.values.should have_exactly(2).items
|
17
|
+
|
18
|
+
value = property.values.first
|
19
|
+
value[:is_parent].should be_true
|
20
|
+
value[:name].should == "Acer/宏基"
|
21
|
+
value[:vid].should == 26691
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe 'with incorrect data' do
|
26
|
+
it 'should throws an exception' do
|
27
|
+
expect { Taobao::Property.new({}) }
|
28
|
+
.to raise_error(Taobao::IncorrectProperty, 'Incorrect property data')
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/spec/rspec/search_spec.rb
CHANGED
@@ -2,10 +2,10 @@
|
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
4
|
describe Taobao do
|
5
|
-
|
5
|
+
|
6
6
|
describe 'search method returns product list' do
|
7
7
|
search = Taobao::search('iPhone')
|
8
|
-
|
8
|
+
|
9
9
|
fixture = 'search.json'.json_fixture
|
10
10
|
args = {
|
11
11
|
method: 'taobao.items.get',
|
@@ -15,7 +15,7 @@ describe Taobao do
|
|
15
15
|
|
16
16
|
it 'should return 40 items' do
|
17
17
|
Taobao.stub(:api_request).with(args).and_return(fixture)
|
18
|
-
search.
|
18
|
+
search.should have(40).results
|
19
19
|
end
|
20
20
|
it 'total count should be greater than zero' do
|
21
21
|
Taobao.stub(:api_request).with(args).and_return(fixture)
|
data/spec/rspec/taobao_spec.rb
CHANGED
@@ -12,7 +12,8 @@ describe Taobao do
|
|
12
12
|
describe 'set the private API key' do
|
13
13
|
it 'should be write-only' do
|
14
14
|
Taobao.private_key = :test
|
15
|
-
Taobao.
|
15
|
+
expect { Taobao.private_key }
|
16
|
+
.to raise_error NoMethodError
|
16
17
|
end
|
17
18
|
end
|
18
19
|
describe 'API request' do
|
@@ -21,15 +22,15 @@ describe Taobao do
|
|
21
22
|
Net::HTTP.stub(:post_form).and_return(fixture)
|
22
23
|
result = Taobao.api_request(method: 'taobao.itemcats.get',
|
23
24
|
fields: 'cid,parent_cid,name,is_parent', cids: 0)
|
24
|
-
result.
|
25
|
+
result.should be_a_kind_of(Hash)
|
25
26
|
end
|
26
27
|
end
|
27
28
|
describe 'failed API request' do
|
28
29
|
it 'should throws an exception' do
|
29
30
|
fixture = Response.new('error.json'.str_fixture)
|
30
31
|
Net::HTTP.stub(:post_form).and_return(fixture)
|
31
|
-
|
32
|
-
.
|
32
|
+
expect { Taobao.api_request({}) }
|
33
|
+
.to raise_error(Taobao::ApiError, 'Invalid arguments:cid')
|
33
34
|
end
|
34
35
|
end
|
35
36
|
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Taobao::User do
|
5
|
+
describe 'getting user by valid nickname' do
|
6
|
+
it 'should returns valid user info' do
|
7
|
+
fixture = 'user.json'.json_fixture
|
8
|
+
args = {
|
9
|
+
method: 'taobao.user.get',
|
10
|
+
fields: 'user_id,uid,nick,sex,buyer_credit,seller_credit,location,' +
|
11
|
+
'created,last_visit,birthday,type,status,alipay_no,alipay_account,'+
|
12
|
+
'alipay_account,email,consumer_protection,alipay_bind',
|
13
|
+
nick: '喜客多2008'
|
14
|
+
}
|
15
|
+
Taobao.stub(:api_request).with(args).and_return(fixture)
|
16
|
+
|
17
|
+
user = Taobao::User.new('喜客多2008')
|
18
|
+
|
19
|
+
user.good_purchases_count.should == 1292
|
20
|
+
user.buyer_level.should == 8
|
21
|
+
user.buyer_score.should == 1292
|
22
|
+
user.total_purchases_count.should == 1292
|
23
|
+
|
24
|
+
user.good_sales_count.should == 2587208
|
25
|
+
user.seller_level.should == 18
|
26
|
+
user.seller_score.should == 2576453
|
27
|
+
user.total_sales_count.should == 2624203
|
28
|
+
|
29
|
+
user.registration_date.should == DateTime.new(2005,12,10, 19,03,18)
|
30
|
+
user.last_visit.should == DateTime.new(2012,06,29, 23,28,25)
|
31
|
+
|
32
|
+
user.city.should == '金华'
|
33
|
+
user.state.should == '浙江'
|
34
|
+
|
35
|
+
user.sex.should == :female
|
36
|
+
user.type.should == 'C'
|
37
|
+
|
38
|
+
user.uid.should == '6cd6014f007c04426e2437fef870329a'
|
39
|
+
user.id.should == 18139021
|
40
|
+
end
|
41
|
+
end
|
42
|
+
describe 'getting user who does not specify his/her sex' do
|
43
|
+
it 'should returns :unknown value' do
|
44
|
+
fixture = 'user_unknown_sex.json'.json_fixture
|
45
|
+
args = {
|
46
|
+
method: 'taobao.user.get',
|
47
|
+
fields: 'user_id,uid,nick,sex,buyer_credit,seller_credit,location,' +
|
48
|
+
'created,last_visit,birthday,type,status,alipay_no,alipay_account,'+
|
49
|
+
'alipay_account,email,consumer_protection,alipay_bind',
|
50
|
+
nick: 't400旗舰店'
|
51
|
+
}
|
52
|
+
Taobao.stub(:api_request).with(args).and_return(fixture)
|
53
|
+
user = Taobao::User.new('t400旗舰店')
|
54
|
+
user.sex.should == :unknown
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe 'getting non-existent user' do
|
59
|
+
it 'should throws an exception' do
|
60
|
+
fixture = 'absent_user.json'.json_fixture
|
61
|
+
args = {
|
62
|
+
method: 'taobao.user.get',
|
63
|
+
fields: 'user_id,uid,nick,sex,buyer_credit,seller_credit,location,' +
|
64
|
+
'created,last_visit,birthday,type,status,alipay_no,alipay_account,'+
|
65
|
+
'alipay_account,email,consumer_protection,alipay_bind',
|
66
|
+
nick: 'nonexistent_user'
|
67
|
+
}
|
68
|
+
Taobao.stub(:api_request).with(args).and_return(fixture)
|
69
|
+
|
70
|
+
expect { Taobao::User.new('nonexistent_user').uid }
|
71
|
+
.to raise_error NoMethodError
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
class ToObjectTest
|
5
|
+
attr_reader :a, :b
|
6
|
+
include Taobao::Util
|
7
|
+
end
|
8
|
+
|
9
|
+
describe Taobao::Util do
|
10
|
+
describe 'to_object' do
|
11
|
+
it 'should convert some hash to object' do
|
12
|
+
obj = ToObjectTest.new
|
13
|
+
obj.to_object a: 5, b: 6
|
14
|
+
obj.a.should == 5
|
15
|
+
obj.b.should == 6
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,16 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: taobaorb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- m16a1
|
9
|
-
- yesmeck
|
10
9
|
autorequire:
|
11
10
|
bindir: bin
|
12
11
|
cert_chain: []
|
13
|
-
date: 2012-07-
|
12
|
+
date: 2012-07-27 00:00:00.000000000 Z
|
14
13
|
dependencies: []
|
15
14
|
description: Ruby wrapper for the Taobao API
|
16
15
|
email: a741su@gmail.com
|
@@ -18,14 +17,21 @@ executables: []
|
|
18
17
|
extensions: []
|
19
18
|
extra_rdoc_files: []
|
20
19
|
files:
|
20
|
+
- lib/taobao/abstract_list.rb
|
21
21
|
- lib/taobao/base.rb
|
22
22
|
- lib/taobao/category.rb
|
23
23
|
- lib/taobao/exceptions/api_error.rb
|
24
24
|
- lib/taobao/exceptions/incorrect_category_id.rb
|
25
|
+
- lib/taobao/exceptions/incorrect_property.rb
|
25
26
|
- lib/taobao/product.rb
|
26
27
|
- lib/taobao/product_list.rb
|
28
|
+
- lib/taobao/property.rb
|
29
|
+
- lib/taobao/property_list.rb
|
27
30
|
- lib/taobao/search.rb
|
31
|
+
- lib/taobao/user.rb
|
32
|
+
- lib/taobao/util.rb
|
28
33
|
- lib/taobaorb.rb
|
34
|
+
- spec/fixtures/absent_user.json
|
29
35
|
- spec/fixtures/category.json
|
30
36
|
- spec/fixtures/category_properties.json
|
31
37
|
- spec/fixtures/error.json
|
@@ -35,14 +41,21 @@ files:
|
|
35
41
|
- spec/fixtures/no_items.json
|
36
42
|
- spec/fixtures/product.json
|
37
43
|
- spec/fixtures/product_wo_property_alias.json
|
44
|
+
- spec/fixtures/property.json
|
38
45
|
- spec/fixtures/search.json
|
39
46
|
- spec/fixtures/subcategories.json
|
40
47
|
- spec/fixtures/top_category_properties.json
|
48
|
+
- spec/fixtures/user.json
|
49
|
+
- spec/fixtures/user_unknown_sex.json
|
41
50
|
- spec/rspec/category_spec.rb
|
42
51
|
- spec/rspec/product_list_spec.rb
|
43
52
|
- spec/rspec/product_spec.rb
|
53
|
+
- spec/rspec/property_list_spec.rb
|
54
|
+
- spec/rspec/property_spec.rb
|
44
55
|
- spec/rspec/search_spec.rb
|
45
56
|
- spec/rspec/taobao_spec.rb
|
57
|
+
- spec/rspec/user_spec.rb
|
58
|
+
- spec/rspec/util_spec.rb
|
46
59
|
- spec/spec_helper.rb
|
47
60
|
homepage: https://github.com/m16a1/taobaorb
|
48
61
|
licenses: []
|